%%%% clktwr_0.ldf %%%% Created by Laurence D. Finston (LDF) Fri May 14 18:10:29 CEST 2010 %%%% $Id: clktwr_01.ldf,v 1.10 2022/12/16 14:05:01 lfinsto1 Exp $ %% * (1) Copyright and License. %%%% This file is part of GNU 3DLDF, a package for three-dimensional drawing. %%%% Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 The Free Software Foundation, Inc. %%%% 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 %% * (1) Beginning of 3DLDF code. verbatim_metapost "prologues := 3;"; % verbatim_metapost "verbatimtex \font\large=cmr12 scaled \magstep2 etex;"; % verbatim_metapost "verbatimtex \font\Large=cmr17 scaled \magstep2 etex;"; %% ** (2) Church Tower 1 %% ** (2) Square cross-section. %% Started 2010.05.14. %% Last updated: June 4, 2010 %% *** (3) Declarations bool dolabels; dolabels := false; point p[]; path q[]; circle c[]; picture v[]; string s[]; transform t[]; side_width := 5cm; side_height := 4cm; spire_height := 8cm; clock_height := 5cm; %% *** (3) Macros def crosshair {point aa, numeric offset} = draw aa -- (aa shifted (offset, 0)) with_pen pencircle scaled (.25mm, .25mm, .25mm); draw aa -- (aa shifted (-offset, 0)) with_pen pencircle scaled (.25mm, .25mm, .25mm); draw aa -- (aa shifted (0, offset)) with_pen pencircle scaled (.25mm, .25mm, .25mm); draw aa -- (aa shifted (0, -offset)) with_pen pencircle scaled (.25mm, .25mm, .25mm); enddef; %% *** (3) Figure 1 beginfig(1); %% **** (4) Arcade pickup pencircle scaled (.5mm, .5mm, .5mm); p0 := origin; p1 := p0 shifted (side_width, 0); p2 := p1 shifted (0, side_height); p3 := p0 shifted (0, side_height); draw p0 -- p1 -- p2 -- p3 -- cycle; %% **** (4) Spire p4 := (.5side_width, side_height + spire_height); if dolabels: dotlabel.lft("$p_0$", p0); dotlabel.rt("$p_1$", p1); dotlabel.rt("$p_2$", p2); dotlabel.lft("$p_3$", p3); dotlabel.lft("$p_4$", p4); fi; draw p2 -- p4 -- p3; p6 := p0 shifted (0, 1cm); p7 := p1 shifted (0, 1cm); p8 := p6 shifted (.5cm, 0); p9 := p8 shifted (1cm , 0); draw p8 -- p9; if dolabels: dotlabel.lft("$p_8$", p8); dotlabel.rt("$p_9$", p9); fi; p10 := p8 shifted (0, 2cm); p11 := p10 shifted (1cm, 0); if dolabels: dotlabel.lft("$p_{10}$", p10); dotlabel.rt("$p_{11}$", p11); fi; p12 := mediate(p10, p11); set c0 with_center p12 with_diameter 1cm with_point_count 64 with_normal (0, 0, -1); %shift c0 p12; q0 := p9 -- p11 .. half c0 .. p10 -- p8 -- p9 -- cycle; p118 := (xpart p0, ypart p10); p119 := p118 shifted (side_width, 0); draw p118 -- p119 with_color gray dashed evenly; p120 := mediate(p10, p11); p121 := (xpart p120, ypart p0); p122 := p121 shifted (0, side_height); p123 := (xpart p0, ypart p8); p124 := p123 shifted (side_width, 0); draw p121 -- p122 with_color gray dashed evenly; draw (p121 -- p122) shifted (1.5cm, 0) with_color gray dashed evenly; draw (p121 -- p122) shifted (3cm, 0) with_color gray dashed evenly; draw p123 -- p124 with_color gray dashed evenly; draw q0; draw q0 shifted (1.5cm , 0); draw q0 shifted (3cm , 0); crosshair{p120, .1cm}; crosshair{p120 shifted (1.5cm, 0), .1cm}; crosshair{p120 shifted (3cm, 0), .1cm}; %% ***** (5) Cutaway at base of spire p31 := unit_vector(p4 - p3) scaled .3 shifted p3; p32 := (xpart p31, ypart p3); p33 := p3 rotated_around (p31, p32) 180; draw mediate(p31, p33, 6) -- mediate(p33, p31, 6) dashed evenly with_color gray; p36 := mediate(p2, p3); p34 := p31 rotated_around (p4, p36) 180; p35 := p33 rotated_around (p4, p36) 180; draw mediate(p35, p34, 6) -- mediate(p34, p35, 6) dashed evenly with_color gray; draw p31 -- p33; draw p34 -- p35; %dolabels := true; %dolabels := false; if dolabels: %dotlabel.ulft("$p_{31}$", p31); dotlabel.urt("$p_{33}$", p33); dotlabel.rt("$p_{34}$", p34); dotlabel.rt("$p_{35}$", p35); dotlabel.bot("$p_{36}$", p36); fi; label.urt("$a$", p33); label.ulft("$a$", p35); %% ***** (5) Tabs for spire %% ****** (6) Outer tabs p37 := mediate(p3, p4); p38 := p37 shifted (0, 0, 1); p39 := unit_vector(p4 - p3) scaled .75 shifted p37 rotated_around (p37, p38) 90; p40 := unit_vector(p4 - p3) scaled .75 shifted p3; p41 := unit_vector(p3 - p4) scaled .75 shifted p4; p42 := p40 shifted (0, 0, 1); p43 := mediate(p40, p37, .5) rotated_around (p40, p42) 45; p44 := (p39 - p37) shifted p40; p45 := (p40 -- p43) intersection_point (p39 -- p44); p46 := p45 rotated_around (p37, p39) 180; draw p40 -- p45 --p46 -- p41; % message "angle (p46 - p41) angle (p4 - p3):"; % show (p46 - p41) angle (p4 - p3); % message "angle (p45 - p40) angle (p4 - p3):"; % show (p45 - p40) angle (p4 - p3); p47 := mediate(p37, p39); p48 := (p47 - p39) shifted p45; p49 := (p40 -- p45) intersection_point (p47 -- p48); p50 := (p41 -- p46) intersection_point (p47 -- p48); draw p37 -- p39 with_color gray; draw p49 -- p50 with_color gray; for i = 1 upto 15: % drawdot mediate(p49, p50, (i / 16)) with_pen pencircle scaled (.75mm, .75mm, .75mm); crosshair{mediate(p49, p50, (i / 16)), .1cm}; endfor; %dolabels := true; %dolabels := false; if dolabels: dotlabel.rt("$p_{37}$", p37); dotlabel.lft("$p_{39}$", p39); dotlabel.rt("$p_{40}$", p40); dotlabel.rt("$p_{41}$", p41); dotlabel.lft("$p_{43}$", p43); dotlabel.rt("$p_{44}$", p44); dotlabel.lft("$p_{45}$", p45); dotlabel.lft("$p_{46}$", p46); dotlabel.urt("$p_{47}$", p47); dotlabel.lrt("$p_{48}$", p48); dotlabel.llft("$p_{49}$", p49); dotlabel.ulft("$p_{50}$", p50); fi; %% ***** (5) %% ****** (6) Inner tabs p51 := p37; p52 := p39; p53 := p40; p54 := p41; p55 := p45; p56 := p46; p57 := p49; p58 := p50; t0 := (identity rotated_around (p4, p36) 180) rotated_around (p4, p2) 180; p51 *= p52 *= p53 *= p54 *= p55 *= p56 *= p57 *= p58 *= t0; if dolabels: dotlabel.top("$p_{51}$", p51); dotlabel.top("$p_{52}$", p52); dotlabel.top("$p_{53}$", p53); dotlabel.top("$p_{54}$", p54); dotlabel.top("$p_{55}$", p55); dotlabel.top("$p_{56}$", p56); dotlabel.top("$p_{57}$", p57); dotlabel.top("$p_{58}$", p58); fi; draw p54 -- p56 -- p55 -- p53 dashed evenly; draw p58 -- p57 with_color gray; draw p51 -- p52 with_color gray; for i = 1 upto 15: % drawdot mediate(p57, p58, (i / 16)) with_pen pencircle scaled (.75mm, .75mm, .75mm); crosshair{mediate(p57, p58, (i / 16)), .1cm}; endfor; %% **** (4) Clock p13 := p0 shifted (0, -clock_height); p14 := p1 shifted (0, -clock_height); draw p13 -- p14 -- p1 -- p0 -- cycle; p15 := mediate(p1, p13); set c1 with_center p15 with_diameter (side_width - 1cm) with_point_count 64 with_normal (0, 0, -1); draw c1; set c2 with_center p15 with_diameter (side_width - 1.75cm) with_point_count 64 with_normal (0, 0, -1); draw c2 dashed evenly with_color gray with_pen pencircle scaled (.3mm, .3mm, .3mm); p18 := p15 shifted (0, 0, -1); p19 := get_point 0 c2 rotated_around (p15, p18) -90; %% The complicated TeX code here is for drawing the guidelines above and below the %% Roman numerals on the clock faces. %% %% MetaPost provides a way of measuring text and creating a box that surrounds it %% and this would be much easier if I could use them, but unfortunately %% these facilities are not available from within GNU 3DLDF. %% %% The guidelines are not placed exactly where I'd like, namely flush with the actual %% bottom and upper borders of the characters, i.e., where the serifs end. %% TeX will tell me the height, width and depth of the box, but it won't tell me %% what the "overshoot" is. If I really wanted to know, I could find out by looking in %% METAFONT code for the font --- however this would only be true of that one font. %% %% I don't think it pays to try to get the guidelines more accurate. %% %% LDF 2010.06.04. s1 := "verbatimtex\n" & "\setbox0=\hbox{\uppercase\expandafter{\romannumeral 12}}\n" & "\dimen0=\ht0 \advance\dimen0 by 1pt\n" & "\setbox1=\hbox{\vbox to \ht0{\vss}\vbox{\hrule width 2\wd0 height 0pt depth .5mm}}\n" & "\setbox2=\hbox{\vbox to \ht0{\vss}\vbox{\hrule width 2\wd0 height \dimen0 depth -\ht0}}\n" & "etex\n\n"; verbatim_metapost s1; s2 := "\hbox to 3\wd0{\leaders\hbox to 1em" & "{\hss\lower\dimen0\vbox{\hrule height 0pt width .6667em depth .5mm}\hss}\hfill}"; s3 := "\hbox to 3\wd0{\leaders" & "\hbox to 1em{\hss\raise\dimen0\vbox{\hrule height .5mm width .6667em depth 0pt}\hss}" & "\hfill}"; label(s2, p19) with_text_color dark_gray; label(s3, p19) with_text_color dark_gray; % label("\copy1", p19) with_text_color dark_gray; % label("\copy2", p19) with_text_color dark_gray; for i = 1 upto 11: p[19 + i] := p19 rotated_around (p15, p18) (30 * i); label(s2, p[19 + i]) with_text_color dark_gray; label(s3, p[19 + i]) with_text_color dark_gray; endfor; label("\copy0", p19); for i = 1 upto 11: s0 := "\hbox{\uppercase\expandafter{\romannumeral " & decimal i & "}}"; label(s0, p[19 + i]); % s0 := "$p_{" & decimal (19 + i) & "}$"; % dotlabel.top(s0, p[19 + i]); endfor; if dolabels: dotlabel.llft("$p_{13}$", p13); dotlabel.urt("$p_{14}$", p14); dotlabel.llft("$p_{15}$", p15); %dotlabel.top("$p_{19}$", p19); fi; %% ***** (5) Help lines for clock p115 := p15 shifted (0, 0, 1); p116 := get_point 0 c1; p117 := (unit_vector(p116 - p15) * .25) shifted p15; t4 := identity rotated_around (p15, p115) 30; for i = 0 upto 11: draw p117 -- p116 with_color gray dashed evenly; p117 *= p116 *= t4; endfor; crosshair{p15, .25cm}; v0 := current_picture; clear current_picture; %% **** (4) Tabs for arcade %% ***** (5) Outer tabs p60 := mediate(p0, p3); p61 := p60 shifted (-.375, 0); p62 := p61 shifted (0, -1cm); p63 := p0 shifted (0, .5cm); p64 := p3 shifted (0, -.5cm); p66 := p63 shifted (0, 0, 1); p65 := mediate(p63, p64, .25) rotated_around (p63, p66) 45; p67 := (p63 -- p65) intersection_point (p61 -- p62); p68 := p67 rotated_around (p60, p61) 180; draw p63 -- p67 -- p68 -- p64; p69 := mediate(p60, p61); p70 := p69 shifted (0, 1cm); p71 := (p69 -- p70) intersection_point (p63 -- p67); p72 := p71 rotated_around (p60, p61) 180; draw p60 -- p61 with_color gray; draw p71 -- p72 with_color gray; for i = 1 upto 7: % drawdot mediate(p71, p72, (i / 8)) with_pen pencircle scaled (.75mm, .75mm, .75mm); crosshair{mediate(p71, p72, (i / 8)), .1cm}; endfor; if dolabels: dotlabel.rt("$p_{60}$", p60); dotlabel.lft("$p_{61}$", p61); %dotlabel.lft("$p_{62}$", p62); dotlabel.rt("$p_{63}$", p63); dotlabel.rt("$p_{64}$", p64); %dotlabel.rt("$p_{65}$", p65); dotlabel.lft("$p_{67}$", p67); dotlabel.lft("$p_{68}$", p68); dotlabel.llft("$p_{71}$", p71); dotlabel.ulft("$p_{72}$", p72); fi; %% ***** (5) Inner tabs p73 := p60; p74 := p61; p75 := p63; p76 := p64; p77 := p67; p78 := p68; p79 := p71; p80 := p72; t1 := identity shifted (4 * side_width, 0); p73 *= p74 *= p75 *= p76 *= p77 *= p78 *= p79 *= p80 *= t1; if dolabels: dotlabel.rt("$p_{73}$", p73); dotlabel.lft("$p_{74}$", p74); dotlabel.lrt("$p_{75}$", p75); dotlabel.rt("$p_{76}$", p76); dotlabel.lft("$p_{77}$", p77); dotlabel.lft("$p_{78}$", p78); dotlabel.llft("$p_{79}$", p79); dotlabel.ulft("$p_{80}$", p80); fi; draw p75 -- p77 -- p78 -- p76 dashed evenly; draw p73 -- p74 with_color gray; draw p79 -- p80 with_color gray; for i = 1 upto 7: % drawdot mediate(p79, p80, (i / 8)) with_pen pencircle scaled (.75mm, .75mm, .75mm); crosshair{mediate(p79, p80, (i / 8)), .1cm}; endfor; v1 := current_picture; clear current_picture; %% **** (4) Tabs for Clock p81 := (p63 - p0) shifted p13; p82 := (p64 - p3) shifted p0; p83 := (p68 - p64) shifted p82; p84 := (p67 - p63) shifted p81; p85 := mediate(p0, p13); p86 := p85 shifted (-.5cm, 0); p87 := p86 shifted (0, 1cm); p88 := (p86 -- p87) intersection_point (p82 -- p83); p89 := p88 rotated_around (p85, p86) 180; draw p81 -- p89 -- p88 -- p82; p90 := mediate(p85, p86); p91 := p90 shifted (0, 1); p92 := (p90 -- p91) intersection_point (p82 --- p88); p93 := p92 rotated_around (p85, p86) 180; draw p92 -- p93 with_color gray; draw p85 -- p86 with_color gray; for i = 1 upto 7: % drawdot mediate(p92, p93, (i / 8)) with_pen pencircle scaled (.75mm, .75mm, .75mm); crosshair{mediate(p92, p93, (i / 8)), .1cm}; endfor; v2 := current_picture; clear current_picture; if dolabels: dotlabel.llft("$p_{81}$", p81); dotlabel.rt("$p_{82}$", p82); %dotlabel.lft("$p_{83}$", p83); %dotlabel.lft("$p_{84}$", p84); dotlabel.lrt("$p_{85}$", p85); dotlabel.lft("$p_{86}$", p86); dotlabel.lft("$p_{88}$", p88); dotlabel.lft("$p_{89}$", p89); dotlabel.ulft("$p_{92}$", p92); dotlabel.lft("$p_{93}$", p93); fi; %% ***** (5) Inner p94 := p81; p95 := p82; p96 := p85; p97 := p86; p98 := p88; p99 := p89; p100 := p92; p101 := p93; p94 *= p95 *= p96 *= p97 *= p98 *= p99 *= p100 *= p101 *= t1; if dolabels: dotlabel.rt("$p_{94}$", p94); dotlabel.rt("$p_{95}$", p95); dotlabel.rt("$p_{96}$", p96); dotlabel.llft("$p_{97}$", p97); dotlabel.ulft("$p_{98}$", p98); dotlabel.lft("$p_{99}$", p99); dotlabel.ulft("$p_{100}$", p100); dotlabel.llft("$p_{101}$", p101); fi; draw p95 -- p98 -- p99 -- p94 dashed evenly; draw p96 -- p97 with_color gray; draw p100 -- p101 with_color gray; for i = 1 upto 7: % drawdot mediate(p100, p101, (i / 8)) with_pen pencircle scaled (.75mm, .75mm, .75mm); crosshair{mediate(p100, p101, (i / 8)), .1cm}; endfor; v3 := current_picture; clear current_picture; %% **** (4) Bottom flap p16 := p13 shifted (0, -side_width); p17 := p14 shifted (0, -side_width); draw p13 -- p16 -- p17 -- p14 -- cycle; %% ***** (5) Holes for bottom flap p125 := p13 shifted (1cm, -1cm); p126 := p14 shifted (-1cm, -1cm); p127 := p16 shifted (1cm, 1cm); p128 := p17 shifted (-1cm, 1cm); % dolabels := true; % dolabels := false; if dolabels: dotlabel.llft("$p_{13}$", p13); dotlabel.llft("$p_{14}$", p14); dotlabel.llft("$p_{16}$", p16); dotlabel.lrt("$p_{17}$", p17); fi; draw p125 -- p126 -- p128 -- p127 -- cycle dashed evenly with_color gray; for i = 0 upto 7: crosshair{mediate(p125, p126, (i / 8)), .1cm}; crosshair{mediate(p126, p128, (i / 8)), .1cm}; crosshair{mediate(p128, p127, (i / 8)), .1cm}; crosshair{mediate(p127, p125, (i / 8)), .1cm}; endfor; crosshair{mediate(p14, p16), .1cm}; label("$c$", mediate(p14, p16, .4)); %% ***** (5) v4 := current_picture; clear current_picture; %% ***** (5) Tabs p102 := (p82 - p0) shifted p13; p103 := mediate(p13, p16); p104 := mediate(p14, p17); p105 := (p88 - p82) shifted p102; p106 := p105 rotated_around (p103, p104) 180; p107 := p102 rotated_around (p103, p104) 180; p108 := (p103 -- p104) intersection_point(p105 -- p106); p109 := mediate(p103, p108); p110 := p109 shifted (0, 1cm); p111 := (p109 -- p110) intersection_point (p102 -- p105); p112 := p111 rotated_around (p103, p104) 180; draw p107 -- p106 -- p105 -- p102; draw p111 -- p112 with_color gray; draw p103 -- p108 with_color gray; for i = 1 upto 7: % drawdot mediate(p111, p112, (i / 8)) with_pen pencircle scaled (.75mm, .75mm, .75mm); crosshair{mediate(p111, p112, (i / 8)), .1cm}; endfor; p113 := mediate(p103, p104); undraw p107 -- p102; draw p107 -- p102 dashed evenly; v5 := current_picture; clear current_picture; v6 := v5; p114 := p113 shifted (0, 0, 1); t2 := identity rotated_around (p113, p114) 90; v6 *= t2; kill_labels v6; v7 := v6; v7 *= t2; draw p107 -- p106 -- p105 -- p102 dashed evenly; draw p111 -- p112 with_color gray; draw p103 -- p108 with_color gray; for i = 1 upto 7: % drawdot mediate(p111, p112, (i / 8)) with_pen pencircle scaled (.75mm, .75mm, .75mm); crosshair{mediate(p111, p112, (i / 8)), .1cm}; endfor; p113 := mediate(p103, p104); v8 := current_picture; clear current_picture; t3 := (identity rotated_around (p16, p17) 180) shifted (0, side_width); v8 *= t2; v8 *= t3; if dolabels: dotlabel.rt("$p_{102}$", p102); dotlabel.rt("$p_{103}$", p103); dotlabel.rt("$p_{104}$", p104); dotlabel.ulft("$p_{105}$", p105); dotlabel.ulft("$p_{106}$", p106); dotlabel.lft("$p_{107}$", p107); dotlabel.lft("$p_{108}$", p108); dotlabel.bot("$p_{109}$", p109); dotlabel.lft("$p_{110}$", p110); dotlabel.ulft("$p_{111}$", p111); dotlabel.rt("$p_{112}$", p112); dotlabel.bot("$p_{113}$", p113); fi; %% **** (4) Copy and shift picture v0 current_picture += v0; current_picture += v1; current_picture += v2; current_picture += v3; current_picture += v4; current_picture += v5; current_picture += v6; current_picture += v7; for i = 0 upto 2: shift v0 (side_width, 0); shift v8 (side_width, 0); current_picture += v0; current_picture += v8; endfor; %% **** (4) Undraw and redraw lines for scoring tabs undraw p63 -- p64; draw p63 -- p64 dashed evenly; undraw p40 -- p41; draw p40 -- p41 dashed evenly; undraw p81 -- p82; draw p81 -- p82 dashed evenly; undraw p94 -- p95; draw p94 -- p95 dashed evenly; %% **** (4) Additional labels label.urt("$b$", p12); %% **** (4) endfig with_projection parallel_x_y no_sort; %% *** (3) Figure 2 %% **** (4) focus f[]; set f0 with_position (-5, 20, -50) with_direction (-5, 20, 10) with_distance 100; rectangle r[]; point p[]; path q[]; %% **** (4) beginfig(2); p0 := origin; p1 := (side_width, 0); p2 := (side_width, 0, side_width); p3 := (0, 0, side_width); draw p0 -- p1; draw p1 -- p2; draw p2 -- p3 dashed evenly; draw p3 -- p0; dotlabel.lft("$p_{0}$", p0); dotlabel.rt("$p_{1}$", p1); dotlabel.rt("$p_{2}$", p2); dotlabel.lft("$p_{3}$", p3); p4 := p0 shifted (0, side_height); p5 := p1 shifted (0, side_height); p6 := p2 shifted (0, side_height); p7 := p3 shifted (0, side_height); draw p4 -- p5; draw p5 -- p6; draw p6 -- p7; draw p7 -- p4; dotlabel.lft("$p_{4}$", p4); dotlabel.rt("$p_{5}$", p5); dotlabel.rt("$p_{6}$", p6); dotlabel.lft("$p_{7}$", p7); draw p0 -- p4; draw p3 -- p7; draw p1 -- p5; draw p2 -- p6 dashed evenly; %% !! START HERE: Put in the arches. LDF 2010.06.02. %draw r1 with_color red; endfig with_focus f0; %% *** (3) verbatim_metapost "end"; end; %% ** (2) End of 3DLDF code %% * (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) %% abbrev-mode:t %% eval:(read-abbrev-file "~/.abbrev_defs") %% outline-regexp:"%% [*\f]+" %% End: