%%%% chssbrds.ldf %%%% Created by Laurence D. Finston (LDF) Wed Oct 5 08:10:55 CEST 2011 %%%% $Id: chssbrds.ldf,v 1.7 2012/05/11 15:26:24 lfinsto1 Exp $ %% * (1) Copyright and License. %%%% This file is part of GNU 3DLDF, a package for three-dimensional drawing. %%%% Copyright (C) 2011, 2012 The Free Software Foundation %%%% GNU 3DLDF is free software; you can redistribute it and/or modify %%%% it under the terms of the GNU General Public License as published by %%%% the Free Software Foundation; either version 3 of the License, or %%%% (at your option) any later version. %%%% GNU 3DLDF is distributed in the hope that it will be useful, %%%% but WITHOUT ANY WARRANTY; without even the implied warranty of %%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %%%% GNU General Public License for more details. %%%% You should have received a copy of the GNU General Public License %%%% along with GNU 3DLDF; if not, write to the Free Software %%%% Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA %%%% GNU 3DLDF is a GNU package. %%%% It is part of the GNU Project of the %%%% Free Software Foundation %%%% and is published under the GNU General Public License. %%%% See the website http://www.gnu.org %%%% for more information. %%%% GNU 3DLDF is available for downloading from %%%% http://www.gnu.org/software/3dldf/LDF.html. %%%% Please send bug reports to Laurence.Finston@gmx.de %%%% The mailing list help-3dldf@gnu.org is available for people to %%%% ask other users for help. %%%% The mailing list info-3dldf@gnu.org is for sending %%%% announcements to users. To subscribe to these mailing lists, send an %%%% email with ``subscribe '' as the subject. %%%% The author can be contacted at: %%%% Laurence D. Finston %%%% c/o Free Software Foundation, Inc. %%%% 51 Franklin St, Fifth Floor %%%% Boston, MA 02110-1301 %%%% USA %%%% Laurence.Finston@gmx.de %% Created: October 5, 2011 %% Last updated: October 22, 2011 %% Run like this: %% 3dldf chssbrds.ldf %% mpost chssbrds.mp %% tex chssbrds.txt %% dvips -o chssbrds.ps chssbrds.dvi %% ps2pdf chssbrds.ps %% All on one line: if false: 3dldf chssbrds.ldf && mpost chssbrds.mp && tex chssbrds.txt && \ dvips -o chssbrds.ps chssbrds.dvi \ && ps2pdf chssbrds.ps fi; %% View the PostScript file using Ghostview like this: %% gv chssbrds.ps & %% or with GNU Ghostview like this: %% ggv chssbrds.ps & %% View the PDF file with Acrobat Reader like this: %% acroread chssbrds.pdf & %% * (1) Beginning of 3DLDF code. %% ** (2) %% !! START HERE: LDF 2011.10.14. %% The white pieces don't work the way I'd like them to, because their %% inner regions are just drawn, not filled. string S; S := "verbatimtex \font\large=cmr12 \font\largeit=cmti12 " & "\font\huge=cmr17 scaled \magstep3 " & "\\newdimen\chessdimen " & "\\newdimen\\normalchessdimen " & "\\newdimen\largechessdimen " & "\\newdimen\Largechessdimen " & "\\newdimen\hugechessdimen " & "\\newdimen\Hugechessdimen " & "\font\\normalchessfont=chess20 " & "\font\largechessfont=chess20 scaled \magstep1 " & "\font\Largechessfont=chess30 " & "\font\hugechessfont=chess30 scaled \magstep1 " & "\font\Hugechessfont=chess30 scaled \magstep2" & "\let\chessfont=\\normalchessfont " & "\\normalchessdimen=20pt " & "\largechessdimen=24pt " % 20pt * \magstep1 & "\Largechessdimen=30pt " & "\hugechessdimen=36pt " % 30pt * \magstep1 (* 30 1.2) & "\Hugechessdimen=43.2pt " % 30pt * \magstep2 (* 30 1.44) & "\chessdimen=\\normalchessdimen " & "\def\\normalchess{\let\chessfont=\\normalchessfont\chessdimen=\\normalchessdimen} " & "\def\largechess{\let\chessfont=\largechessfont\chessdimen=\largechessdimen} " & "\def\Largechess{\let\chessfont=\Largechessfont\chessdimen=\Largechessdimen} " & "\def\hugechess{\let\chessfont=\hugechessfont\chessdimen=\hugechessdimen} " & "\def\Hugechess{\let\chessfont=\Hugechessfont\chessdimen=\Hugechessdimen} " & " etex"; verbatim_metapost S; S := "verbatimtex " %% White pieces with chess font. & "\def\WP{\hbox to \chessdimen{{\chessfont\char'120}}} " % Pawn & "\def\WN{\hbox to \chessdimen{{\chessfont\char'116}}} " % Knight & "\def\WB{\hbox to \chessdimen{{\chessfont\char'102}}} " % Bishop & "\def\WR{\hbox to \chessdimen{{\chessfont\char'122}}} " % Rook & "\def\WQ{\hbox to \chessdimen{{\chessfont\char'121}}} " % Queen & "\def\WK{\hbox to \chessdimen{{\chessfont\char'113}}} " % King %% Black pieces with chess font & "\def\BP{\hbox to \chessdimen{{\chessfont\char'160}}} " % Pawn & "\def\BN{\hbox to \chessdimen{{\chessfont\char'156}}} " % Knight & "\def\BB{\hbox to \chessdimen{{\chessfont\char'142}}} " % Bishop & "\def\BR{\hbox to \chessdimen{{\chessfont\char'162}}} " % Rook & "\def\BQ{\hbox to \chessdimen{{\chessfont\char'161}}} " % Queen & "\def\BK{\hbox to \chessdimen{{\chessfont\char'153}}} " % King & " etex"; verbatim_metapost S; %% *** (3) Declarations and initializations point p[]; path q[]; rectangle r[]; transform t[]; pen normal_pen; pen thin_pen; pen line_pen; pen dot_pen; normal_pen := pencircle scaled (.5mm, .5mm, .5mm); thin_pen := pencircle scaled (.25mm, .25mm, .25mm); line_pen := pencircle scaled (.333mm, .333mm, .333mm); dot_pen := pencircle scaled (1mm, 1mm, 1mm); pickup line_pen; color_vector cv; cv += blue; cv += red; cv += green; cv += cyan; cv += magenta; cv += yellow; cv += violet; cv += orange; cv += black; picture v[]; bool_point_vector bpv; bool do_labels; do_labels := true; % false string s; %% *** (3) Macros % point P %% **** (4) def chessboard (Q, V) {numeric unit_size, bool upside_down}= %% ***** (5) point P[]; rectangle R[]; transform T[]; string S; R0 := unitsquare scaled (unit_size, 0, unit_size) rotated (90, 0); R1 := R0; R2 := R0; T0 := identity shifted (unit_size, 0); T1 := identity shifted (0, -unit_size); for j = 0 upto 7: R2 := R1; for i = 0 upto 7: Q[j][i] := get_center R2; if is_odd i and is_even j: fill R2 with_color gray on_picture V; fi; if is_even i and is_odd j: fill R2 with_color gray on_picture V; fi; draw R2 on_picture V; R2 *= T0; endfor; R1 *= T1; endfor; for i = 0 upto 3: P[i] := get_point (i) R0; if upside_down: shift P[i] (7unit_size, 0); fi; endfor; if false: % true dotlabel.lft(0, P0) V; dotlabel.lft(3, P3) V; dotlabel.lft(1, P1) V; dotlabel.lft(2, P2) V; fi; if upside_down: P4 := mediate(P1, P2); P5 := mediate(P0, P1); P6 := P5 * inverse T1; else: P4 := mediate(P0, P3); P5 := mediate(P0, P1); P6 := P5 * inverse T1; fi; if upside_down: for i = 1 upto 8: S := "{\large " & decimal i & "}\kern1pt"; label.rt(S, P4) rotated (0, 0, 180) V; P6 *= P4 *= T1; endfor; else: for i = 8 downto 1: S := "{\large " & decimal i & "}\kern1pt"; label.lft(S, P4) V; P6 *= P4 *= T1; endfor; fi; N := 97; P7 := P6; if upside_down: rotate_around P7 (mediate(Q[3][0], Q[4][0]), mediate(Q[3][7], Q[4][7])) 180; % label("7", P7) V; % label("4-0", Q[4][0]) V; % label("4-7", Q[4][7]) V; % label("3-0", Q[3][0]) V; % label("3-7", Q[3][7]) V; % else: % label("7", P7) V; fi; verbatim_metapost "verbatimtex \setbox0=\hbox{\largeit A\/} etex;"; if upside_down: for i = 0 upto 7: S := "\hbox to \wd0{\hss\vbox to \ht0{\vfil\hbox{{\largeit\char" & decimal N & "}}}\hss}"; label.top(S, P7) rotated (0, 0, 180) V; P7 *= inverse T0; N += 1; endfor; else: for i = 0 upto 7: S := "\hbox to \wd0{\hss\vbox to \ht0{\vfil\hbox{{\largeit\char" & decimal N & "}}}\hss}"; label.bot(S, P7) V; P7 *= T0; N += 1; endfor; fi; % label.bot("$P_{6}$", P6) V; %% ***** (5) enddef; %% **** (4) def WP (P) {numeric x_val, numeric y_val} = label("{\WP}", P[x_val][y_val]); enddef; def BP (P) {numeric x_val, numeric y_val} = label("{\BP}", P[x_val][y_val]); enddef; def WQ (P) {numeric x_val, numeric y_val} = label("{\WQ}", P[x_val][y_val]); enddef; def BQ (P) {numeric x_val, numeric y_val} = label("{\BQ}", P[x_val][y_val]); enddef; %% **** (4) unit_size := .75cm; %% *** (3) Figure 0 beginfig(0); picture Z; point m[][]; %% Contains the centers of the squares after the call to `chessboard'. %% LDF 2011.10.11. chessboard (m, Z) {unit_size, false}; v0 := Z; current_picture += v0; point n[][]; picture Y; chessboard (n, Y) {unit_size, true}; v3 := Y; endfig; %% *** (3) Figure 1 beginfig(1); current_picture += v0; if false: for i = 0 upto 7: for j = 0 upto 7: drawdot m[i][j] withpen dot_pen with_color cv[j]; endfor; endfor; fi; v1 := v0; shift v1 (8 * unit_size + 3.5cm, 0); current_picture += v1; if false: WQ(m) {0, 0}; BQ(m) {0, 1}; rectangle r[]; r0 := unit_rectangle scaled (unit_size, 0, unit_size) rotated (90, 0); shift r0 by m[1][0]; % unfill r0; % draw r0 with_color green; % WQ(m) {1, 0}; % BQ(m) {1, 1}; fi; endfig with_projection parallel_x_y no_sort; %% !! TODO: LDF 2011.10.22. Write macros for outputting the "gathering" pages with %% and without help labels. %% *** (3) Fig. 2: Recto of gathering. beginfig(2); pickup normal_pen; p0 := origin; p1 := p0 shifted (210mm, 0); p2 := p1 shifted (0, -297mm); p3 := p2 shifted (-210mm, 0); draw p0 -- p1 -- p2 -- p3 -- cycle; if true: % false if do_labels: dotlabel.ulft("$p_{0}$", p0); dotlabel.urt("$p_{1}$", p1); dotlabel.lrt("$p_{2}$", p2); dotlabel.llft("$p_{3}$", p3); fi; fi; %% **** (4) p4 := mediate(p0, p1); p5 := mediate(p1, p2); p6 := mediate(p2, p3); p7 := mediate(p3, p0); draw p4 -- p6; draw p5 -- p7; if true: % false if do_labels: dotlabel.top("$p_{4}$", p4); dotlabel.rt("$p_{5}$", p5); dotlabel.bot("$p_{6}$", p6); dotlabel.lft("$p_{7}$", p7); fi; fi; %% **** (4) p8 := mediate(p1, p5); p9 := mediate(p5, p2); p10 := mediate(p3, p7); p11 := mediate(p7, p0); draw p11 -- p8; draw p10 -- p9; if true: % false if do_labels: dotlabel.rt("$p_{8}$", p8); dotlabel.rt("$p_{9}$", p9); dotlabel.lft("$p_{10}$", p10); dotlabel.lft("$p_{11}$", p11); fi; fi; %% **** (4) point g[]; g8 := (.5[xpart p4, xpart p1], .5[ypart p1, ypart p8]); if do_labels: label("{\huge 8}", g8 shifted (-3cm, 0)) rotated (0, 0, 180); draw g8 shifted (-3.25cm, .5cm) -- g8 shifted (.25cm -3cm, .5cm) with_pen dot_pen; fi; label("8", p4 shifted (.333cm, -.333cm)) rotated (0, 0, 180); v2 := v3; shift v2 by (g8 - (3.5unit_size, -3.5unit_size)); shift v2 (2unit_size, 0); current_picture += v2; %% **** (4) g1 := (.5[xpart p4, xpart p1], .5[ypart p8, ypart p5]); if do_labels: label("{\huge 1}", g1 shifted (3cm, 0)); fi; label("1", p5 shifted (-.333cm, .333cm)); v2 := v0; shift v2 by (g1 - (3.5unit_size, -3.5unit_size)); shift v2 (-2unit_size, 0); current_picture += v2; g4 := (.5[xpart p4, xpart p1], .5[ypart p5, ypart p9]); if do_labels: label("{\huge 4}", g4 shifted (-3cm, 0)) rotated (0, 0, 180); fi; label("4", (xpart p4, ypart p7) shifted (.333cm, -.333cm)) rotated (0, 0, 180); v2 := v3; shift v2 by (g4 - (3.5unit_size, -3.5unit_size)); shift v2 (2unit_size, 0); current_picture += v2; %% **** (4) g5 := (.5[xpart p4, xpart p1], .5[ypart p2, ypart p9]); if do_labels: label("{\huge 5}", g5 shifted (3cm, 0)); fi; label("5", p2 shifted (-.333cm, .333cm)); v2 := v0; shift v2 by (g5 - (3.5unit_size, -3.5unit_size)); shift v2 (-2unit_size, 0); current_picture += v2; %% **** (4) g9 := (.5[xpart p4, xpart p0], .5[ypart p1, ypart p8]); if do_labels: label("{\huge 9}", g9 shifted (-2cm, 0)) rotated (0, 0, 180); label.lft("{\huge (nine)}", g9 shifted (-2cm -.333cm, 0)) rotated (0, 0, 180); draw g9 shifted (-.25cm -2cm, .5cm) -- g9 shifted (.25cm -2cm, .5cm) with_pen dot_pen; fi; label("9", p0 shifted (.333cm, -.333cm)) rotated (0, 0, 180); v2 := v3; shift v2 by (g9 - (3.5unit_size, -3.5unit_size)); shift v2 (2unit_size, 0); current_picture += v2; %% **** (4) g16 := (.5[xpart p4, xpart p0], .5[ypart p8, ypart p5]); if do_labels: label("{\huge 16}", g16 shifted (3cm, 0)); fi; label("16", (xpart p4, ypart p7) shifted (-.333cm, .333cm)); v2 := v0; shift v2 by (g16 - (3.5unit_size, -3.5unit_size)); shift v2 (-2unit_size, 0); current_picture += v2; %% **** (4) g13 := (.5[xpart p4, xpart p0], .5[ypart p5, ypart p9]); if do_labels: label("{\huge 13}", g13 shifted (-3cm, 0)) rotated (0, 0, 180); fi; label("13", p7 shifted (.333cm, -.333cm)) rotated (0, 0, 180); v2 := v3; shift v2 by (g13 - (3.5unit_size, -3.5unit_size)); shift v2 (2unit_size, 0); current_picture += v2; %% **** (4) g12 := (.5[xpart p4, xpart p0], .5[ypart p2, ypart p9]); if do_labels: label("{\huge 12}", g12 shifted (3cm, 0)); fi; label("12", p6shifted (-.333cm, .333cm)); v2 := v0; shift v2 by (g12 - (3.5unit_size, -3.5unit_size)); shift v2 (-2unit_size, 0); current_picture += v2; %% **** (4) if do_labels: %% ***** (5) S := "verbatimtex \setbox0=\hbox{fold}\setbox1=\vbox{\copy0\hbox to \wd0{\hfil A\hfil}} " & "\setbox2=\vbox{\copy0\hbox to \wd0{\hfil B\hfil}} " & "\setbox3=\vbox{\copy0\hbox to \wd0{\hfil C\hfil}} " & "etex"; verbatim_metapost S; label("\copy1", mediate(p5, p7, .1)); label("\copy1", mediate(p7, p5, .05)); draw unit_circle scaled (.5cm, 0, .5cm) rotated (90, 0) shifted by mediate(p5, p7, .1); draw unit_circle scaled (.5cm, 0, .5cm) rotated (90, 0) shifted by mediate(p7, p5, .05); %% ***** (5) label("\copy2", mediate(p8, p11, .1)); label("\box2", mediate(p11, p8, .05)); draw unit_circle scaled (.5cm, 0, .5cm) rotated (90, 0) shifted by mediate(p8, p11, .1); draw unit_circle scaled (.5cm, 0, .5cm) rotated (90, 0) shifted by mediate(p11, p8, .05); %% ***** (5) label("\copy3", mediate(p4, p6, .25) shifted (.1cm, 0)); label("\box3", mediate(p6, p4, .25) shifted (.1cm, 0)); draw unit_circle scaled (.5cm, 0, .5cm) rotated (90, 0) shifted by (mediate(p4, p6, .25) shifted (.1cm, 0)); draw unit_circle scaled (.5cm, 0, .5cm) rotated (90, 0) shifted by (mediate(p6, p4, .25) shifted (.1cm, 0)); %% ***** (5) fi; endfig with_projection parallel_x_y no_sort; %% *** (3) Fig. 3: Verso of gathering. beginfig(3); pickup normal_pen; draw p0 -- p1 -- p2 -- p3 -- cycle; if true: % false if do_labels: dotlabel.ulft("$p_{0}$", p0); dotlabel.urt("$p_{1}$", p1); dotlabel.lrt("$p_{2}$", p2); dotlabel.llft("$p_{3}$", p3); fi; fi; %% **** (4) draw p4 -- p6; draw p5 -- p7; if true: % false if do_labels: dotlabel.top("$p_{4}$", p4); dotlabel.rt("$p_{5}$", p5); dotlabel.bot("$p_{6}$", p6); dotlabel.lft("$p_{7}$", p7); fi; fi; %% **** (4) draw p11 -- p8; draw p10 -- p9; if true: % false if do_labels: dotlabel.rt("$p_{8}$", p8); dotlabel.rt("$p_{9}$", p9); dotlabel.lft("$p_{10}$", p10); dotlabel.lft("$p_{11}$", p11); fi; fi; %% **** (4) g10 := (.5[xpart p4, xpart p1], .5[ypart p1, ypart p8]); if do_labels: label("{\huge 10}", g10 shifted (-3cm, 0)) rotated (0, 0, 180); fi; label("10", p4 shifted (.333cm, -.333cm)) rotated (0, 0, 180); v2 := v3; shift v2 by (g10 - (3.5unit_size, -3.5unit_size)); shift v2 (2unit_size, 0); current_picture += v2; %% **** (4) g15 := (.5[xpart p4, xpart p1], .5[ypart p8, ypart p5]); if do_labels: label("{\huge 15}", g15 shifted (3cm, 0)); fi; label("15", p5 shifted (-.333cm, .333cm)); v2 := v0; shift v2 by (g15 - (3.5unit_size, -3.5unit_size)); shift v2 (-2unit_size, 0); current_picture += v2; %% **** (4) g14 := (.5[xpart p4, xpart p1], .5[ypart p5, ypart p9]); if do_labels: label("{\huge 14}", g14 shifted (-3cm, 0)) rotated (0, 0, 180); fi; label("14", (xpart p4, ypart p7) shifted (.333cm, -.333cm)) rotated (0, 0, 180); v2 := v3; shift v2 by (g14 - (3.5unit_size, -3.5unit_size)); shift v2 (2unit_size, 0); current_picture += v2; %% **** (4) g11 := (.5[xpart p4, xpart p1], .5[ypart p2, ypart p9]); if do_labels: label("{\huge 11}", g11 shifted (3cm, 0)); fi; label("11", p2 shifted (-.333cm, .333cm)); v2 := v0; shift v2 by (g11 - (3.5unit_size, -3.5unit_size)); shift v2 (-2unit_size, 0); current_picture += v2; %% **** (4) g7 := (.5[xpart p4, xpart p0], .5[ypart p1, ypart p8]); if do_labels: label("{\huge 7}", g7 shifted (-2cm, 0)) rotated (0, 0, 180); fi; label("7", p0 shifted (.333cm, -.333cm)) rotated (0, 0, 180); v2 := v3; shift v2 by (g7 - (3.5unit_size, -3.5unit_size)); shift v2 (2unit_size, 0); current_picture += v2; %% **** (4) g2 := (.5[xpart p4, xpart p0], .5[ypart p8, ypart p5]); if do_labels: label("{\huge 2}", g2 shifted (3cm, 0)); fi; label("2", (xpart p4, ypart p7) shifted (-.333cm, .333cm)); v2 := v0; shift v2 by (g2 - (3.5unit_size, -3.5unit_size)); shift v2 (-2unit_size, 0); current_picture += v2; %% **** (4) g3 := (.5[xpart p4, xpart p0], .5[ypart p5, ypart p9]); if do_labels: label("{\huge 3}", g3 shifted (-3cm, 0)) rotated (0, 0, 180); fi; label("3", p7 shifted (.333cm, -.333cm)) rotated (0, 0, 180); v2 := v3; shift v2 by (g3 - (3.5unit_size, -3.5unit_size)); shift v2 (2unit_size, 0); current_picture += v2; %% **** (4) g6 := (.5[xpart p4, xpart p0], .5[ypart p2, ypart p9]); if do_labels: label("{\huge 6}", g6 shifted (2.5cm, 0)); label.rt("{\huge (six)}", g6 shifted (3cm, 0)); draw g6 shifted (2.5cm -.25cm, -.5cm) -- g6 shifted (2.5cm + .25cm, -.5cm) with_pen dot_pen; fi; label("6", p6 shifted (-.333cm, .333cm)); v2 := v0; shift v2 by (g6 - (3.5unit_size, -3.5unit_size)); shift v2 (-2unit_size, 0); current_picture += v2; %% **** (4) % v2 := v0; % shift v2 by (p0 - m[0][0]); % shift v2 (.5unit_size, -.5unit_size); % shift v2 (.5cm, -.5cm); %current_picture += v2; %% **** (4) if do_labels: %% ***** (5) S := "verbatimtex \setbox0=\hbox{fold}\setbox1=\vbox{\copy0\hbox to \wd0{\hfil A\hfil}} " & "\setbox2=\vbox{\copy0\hbox to \wd0{\hfil B\hfil}} " & "\setbox3=\vbox{\copy0\hbox to \wd0{\hfil C\hfil}} " & "etex"; verbatim_metapost S; label("\copy1", mediate(p5, p7, .1)); label("\copy1", mediate(p7, p5, .05)); draw unit_circle scaled (.5cm, 0, .5cm) rotated (90, 0) shifted by mediate(p5, p7, .1); draw unit_circle scaled (.5cm, 0, .5cm) rotated (90, 0) shifted by mediate(p7, p5, .05); %% ***** (5) label("\copy2", mediate(p8, p11, .1)); label("\box2", mediate(p11, p8, .05)); draw unit_circle scaled (.5cm, 0, .5cm) rotated (90, 0) shifted by mediate(p8, p11, .1); draw unit_circle scaled (.5cm, 0, .5cm) rotated (90, 0) shifted by mediate(p11, p8, .05); %% ***** (5) label("\copy3", mediate(p4, p6, .25) shifted (.1cm, 0)); label("\box3", mediate(p6, p4, .25) shifted (.1cm, 0)); draw unit_circle scaled (.5cm, 0, .5cm) rotated (90, 0) shifted by (mediate(p4, p6, .25) shifted (.1cm, 0)); draw unit_circle scaled (.5cm, 0, .5cm) rotated (90, 0) shifted by (mediate(p6, p4, .25) shifted (.1cm, 0)); %% ***** (5) fi; endfig with_projection parallel_x_y no_sort; %% *** (3) Fig. 4: Recto of gathering without labels. do_labels := false; beginfig(4); pickup normal_pen; draw p0 -- p1 -- p2 -- p3 -- cycle; if true: % false if do_labels: dotlabel.ulft("$p_{0}$", p0); dotlabel.urt("$p_{1}$", p1); dotlabel.lrt("$p_{2}$", p2); dotlabel.llft("$p_{3}$", p3); fi; fi; %% **** (4) draw p4 -- p6; draw p5 -- p7; if true: % false if do_labels: dotlabel.top("$p_{4}$", p4); dotlabel.rt("$p_{5}$", p5); dotlabel.bot("$p_{6}$", p6); dotlabel.lft("$p_{7}$", p7); fi; fi; %% **** (4) draw p11 -- p8; draw p10 -- p9; if true: % false if do_labels: dotlabel.rt("$p_{8}$", p8); dotlabel.rt("$p_{9}$", p9); dotlabel.lft("$p_{10}$", p10); dotlabel.lft("$p_{11}$", p11); fi; fi; %% **** (4) if do_labels: label("{\huge 8}", g8 shifted (-3cm, 0)) rotated (0, 0, 180); draw g8 shifted (-3.25cm, .5cm) -- g8 shifted (.25cm -3cm, .5cm) with_pen dot_pen; fi; label("8", p4 shifted (.333cm, -.333cm)) rotated (0, 0, 180); v2 := v3; shift v2 by (g8 - (3.5unit_size, -3.5unit_size)); shift v2 (2unit_size, 0); current_picture += v2; %% **** (4) if do_labels: label("{\huge 1}", g1 shifted (3cm, 0)); fi; label("1", p5 shifted (-.333cm, .333cm)); v2 := v0; shift v2 by (g1 - (3.5unit_size, -3.5unit_size)); shift v2 (-2unit_size, 0); current_picture += v2; if do_labels: label("{\huge 4}", g4 shifted (-3cm, 0)) rotated (0, 0, 180); fi; label("4", (xpart p4, ypart p7) shifted (.333cm, -.333cm)) rotated (0, 0, 180); v2 := v3; shift v2 by (g4 - (3.5unit_size, -3.5unit_size)); shift v2 (2unit_size, 0); current_picture += v2; %% **** (4) if do_labels: label("{\huge 5}", g5 shifted (3cm, 0)); fi; label("5", p2 shifted (-.333cm, .333cm)); v2 := v0; shift v2 by (g5 - (3.5unit_size, -3.5unit_size)); shift v2 (-2unit_size, 0); current_picture += v2; %% **** (4) if do_labels: label("{\huge 9}", g9 shifted (-2cm, 0)) rotated (0, 0, 180); label.lft("{\huge (nine)}", g9 shifted (-2cm -.333cm, 0)) rotated (0, 0, 180); draw g9 shifted (-.25cm -2cm, .5cm) -- g9 shifted (.25cm -2cm, .5cm) with_pen dot_pen; fi; label("9", p0 shifted (.333cm, -.333cm)) rotated (0, 0, 180); v2 := v3; shift v2 by (g9 - (3.5unit_size, -3.5unit_size)); shift v2 (2unit_size, 0); current_picture += v2; %% **** (4) if do_labels: label("{\huge 16}", g16 shifted (3cm, 0)); fi; label("16", (xpart p4, ypart p7) shifted (-.333cm, .333cm)); v2 := v0; shift v2 by (g16 - (3.5unit_size, -3.5unit_size)); shift v2 (-2unit_size, 0); current_picture += v2; %% **** (4) if do_labels: label("{\huge 13}", g13 shifted (-3cm, 0)) rotated (0, 0, 180); fi; label("13", p7 shifted (.333cm, -.333cm)) rotated (0, 0, 180); v2 := v3; shift v2 by (g13 - (3.5unit_size, -3.5unit_size)); shift v2 (2unit_size, 0); current_picture += v2; %% **** (4) if do_labels: label("{\huge 12}", g12 shifted (3cm, 0)); fi; label("12", p6shifted (-.333cm, .333cm)); v2 := v0; shift v2 by (g12 - (3.5unit_size, -3.5unit_size)); shift v2 (-2unit_size, 0); current_picture += v2; %% **** (4) if do_labels: %% ***** (5) S := "verbatimtex \setbox0=\hbox{fold}\setbox1=\vbox{\copy0\hbox to \wd0{\hfil A\hfil}} " & "\setbox2=\vbox{\copy0\hbox to \wd0{\hfil B\hfil}} " & "\setbox3=\vbox{\copy0\hbox to \wd0{\hfil C\hfil}} " & "etex"; verbatim_metapost S; label("\copy1", mediate(p5, p7, .1)); label("\copy1", mediate(p7, p5, .05)); draw unit_circle scaled (.5cm, 0, .5cm) rotated (90, 0) shifted by mediate(p5, p7, .1); draw unit_circle scaled (.5cm, 0, .5cm) rotated (90, 0) shifted by mediate(p7, p5, .05); %% ***** (5) label("\copy2", mediate(p8, p11, .1)); label("\box2", mediate(p11, p8, .05)); draw unit_circle scaled (.5cm, 0, .5cm) rotated (90, 0) shifted by mediate(p8, p11, .1); draw unit_circle scaled (.5cm, 0, .5cm) rotated (90, 0) shifted by mediate(p11, p8, .05); %% ***** (5) label("\copy3", mediate(p4, p6, .25) shifted (.1cm, 0)); label("\box3", mediate(p6, p4, .25) shifted (.1cm, 0)); draw unit_circle scaled (.5cm, 0, .5cm) rotated (90, 0) shifted by (mediate(p4, p6, .25) shifted (.1cm, 0)); draw unit_circle scaled (.5cm, 0, .5cm) rotated (90, 0) shifted by (mediate(p6, p4, .25) shifted (.1cm, 0)); %% ***** (5) fi; endfig with_projection parallel_x_y no_sort; %% *** (3) Fig. 5: Verso of gathering without labels. beginfig(5); pickup normal_pen; draw p0 -- p1 -- p2 -- p3 -- cycle; if true: % false if do_labels: dotlabel.ulft("$p_{0}$", p0); dotlabel.urt("$p_{1}$", p1); dotlabel.lrt("$p_{2}$", p2); dotlabel.llft("$p_{3}$", p3); fi; fi; %% **** (4) draw p4 -- p6; draw p5 -- p7; if true: % false if do_labels: dotlabel.top("$p_{4}$", p4); dotlabel.rt("$p_{5}$", p5); dotlabel.bot("$p_{6}$", p6); dotlabel.lft("$p_{7}$", p7); fi; fi; %% **** (4) draw p11 -- p8; draw p10 -- p9; if true: % false if do_labels: dotlabel.rt("$p_{8}$", p8); dotlabel.rt("$p_{9}$", p9); dotlabel.lft("$p_{10}$", p10); dotlabel.lft("$p_{11}$", p11); fi; fi; %% **** (4) if do_labels: label("{\huge 10}", g10 shifted (-3cm, 0)) rotated (0, 0, 180); fi; label("10", p4 shifted (.333cm, -.333cm)) rotated (0, 0, 180); v2 := v3; shift v2 by (g10 - (3.5unit_size, -3.5unit_size)); shift v2 (2unit_size, 0); current_picture += v2; %% **** (4) if do_labels: label("{\huge 15}", g15 shifted (3cm, 0)); fi; label("15", p5 shifted (-.333cm, .333cm)); v2 := v0; shift v2 by (g15 - (3.5unit_size, -3.5unit_size)); shift v2 (-2unit_size, 0); current_picture += v2; %% **** (4) if do_labels: label("{\huge 14}", g14 shifted (-3cm, 0)) rotated (0, 0, 180); fi; label("14", (xpart p4, ypart p7) shifted (.333cm, -.333cm)) rotated (0, 0, 180); v2 := v3; shift v2 by (g14 - (3.5unit_size, -3.5unit_size)); shift v2 (2unit_size, 0); current_picture += v2; %% **** (4) if do_labels: label("{\huge 11}", g11 shifted (3cm, 0)); fi; label("11", p2 shifted (-.333cm, .333cm)); v2 := v0; shift v2 by (g11 - (3.5unit_size, -3.5unit_size)); shift v2 (-2unit_size, 0); current_picture += v2; %% **** (4) if do_labels: label("{\huge 7}", g7 shifted (-2cm, 0)) rotated (0, 0, 180); fi; label("7", p0 shifted (.333cm, -.333cm)) rotated (0, 0, 180); v2 := v3; shift v2 by (g7 - (3.5unit_size, -3.5unit_size)); shift v2 (2unit_size, 0); current_picture += v2; %% **** (4) if do_labels: label("{\huge 2}", g2 shifted (3cm, 0)); fi; label("2", (xpart p4, ypart p7) shifted (-.333cm, .333cm)); v2 := v0; shift v2 by (g2 - (3.5unit_size, -3.5unit_size)); shift v2 (-2unit_size, 0); current_picture += v2; %% **** (4) if do_labels: label("{\huge 3}", g3 shifted (-3cm, 0)) rotated (0, 0, 180); fi; label("3", p7 shifted (.333cm, -.333cm)) rotated (0, 0, 180); v2 := v3; shift v2 by (g3 - (3.5unit_size, -3.5unit_size)); shift v2 (2unit_size, 0); current_picture += v2; %% **** (4) if do_labels: label("{\huge 6}", g6 shifted (2.5cm, 0)); label.rt("{\huge (six)}", g6 shifted (3cm, 0)); draw g6 shifted (2.5cm -.25cm, -.5cm) -- g6 shifted (2.5cm + .25cm, -.5cm) with_pen dot_pen; fi; label("6", p6 shifted (-.333cm, .333cm)); v2 := v0; shift v2 by (g6 - (3.5unit_size, -3.5unit_size)); shift v2 (-2unit_size, 0); current_picture += v2; %% **** (4) % v2 := v0; % shift v2 by (p0 - m[0][0]); % shift v2 (.5unit_size, -.5unit_size); % shift v2 (.5cm, -.5cm); %current_picture += v2; %% **** (4) if do_labels: %% ***** (5) S := "verbatimtex \setbox0=\hbox{fold}\setbox1=\vbox{\copy0\hbox to \wd0{\hfil A\hfil}} " & "\setbox2=\vbox{\copy0\hbox to \wd0{\hfil B\hfil}} " & "\setbox3=\vbox{\copy0\hbox to \wd0{\hfil C\hfil}} " & "etex"; verbatim_metapost S; label("\copy1", mediate(p5, p7, .1)); label("\copy1", mediate(p7, p5, .05)); draw unit_circle scaled (.5cm, 0, .5cm) rotated (90, 0) shifted by mediate(p5, p7, .1); draw unit_circle scaled (.5cm, 0, .5cm) rotated (90, 0) shifted by mediate(p7, p5, .05); %% ***** (5) label("\copy2", mediate(p8, p11, .1)); label("\box2", mediate(p11, p8, .05)); draw unit_circle scaled (.5cm, 0, .5cm) rotated (90, 0) shifted by mediate(p8, p11, .1); draw unit_circle scaled (.5cm, 0, .5cm) rotated (90, 0) shifted by mediate(p11, p8, .05); %% ***** (5) label("\copy3", mediate(p4, p6, .25) shifted (.1cm, 0)); label("\box3", mediate(p6, p4, .25) shifted (.1cm, 0)); draw unit_circle scaled (.5cm, 0, .5cm) rotated (90, 0) shifted by (mediate(p4, p6, .25) shifted (.1cm, 0)); draw unit_circle scaled (.5cm, 0, .5cm) rotated (90, 0) shifted by (mediate(p6, p4, .25) shifted (.1cm, 0)); %% ***** (5) fi; endfig with_projection parallel_x_y no_sort; %% *** (3) End of 3DLDF code verbatim_metapost "end;"; end; %% ** (2) %% * (1) Emacs-Lisp code for use in indirect buffers when using the %% GNU Emacs editor. The local variable list is not evaluated when an %% indirect buffer is visited, so it's necessary to evaluate the %% following s-expression in order to use the facilities normally %% accessed via the local variables list. %% \initials{LDF 2004.02.12}. %% (progn (metafont-mode) (outline-minor-mode t) (setq fill-column 80) (ignore '( %% )) (setq outline-regexp "%% [*\f]+")) %% * (1) Local variables for Emacs. %% Local Variables: %% mode:Metafont %% eval:(outline-minor-mode t) %% eval:(read-abbrev-file abbrev-file-name) %% outline-regexp:"%% [*\f]+" %% End: