\def\fileversion{v1.4} \def\filedate{94/01/04} \def\docdate {93/08/14} %% \CheckSum{0} %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation \! Double quote \" Hash (number) \# %% Dollar \$ Percent \% Ampersand \& %% Acute accent \' Left paren \( Right paren \) %% Asterisk \* Plus \+ Comma \, %% Minus \- Point \. Solidus \/ %% Colon \: Semicolon \; Less than \< %% Equals \= Greater than \> Question mark \? %% Commercial at \@ Left bracket \[ Backslash \\ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} %% % % \iffalse This is a METACOMMENT % Everything up to the next `\ fi' (without a blank) will % be ignored. This is necessary because `%' may no longer % be a comment mark when this file is read in. % % Style-option `zsb' to use with LaTeX v2.09 % Copyright (C) 1992 Andreas Schrell, all rights reserved. % % IMPORTANT NOTICE: % % You are not allowed to change this file. You may however copy % this file to a different name and then change this copy. % % You are allowed to distribute this file under the condition that % it is distributed together with all files mentioned in readme.txt. % If you receive only some of these files from someone, complain! % % You are NOT ALLOWED to distribute this file alone. % You are NOT ALLOWED to take money for the distribution or use of % this file (or a changed version) except for some nominal charge % for copying etc. % % % Error reports for UNCHANGED versions please to: % % Andreas Schrell % Windh"ovel 2 % D-42279 Wuppertal % Federal Republic of Germany % Internet: % % \fi % % \DoNotIndex{\@M,\@Mi,\@bsphack,\@cclv,\@colht,\@currlist,\@deferlist} % \DoNotIndex{\@elt,\@esphack,\@floatplacement} % \DoNotIndex{\@ifundefined,\@ifnextchar,\@makecol} % \DoNotIndex{\@ne,\@outputpage,\@scolelt,\@spaces,\@tempb,\@tempcnta} % \DoNotIndex{\@warning,\@width} % \DoNotIndex{\addvspace,\advance,\allowbreak} % \DoNotIndex{\baselineskip,\begingroup,\box,\columnsep,\copy,\count} % \DoNotIndex{\count@,\def,\dimen@,\divide,\docdate} % \DoNotIndex{\edef,\eject,\egroup,\else,\endgroup,\endinput} % \DoNotIndex{\fi,\fileversion,\filedate} % \DoNotIndex{\gdef,\global} % \DoNotIndex{\hbox,\hfil,\hrule,\ht,\hss} % \DoNotIndex{\ifdim,\ifnum,\ifvoid,\ignorespaces,\insert,\immediate} % \DoNotIndex{\let,\loop} % \DoNotIndex{\maxdepth,\message,\multiply} % \DoNotIndex{\newbox,\newcount,\newdimen,\newskip,\number,\newpage} % \DoNotIndex{\outputpenalty,\p@,\penalty} % \DoNotIndex{\relax,\repeat,\setbox,\skip,\space,\splitmaxdepth} % \DoNotIndex{\splittopskip,\string,\sixt@@n} % \DoNotIndex{\the,\thepage,\thr@@,\topskip,\tw@,\typeout} % \DoNotIndex{\unvbox,\vbox,\vfill,\vsplit,\voidb@x,\vrule} % \DoNotIndex{\write,\wd} % \DoNotIndex{\z@} % % \changes{v1.0b}{93/02/24}{{\tt`FreeEinfachseite} schaltete nicht % auf Einfachseiten.} % \changes{v1.0b}{93/02/24}{{\tt`KorEinfachseite} fehlte ganz.} % \changes{v1.0h}{93/06/21}{{\tt`MaximalSeite} aufgenommen.} % \changes{v1.1}{93/08/14}{{\tt`QuerFormat} hinzugef"ugt.} % \changes{v1.1}{93/08/14}{Automatische Berechnung von Satzbreite und % Satzh"ohe bei FreeStyle, falls nicht angegeben.} % \changes{v1.1}{93/08/14}{Testversion von {\tt`SchnittMarken}} % \changes{v1.2}{93/08/14}{Dimensionsregister sparen.} % \changes{v1.3}{93/10/03}{{\tt`Zentriert auf} hinzugef"ugt. % Schnittmarken mit Mittelmarkierungen.} % % \title{\vfil \thispagestyle{empty} % Dokumentation zum KONSTRUK.STY\\[4mm] % F"ur \LaTeX-Seitenlayout Festlegung % \thanks{Diese Datei % hat die Versionsnummer \fileversion, letzte "Anderung vom % \filedate, Dokumentation vom \docdate.}} % % \author{% % Andreas Schrell\\ % Windh"ovel 2\\ % D-42279 Wuppertal\\ % Federal Republic of Germany\\ % {\rm E-Mail:} {\tt Andreas.Schrell@FernUni-Hagen.de}} % % \date{Ausdruck vom \today} % % % \maketitle % \vfil % \begin{abstract} % \noindent % Diese Stil-Option f"ur \LaTeX\ dient zum komfortablen Festlegen des % Seitenlayouts f"ur \TeX-Dokumente. Neben vordefinierten Formaten werden % auch Befehle zum freien Einstellen des Layouts und Makros zum Testen % zur Verf"ugung gestellt. % \end{abstract} % % \vfil\vfil % % \pagebreak % \MakeShortVerb{\|} % % \section{Beschreibung der Befehle} % % \subsection{Papierformat festlegen} % % Nach dem Laden des Style-Files sollte das Papierformat des sp"ateren % Druckerzeugnisses angegeben werden. Hierzu dient der Befehl %\begin{verbatim} %\PapierFormat %\end{verbatim} % Als Parameter bekommt er entweder die genauen Ma"se des Papiers, z.\,B. %\begin{verbatim} %\PapierFormat <200mm,280mm> %\end{verbatim} % oder eines der folgenden Formatk"urzel: %\begin{verbatim} %A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 %B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 %C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 %\end{verbatim} % Daraus wird dann die Papiergr"o"se des zugeh"origen DIN-Formats % ermittelt. In diesem Falle werden die ermittelten Werte auch auf % dem Bildschirm ausgegeben. % % Das so erzeugte Format kann mit dem Befehl %\begin{verbatim} %\QuerFormat %\end{verbatim} % in das entsprechende Querformat (landscape) umgewandelt werden. Hierbei % wird nat"urlich nicht automatisch die \TeX-Ausgabe gedreht sondern nur % die Seitenausma"se bestimmt. % % \subsection{Freies Layout} % % \def\dim{{\it dimen\/}} % Der umfangreichste Befehl des Makropakets ist der |\FreeStyle|. Hier % die vollst"andige Syntax: % \begin{tabbing} % |\FreeStyle| \= [|Doppelseite|] [|Einfachseite|] \\ % \> |Satzbreite <|\dim|>| \\ % \> |Satzhoehe <|\dim|>| \\ % \> |Bund <|\dim|>| \\ % \> |Oben <|\dim|>| \\ % \> |Aussen <|\dim|>| \\ % \> |Unten <|\dim|>| \\ % \> |Kopfzeile| \= \\ % \>\> [|lebend|] [|tot|] \\ % \>\> |Hoehe <|\dim|>| \\ % \>\> |Abstand <|\dim|>| \\ % \>\> |Text {...} |\hskip 3cm (bei Einfachseite) \\ % \>\> |Text {...} {...}|\hskip 3cm (bei Doppelseite) \\ % \> |/| \\ % \> |Fusszeile| \= \\ % \>\> |Abstand <|\dim|>| \\ % \>\> |Text {...} |\hskip 3cm (bei Einfachseite) \\ % \>\> |Text {...} {...}|\hskip 3cm (bei Doppelseite) \\ % \> |/| \\ % |/| % \end{tabbing} % Die Schl"usselworte k"onnen innerhalb einer Wertigkeit in beliebiger % Reihenfolge aufgef"uhrt werden. Nat"urlich k"onnen sie auch weggelassen % werden. Alle L"angenangaben stehen in spitzen Klammern (also Kleiner- % und Gr"o"serzeichen). Der Schr"agstrich dient zum Beenden der % Teildefinitionen und des Gesamtmakros. Er darf nicht weggelassen % werden. Ebenso m"ussen auch alle Leerzeichen eingehalten werden. % Wichtig ist, da"s der |Abstand| der Kopfzeile der wirkliche Abstand % ist, in der Fu"szeile jedoch den Abstand Basislinie -- Basislinie % bedeutet. % % \subsubsection{Konstruktionsmethoden} % % Es werden die folgenden Konstruktionen angeboten:\\* % |\Aehnlichkeitskonstruktion <|\dim|>| \\* % |\Renaissancekonstruktion <|\dim|>| \\* % |\Diagonalkonstruktion <|\dim|>| \\* % |\GoldenerSchnitt| \\* % |\SilbernerSchnitt| \\* % |\Rasterkonstruktion {|{\it Teilung\/}|}| \\* % |\FertigLayout 12A 12B 12C 10A 10B 10C 8A 7A| (wahlweise) \\* % |\MaximalSeite| \\* % Dimensionsangaben bezeichnen immer die Satzbreite. Standardm"a"sig % werden Doppelseiten vorgesehen. Die Kopf- und Fu"szeilen werden % nicht ver"andert. Mit einem nachfolgenden |\FreeStyle|-Befehl k"onnen % einzelne Parameter ver"andert werden. % % \subsubsection{Korrekturen am Format} % Zus"atzlich zum |\FreeStyle| gibt es auch den Befehl |\KorrStyle|. Er % besitzt dieselbe Syntax, Ma"se werden jedoch nicht auf den angegebenen % Betrag gesetzt, sondern entsprechend ver"andert. Zum Beispiel w"urde der % Befehl %\begin{verbatim} %\KorrStyle % Satzbreite <-1cm> % / %\end{verbatim} % die Satzbreite um 1\,cm verringern. % % \subsubsection{Schnittmarken} % % Schnittmarken am Papierrand k"onnen mit dem Befehl %\begin{verbatim} %\SchnittMarken %\end{verbatim} % am Beginn einer Seite erzeugt werden. Dies ist allerdings nur dann % sinnvoll, wenn man z.\,B. mit DVIDVI mehrere Seiten auf ein Blatt % drucken m"ochte und dies sp"ater beschneidet. Wird \verb+\SchnittMarken+ % nicht am Seitenanfang aufgerufen, wird ein \verb+\clearpage+ % eingef"ugt. % % \subsubsection{Layout-Zeichnungen} % % Der Befehl %\begin{verbatim} %\Layout %\end{verbatim} % erzeugt eine Layoutzeichnung in Originalgr"o"se. Die Beschriftung kann % mit % \begin{tabbing} % |\Layoutbeschriftung| \= \\ % \> |Token| \\ % \> |TeX-Namen| \\ % \> |Werte| \\ % \> |Einheit <|\dim|>| \\ % \> |Konstruktion| \\ % |/| % \end{tabbing} % eingestellt werden. Kleine Skizzen k"onnen mit %\begin{verbatim} %\begin{Layoutskizze} <5cm> %\GoldenerSchnitt %\end{Layoutskizze} %\end{verbatim} % erzeugt werden. Man kann den |<..>|-Parameter auch weglassen. Dann % geht die Skizze "uber die gesamte Zeilenbreite. Hier das Beispiel: % \[ \begin{Layoutskizze} <5cm> % \GoldenerSchnitt % \end{Layoutskizze} \] % % % % \end{document} % % \StopEventually{\PrintIndex \PrintChanges} % % \typein[\MitBesch]{^^JWollen Sie auch eine ausf\string"uhrliche % Beschreibung der Makros? (j/n)} % % \if n\MitBesch \let\next\end \else \def\next#1{} \fi % \next{document} % % \pagebreak % % \section{Die Makros} % % Zuerst die Lade-Meldung: % \begin{macrocode} \message{^^JLaTeX Konstruktion-Stil-Option Version \fileversion.^^J}% % \end{macrocode} % % Im folgenden werden die Makros vorgestellt. Bis auf das Verfahren der % Token-Parameter ist die Programmierung recht einfach. Es mu"s im % wesentlichen gerechnet werden. Als allererstes sorgen wir daf"ur, da"s % \TeX\ keine Schusterjungen und Hurenkinder setzt: % \begin{macrocode} \widowpenalty10000 \clubpenalty10000 % \end{macrocode} % % \subsection{Die Schl"usselwort-Programmierung} % % Die Makros sind im Wesentlichen aus \PiCTeX\ "ubernommen. Ich danke % an dieser Stelle M.\,J.\,Wichura f"ur seine vorbildliche Arbeit. % Als erstes ben"otigen wir eine Hilfsmeldung und ein paar zus"atzliche % Makros, damit ein potentieller Benutzer auch % interaktiv falsche Schl"usselworte korrigieren kann. % \begin{macrocode} \newhelp\Schluesselhilfe{Das angegebene Schluesselwort ist nicht definiert. Ersetze NEUES WORT in der vorgeschlagenen Antwort durch das richtige!} \def\fixSchluessel#1{% \errhelp=\Schluesselhilfe \errmessage{Unbekanntes Schluesselwort `#1':^^J% \the\Schluesseltoks{NEUES WORT}'}} \newtoks\Schluesseltoks \Schluesseltoks={Eingabe `i\Schluessel} \def\Schluessel#1{\nextSchluessel#1 } % \end{macrocode} % Nun kommt das Makro, das eine Schl"usselwortliste durchwandert und % daraus \TeX-Makronamen erzeugt. Damit unterschiedliche Oberbegriffe % mit gleichen Schl"usseln zu unterschiedlichen Befehlen expandiert % werden, wird der Oberbegriff mit in den Namen aufgenommen. % \begin{macrocode} \def\nextSchluessel#1 {% \expandafter\ifx\csname\Ober#1\endcsname \relax \def\Snext{\fixSchluessel{#1}}% \else \def\Snext{\csname\Ober#1\endcsname}% \fi \Snext} % \end{macrocode} % Die Makros der Schl"usselworte sind abh"angig vom Befehl, daher mu"s % jeweils ein Oberbegriff definiert bzw. restauriert werden. % \begin{macrocode} \def\NewOber#1{% \expandafter\edef\csname OOBER#1\endcsname{\Ober}% \edef\Ober{#1}} \def\OldOber#1{% \edef\Ober{\csname OOBER#1\endcsname}} \def\Ober{} % \end{macrocode} % % \subsection{Ausgabe einer Testseite} % % \begin{macro}{\Layoutbeschriftung} % Zu Beginn soll ein Makro vorgestellt werden, mit dem das Seitenlayout % gezeichnet werden kann. Unterschiedliche Versionen sorgen daf"ur, % da"s sowohl mit als auch ohne Beschriftung ausgegeben werden kann. Die % folgenden Beschriftungsmethoden sind implementiert: % \begin{description} % \item[TeX-Namen] Es werden die \TeX-Bezeichnungen eingetragen. % \item[Token] Es werden die Token f"ur den |\FreeStyle|-Befehl % eingetragen. % \item[Werte] Es werden die Werte eingetragen. % \item[Einheit] Die Einheit f"ur die Werte wird festgelegt. % \end{description} % \begin{macrocode} \def\Layoutbeschriftung {\NewOber{LB}% \Tokenfalse \TeXNamenfalse \Wertefalse \Pfeilefalse \def\Einheit{1mm}\def\EFaktor{1}\def\EMass{mm}% \nextSchluessel} \newif\ifTeXNamen \newif\ifToken \newif\ifWerte \newif\ifPfeile \def\Einheit{1mm} \def\EFaktor{1}\def\EMass{mm} % \end{macrocode} % F"ur jedes der erlaubten Token folgt nun dessen Definition. Wir % beginnen am Ende: % \begin{macrocode} \@namedef{LB/}{\OldOber{LB}} % \end{macrocode} % Einfacher geht es nicht, oder? Als n"achstes werden dann einfach die % |\if|s entsprechend den Token gesetzt. % \begin{macrocode} \@namedef{LBTeX-Namen}{% \Tokenfalse \TeXNamentrue \Pfeiletrue \nextSchluessel} \def\LBToken{% \Tokentrue \TeXNamenfalse \Pfeiletrue \nextSchluessel} \def\LBWerte{% \Wertetrue \Pfeiletrue \nextSchluessel} \def\getEinheit#1#2. {% \def\EFaktor{#1}\def\EMass{#2}} \def\LBEinheit <#1> {\def\He{#1}% \def\Einheit{#1}\relax \expandafter\getEinheit\He. \Wertetrue \Pfeiletrue \nextSchluessel} \def\LBKonstruktion{% \ifx\setcoordinatesystem\undefined \message{Warnung: Die Konstruktionsskizze kann nur mit \string\PiCTeX\space gezeichnet werden.}% \else \Konstruktiontrue \fi \nextSchluessel} \newif\ifKonstruktion \Konstruktionfalse % \end{macrocode} % \end{macro} % % Im folgenden wird ein Hilfsmakro ben"otigt, da"s die Einheit pt von % einer Zahl entfernt. Es stammt auch aus \PiCTeX. % \begin{macrocode} \newdimen\removeDIM \def\removept#1#2{\removeDIM=#1\relax \edef#2{\expandafter\removePT\the\removeDIM}} {\catcode`p=12 \catcode`t=12 \gdef\removePT#1pt{#1}} % \end{macrocode} % % \begin{macro}{\KonKasten} % Der wichtige Befehl, der jetzt programmiert werden soll, wird eine % ganze Reihe von K"asten zu zeichnen haben. Hiermit beginnen wir. % \begin{macrocode} \def\KonKasten #1 #2 [#3] at #4 #5 {% \removept{#1}\Hw \removept{#2}\Hh \removept{#4}\Hx \removept{#5}\Hy \put(\Hx,\Hy){\makebox(0,0)[#3]{\framebox(\Hw,\Hh){}}}} % \end{macrocode} % \end{macro} % % \begin{macro}{\KonPfeil} % \begin{macro}{\KonText} % Ein Pfeil zum Beschriften wird auch ben"otigt. Hier wird auch % entschieden, was als Ma"swert stehen soll. Wir brauchen (wieder % aus \PiCTeX\ ein Makro, mit dem man Dimensionsregister dividieren % kann: % \begin{macrocode} \newdimen\dimenA \newdimen\dimenB \newdimen\dimenC \newdimen\dimenD \def\@Divide#1#2#3{% \dimenB=#1% \dimenC=#2% \dimenD=\dimenB \divide \dimenD \dimenC \dimenA=\dimenD \multiply\dimenD \dimenC \advance\dimenB -\dimenD \dimenD=\dimenC \ifdim\dimenD<0pt\dimenD=-\dimenD \fi \ifdim\dimenD<64pt \Divstep[256]\Divstep[256]% \else \DIvide \fi #3=\dimenA\ignorespaces} \def\DIvide{% \ifdim\dimenD<256pt \Divstep[64]\Divstep[32]\Divstep[32]% \else \Divstep[8]\Divstep[8]\Divstep[8]\Divstep[8]\Divstep[8]% \dimenA=2\dimenA \fi} \def\Divstep[#1]{% \dimenB=#1\dimenB \dimenD=\dimenB \divide \dimenD by \dimenC \dimenA=#1\dimenA \advance\dimenA by \dimenD \multiply\dimenD by \dimenC \advance\dimenB by -\dimenD} % \end{macrocode} % Um die vielen Berechnungen etwas "ubersichtlicher zu gestalten, % benutzen wir die Token-Makros zum Parsen von einfachen Formeln. % Es sind Ausdr"ucke der Form %\begin{verbatim} %\Rechne {...} + {...} - ... + {...} -> {...} [...] %\end{verbatim} % erlaubt. Es sind als "`Zahlen"' nur Dimensionen (pt) erlaubt. % Sie k"onne allerdings optionale Faktoren haben. Beispiel: %\begin{verbatim} %\Rechne {0.5\textwidth} + {\textwidth} - {2pt} -> {\Ergebnis} %\end{verbatim} % Die Makros sind eigentlich recht linear. Mit dem optionalen Argument % (in eckigen Klammern) kann das Ergebnis gleich ohne "`pt"' in ein % Makro "ubernommen werden. % \changes{v1.0b}{93/02/24}{$/$ und $*$ beim Rechnen erg"anzt.} % \begin{macrocode} \newdimen\HW \def\Rechne #1 {\NewOber{Rechne}% \dimenA = #1% \nextSchluessel} \@namedef{Rechne->}#1 {\OldOber{Rechne}% #1=\dimenA\relax \@ifnextchar[{\Rechneopt}{\ignorespaces}} \def\Rechneopt[#1] {\removept{\dimenA}{#1}\ignorespaces} \@namedef{Rechne+}#1 {% \advance\dimenA by #1% \nextSchluessel} \@namedef{Rechne-}#1 {% \advance\dimenA by -#1% \nextSchluessel} \@namedef{Rechne/}#1 {% \divide\dimenA by #1% \nextSchluessel} \@namedef{Rechne*}#1 {% \multiply\dimenA by #1% \nextSchluessel} \def\ABS#1{\ifdim#1<0pt-#1\else#1\fi} % \end{macrocode} % Jetzt kommt das Makro, mit dem die Bema"sung ausgegeben wird. Die % Einstellungen aus |\Layoutbeschriftung| werden beachtet. % \begin{macrocode} \def\CUT#1{\edef\TMP{#1}% \edef#1{\expandafter\MakeCUT\TMP.000*}} \def\MakeCUT#1.#2#3#4*{#1.#2#3} \def\Wert#1#2{\@Divide{#1}{\Einheit}{\dimenA}% \removept{\dimenA}{#2}% \CUT#2} \def\KonText#1{% \def\Name{% \ifToken\hbox{\footnotesize#1\vphantom{)}}% \else \ifTeXNamen\hbox{\footnotesize\char92#1\vphantom{)}}\fi \fi}% \ifWerte \ifToken \expandafter\HW\csname DIM#1\endcsname \else \expandafter\HW\csname #1\endcsname \fi \ifdim\HW>12pt\vbox\fi{\footnotesize \Wert{\HW}{\Hw}% \Name \hbox{\ifToken~=~\else\ifTeXNamen~=~\fi\fi \Hw \if\EFaktor1\else\cdot\EFaktor\fi \,\EMass\vphantom{(}}}% \else \Name \fi} \def\KonPfeil #1 from #2 #3 to #4 #5 {{% \ifdim#2=#4% vertikaler Pfeil \ifdim#3=#5\else \Rechne {#3} - {#5} -> {\dimen0} \Rechne {\ABS{\dimen0}} -> {\dimen1} [\Hl] \Rechne {0.5\dimen0} + {#5} -> {\dimen0} [\Hm] \ifdim#5<#3% \removept{#5}\Ha \else \removept{#3}\Ha \fi \removept{#2}\Hx \put(\Hx,\Ha){\vector(0,1){\Hl}} \put(\Hx,\Ha){\vector(0,-1){0}} \put(\Hx,\Hm){\makebox(0,0)[l]{\fbox{\KonText{#1}}}} \fi \else % horizontaler Pfeil \Rechne {#2} - {#4} -> {\dimen0} \Rechne {\ABS{\dimen0}} -> {\dimen1} [\Hl] \Rechne {0.5\dimen0} + {#4} -> {\dimen0} [\Hm] \ifdim#4<#2% \removept{#4}\Ha \else \removept{#2}\Ha \fi \removept{#3}\Hy \put(\Ha,\Hy){\vector(1,0){\Hl}} \put(\Ha,\Hy){\vector(-1,0){0}} \put(\Hm,\Hy){\makebox(0,0)[t]{\fbox{\KonText{#1}}}} \fi }} % \end{macrocode} % \end{macro} % \end{macro} % % Nun zeichnen wir einfach eine \LaTeX-picture-Umgebung mit K"asten, % die die Layoutteile umranden. Hier k"onnen wir auch noch einige % Register allozieren. % \begin{macrocode} \newif\ifKopfinnen \newdimen\Skizze % \end{macrocode} % \begin{macro}{\Layoutskizze} % Das Layout soll sowohl formatf"ullend als auch klein in Abbildungen % dargestellt werden k"onnen. Die kleine Darstellung ruft man mit dem % Environment |Layoutskizze| auf. Der Verkleinerungsfaktor wird der % aktuellen Satzbreite angepa"st. Hier die Makros: % \begin{macrocode} \def\Layoutskizze{\@ifnextchar<{\Layoutmitmass}{\Layoutohne}} \def\Layoutohne{\leavevmode\hbox\bgroup \Skizze=\linewidth\ignorespaces} \def\Layoutmitmass <#1> {\leavevmode\hbox\bgroup \Skizze=#1\ignorespaces} \def\endLayoutskizze{% \@Divide{\Skizze}{2\Papierbreite}{\Skizze}% \removept{\Skizze}\MinFak \mbox{\fboxrule=0.1pt\fboxsep=-\fboxrule \topskip=0pt \unitlength=\Skizze \ifKopfinnen \Rechne {\DIMOben} + {\DIMKAbstand} + {\DIMKHoehe} -> {\dimen0} \else \dimen0=\DIMOben \fi \Pfeilefalse \fbox{\c@page=2\Konstruktionsbild \vbox to \MinFak\Papierhoehe {\kern\MinFak\dimen0 \hbox to \MinFak\Papierbreite{% \kern\MinFak\DIMAussen \LayoutXX \hss}\vss}}% \fbox{\c@page=1\Konstruktionsbild \vbox to \MinFak\Papierhoehe {\kern\MinFak\dimen0 \hbox to \MinFak\Papierbreite{% \kern\MinFak\DIMBund \LayoutXX \hss}\vss}}}% \egroup} % \end{macrocode} % \end{macro} % Das Konstruktionsbild wird mit \PiCTeX\ realisiert. Das Bild darf % keine Ausma"se haben: % \begin{macrocode} \def\Konstruktionsbild{% \ifKonstruktion \beginpicture \accountingoff \setcoordinatesystem units <\unitlength,\unitlength> \setplotarea x from 0 to 0, y from 0 to 0 \the\PiCKonstruktion \endpicture \fi} \newtoks\PiCKonstruktion \PiCKonstruktion={} % \end{macrocode} % Das gro"se Layout ist ganz einfach: % \begin{macrocode} \def\Layout{{\unitlength=1pt\LayoutXX}% \thispagestyle{empty}} % \end{macrocode} % Jetzt kommt das eigentliche Makro, das die Zeichnung realisiert. % \begin{macrocode} \def\LayoutXX{\hbox{% \removept{\topskip}\TOPSKIP \begin{picture}(0,0)(0,-\TOPSKIP) \ifKopfinnen \KonKasten {\textwidth} {\headsep} [bl] at 0pt 0pt \thicklines \KonKasten {\textwidth} {\DIMSatzhoehe} [bl] at {0pt} {-\textheight} \else \KonKasten {\textwidth} {\headheight} [bl] at 0pt {\headsep} \thicklines \KonKasten {\textwidth} {\textheight} [tl] at 0pt 0pt \fi \thinlines \Rechne {-\textheight} - {\footskip} -> {\dimen2} \KonKasten {\textwidth} {\headheight} [bl] at 0pt {\dimen2} \ifPfeile \fboxsep=1pt \fboxrule=0.1pt \ifToken \Rechne {\dimen2} + {\footskip} -> {\dimen2} \KonPfeil {Satzbreite} from {0pt} {-0.1\textheight} to {\textwidth} {-0.1\textheight} \ifKopfinnen \Rechne {\headsep} + {\headheight} -> {\dimen2} [\Zpt] \KonPfeil {Satzhoehe} from {0.1\textwidth} {\dimen2} to {0.1\textwidth} {-\textheight} \else \def\Zpt{0}% \KonPfeil {Satzhoehe} from {0.1\textwidth} {0pt} to {0.1\textwidth} {-\textheight} \fi \KonPfeil {KAbstand} from {0.2\textwidth} {0pt} to {0.2\textwidth} {\headsep} \Rechne {\headsep} + {\headheight} -> {\dimen2} \KonPfeil {KHoehe} from {0.3\textwidth} {\headsep} to {0.3\textwidth} {\dimen2} \Rechne {-\textheight} - {\footskip} -> {\dimen2} \KonPfeil {FAbstand} from {0.2\textwidth} {-\textheight} to {0.2\textwidth} {\dimen2} \Rechne {-\textheight} - {\DIMUnten} -> {\dimen3} \KonPfeil {Unten} from {0pt} {-\textheight} to {0pt} {\dimen3} \ifKopfinnen \Rechne {\topmargin} + {\voffset} + {1in} + {\headheight} + {\headsep} -> {\dimen2} \Rechne {\headheight} + {\headsep} -> {\dimen3} \else \dimen2 = \DIMOben \dimen3 = 0pt \fi \KonPfeil {Oben} from {0pt} {\dimen2} to {0pt} {\dimen3} \ifodd\value{page} \Rechne {-\oddsidemargin} - {\hoffset} - {1in} -> {\dimen2} \KonPfeil {Bund} from {\dimen2} {\Zpt pt} to {0pt} {\Zpt pt} \Rechne {\textwidth} + {\DIMAussen} -> \dimen2 \KonPfeil {Aussen} from {\textwidth} {\Zpt pt} to {\dimen2} {\Zpt pt} \else \Rechne {-\evensidemargin} - {\hoffset} - {1in} -> {\dimen2} \KonPfeil {Aussen} from {\dimen2} {\Zpt pt} to {0pt} {\Zpt pt} \Rechne {\textwidth} + {\DIMBund} -> \dimen2 \KonPfeil {Bund} from {\textwidth} {\Zpt pt} to {\dimen2} {\Zpt pt} \fi \fi \fi \end{picture}}} % \end{macrocode} % % \subsubsection{Papierformat} % % \begin{macro}{\PapierFormat} % F"ur die Konstruktionen mu"s das Papierformat bekannt sein. Man kann % DIN-Formate angeben, aber auch explizite L"angenangaben sind erlaubt. % \begin{macrocode} \let\EndPapierFormat\relax \let\EndPapierFormatEX\relax \def\PapierFormat{% \@ifnextchar<{\let\EndPapierFormatEX\EndPapierFormat \PapierFormatEX}{\PapierFormatDIN}} \let\Papierformat\PapierFormat \newdimen\Papierbreite \newdimen\Papierhoehe \def\PapierFormatEX<#1,#2> {% \Papierbreite=#1\relax \Papierhoehe=#2\relax \EndPapierFormatEX} \def\WZwei{1.4142pt} \newcount\loopcount \def\PapierFormatDIN#1#2 {% \if#1A\PapierFormatEX <841mm,1189mm> \else \if#1B\PapierFormatEX <1000mm,1414mm> \else \if#1C\PapierFormatEX <917mm,1297mm> \else \message{Warnung: Formatreihe #1 nicht definiert.} \message{Benutze DIN-A-Reihe.} \PapierFormatEX <841mm,1189mm> \fi \fi \fi \loopcount=#2\relax \loop \ifnum\loopcount>0 \@Divide{\Papierbreite}{\WZwei}{\Papierbreite} \@Divide{\Papierhoehe}{\WZwei}{\Papierhoehe} \advance\loopcount by -1 \repeat \RoundmmInt\Papierbreite \RoundmmInt\Papierhoehe \Wert{\Papierbreite}\Ha \Wert{\Papierhoehe}\Hb \message{DIN #1#2 berechnet zu <\Ha\EMass,\Hb\EMass>.}% \EndPapierFormat} \PapierFormat <210mm,297mm> % \end{macrocode} % Nach der DIN-Norm wird nach der Berechnung das Format auf Millimeter % gerundet. Das geschieht durch das Makro |\RoundmmInt|. Der Summand % 0.5001 ist der Wert 0.5, der jedoch wegen der Integer-Rechnung von % \TeX\ etwas korrigiert werden mu"s. |\CUTG| schneidet auf ganze % Zahlen ab. % \begin{macrocode} \def\RoundmmInt#1{% \@Divide{#1}{1mm}{\HW}% \Rechne {\HW} + {0.0pt} -> {\HW} \removept{\HW}\Hw \CUTG\Hw #1=\Hw mm} \def\CUTG#1{\edef\TMP{#1}% \edef#1{\expandafter\MakeCUTG\TMP.000*}} \def\MakeCUTG#1.#2#3#4*{#1} % \end{macrocode} % \end{macro} % % \begin{macro}{\QuerFormat} % Das Umschalten auf Querformat ist ganz einfach, es wird nur die % Papierh"ohe mit der Papierbreite vertauscht: % \begin{macrocode} \def\QuerFormat{% \dimen0=\Papierbreite \Papierbreite=\Papierhoehe \Papierhoehe=\dimen0} % \end{macrocode} % \end{macro} % % \subsection{Freie Einstellung der Parameter} % % \begin{macro}{\FreeStyle} % Die Konstruktionsmethoden bauen alle auf dem folgenden Befehl % auf. Mit |\FreeStyle| werden beliebige Werte gesetzt und % globale Einstellungen vorgenommen. % % Zuerst ben"otigen wir einige Register: % \begin{macrocode} \newdimen\DIMSatzbreite \newdimen\DIMSatzhoehe \newdimen\DIMBund \newdimen\DIMAussen \newdimen\DIMOben \newdimen\DIMUnten \newdimen\DIMKAbstand \newdimen\DIMKHoehe \newdimen\DIMFAbstand \newif\ifDoppelseite \Doppelseitefalse \newif\ifnoSB \newif\ifnoSH % \end{macrocode} % Jetzt folgen die Makros f"ur die Schl"usselworte. % \begin{macrocode} \def\FreeStyle{\NewOber{Free}% \noSBtrue\noSHtrue \DIMSatzbreite = \textwidth \DIMSatzhoehe = \textheight \ifKopfinnen \Rechne {\DIMSatzhoehe} + {\headsep} + {\headheight} -> {\DIMSatzhoehe} \Rechne {1in} + {\topmargin} + {\voffset} -> {\DIMOben} \else \Rechne {1in} + {\topmargin} + {\voffset} + {\headheight} + {\headsep} -> {\DIMOben} \fi \Rechne {1in} + {\hoffset} + {\oddsidemargin} -> {\DIMBund} \Rechne {\Papierbreite} - {\DIMBund} - {\DIMSatzbreite} -> {\DIMAussen} \Rechne {\Papierhoehe} - {\DIMOben} - {\DIMSatzhoehe} -> {\DIMUnten} \DIMKAbstand = \headsep \DIMKHoehe = \headheight \DIMFAbstand = \footskip \if@twoside\Doppelseitetrue\fi \nextSchluessel} % \end{macrocode} % \end{macro} % \begin{macrocode} \@namedef{Free/}{\OldOber{Free}% \ifnoSB \Rechne {\Papierbreite} - {\DIMBund} - {\DIMAussen} -> {\DIMSatzbreite} \fi \textwidth = \DIMSatzbreite \ifnoSH \Rechne {\Papierhoehe} - {\DIMOben} - {\DIMUnten} -> {\DIMSatzhoehe} \fi \textheight = \DIMSatzhoehe \headheight\DIMKHoehe \headsep\DIMKAbstand \footskip\DIMFAbstand \voffset=0pt\hoffset=0pt \Rechne {\DIMBund} - {1in} -> {\oddsidemargin} \Rechne {\DIMAussen} - {1in} -> {\evensidemargin} \ifKopfinnen \Rechne {\DIMSatzhoehe} - {\headsep} - {\headheight} -> {\textheight} \Rechne {\DIMOben} - {1in} -> {\topmargin} \else \textheight = \DIMSatzhoehe \Rechne {\DIMOben} - {\headsep} - {\headheight} - {1in} -> {\topmargin} \fi \ifDoppelseite \@twosidetrue\@mparswitchtrue \ifx\KopfTextlinks\Pempty\else \def\@evenhead{\KopfTextlinks}% \fi \ifx\FussTextlinks\Pempty\else \def\@evenfoot{\FussTextlinks}% \fi \else \@twosidefalse\@mparswitchfalse \fi \ifx\KopfTextrechts\Pempty\else \def\@oddhead{\KopfTextrechts}% \fi \ifx\FussTextrechts\Pempty\else \def\@oddfoot{\FussTextrechts}% \fi } \def\Pempty{.} \def\KopfTextlinks{.} \def\KopfTextrechts{.} \def\FussTextlinks{.} \def\FussTextrechts{.} \def\FreeDoppelseite{\Doppelseitetrue \nextSchluessel} \def\FreeEinfachseite{\Doppelseitefalse \nextSchluessel} \def\FreeSatzbreite <#1> {\DIMSatzbreite=#1% \noSBfalse \nextSchluessel} \def\FreeSatzhoehe <#1> {\DIMSatzhoehe=#1% \noSHfalse \nextSchluessel} \def\FreeBund <#1> {\DIMBund=#1% \nextSchluessel} \def\FreeAussen <#1> {\DIMAussen=#1% \nextSchluessel} \def\FreeOben <#1> {\DIMOben=#1% \nextSchluessel} \def\FreeUnten <#1> {\DIMUnten=#1% \nextSchluessel} \def\FreeKopfzeile{\NewOber{FreeKopf}% \nextSchluessel} \@namedef{FreeKopf/}{\OldOber{FreeKopf}% \nextSchluessel} \def\FreeKopflebend{\Kopfinnentrue \nextSchluessel} \def\FreeKopftot{\Kopfinnenfalse \nextSchluessel} \def\FreeKopfHoehe <#1> {\DIMKHoehe#1 \nextSchluessel} \def\FreeKopfAbstand <#1> {\DIMKAbstand#1 \nextSchluessel} \def\FreeKopfText{% \ifDoppelseite \let\next\KTextzwei \else \let\next\KTexteins \fi\next} \def\KTexteins #1 {\def\KopfTextrechts{{#1}}% \nextSchluessel} \def\KTextzwei #1 #2 {\def\KopfTextlinks{{#1}}% \def\KopfTextrechts{{#2}}% \nextSchluessel} \def\FreeFusszeile{\NewOber{FreeFuss}% \nextSchluessel} \@namedef{FreeFuss/}{\OldOber{FreeFuss}% \nextSchluessel} \def\FreeFussAbstand <#1> {\DIMFAbstand#1 \nextSchluessel} \def\FreeFussText{% \ifDoppelseite \let\next\FTextzwei \else \let\next\FTexteins \fi\next} \def\FTexteins #1 {\def\FussTextrechts{{#1}}% \nextSchluessel} \def\FTextzwei #1 #2 {\def\FussTextlinks{{#1}}% \def\FussTextrechts{{#2}}% \nextSchluessel} % \end{macrocode} % % \subsection{Korrektur voreingestellter Werte} % % An dieser Stelle wiederholen sich in etwa die Makros aus dem % vorangegangenen Abschnitt. Die Zuweiseungen sind jedoch Additionen. % Die Kopf- und Fu"szeilen-Textfestlegung ist in |\KorrStyle| nicht % vorgesehen. Man kann ja |\FreeStyle| dazu benutzen. % \begin{macrocode} \def\KorrStyle{\NewOber{Korr}% \DIMSatzbreite = \textwidth \DIMSatzhoehe = \textheight \ifKopfinnen \Rechne {\DIMSatzhoehe} + {\headsep} + {\headheight} -> {\DIMSatzhoehe} \Rechne {1in} + {\topmargin} + {\voffset} -> {\DIMOben} \else \Rechne {1in} + {\topmargin} + {\voffset} + {\headheight} + {\headsep} -> {\DIMOben} \fi \Rechne {1in} + {\hoffset} + {\oddsidemargin} -> {\DIMBund} \Rechne {\Papierbreite} - {\DIMBund} - {\DIMSatzbreite} -> {\DIMAussen} \Rechne {\Papierhoehe} - {\DIMOben} - {\DIMSatzhoehe} -> {\DIMUnten} \DIMKAbstand\headsep \DIMKHoehe\headheight \DIMFAbstand\footskip \if@twoside\Doppelseitetrue\fi \nextSchluessel} \@namedef{Korr/}{\OldOber{Korr}% \textwidth\DIMSatzbreite \headheight\DIMKHoehe \headsep\DIMKAbstand \footskip\DIMFAbstand \voffset=0pt \hoffset=0pt \Rechne {\DIMBund} - {1in} -> {\oddsidemargin} \Rechne {\DIMAussen} - {1in} -> {\evensidemargin} \ifKopfinnen \Rechne {\DIMSatzhoehe} - {\headsep} - {\headheight} -> {\textheight} \Rechne {\DIMOben} - {1in} -> {\topmargin} \else \textheight = \DIMSatzhoehe \Rechne {\DIMOben} - {\headsep} - {\headheight} - {1in} -> {\topmargin} \fi \ifDoppelseite \@twosidetrue\@mparswitchtrue \fi } \def\KorrDoppelseite{\Doppelseitetrue \nextSchluessel} \def\KorrEinfachseite{\Doppelseitefalse \nextSchluessel} \def\KorrSatzbreite <#1> {\advance \DIMSatzbreite by #1% \nextSchluessel} \def\KorrSatzhoehe <#1> {\advance \DIMSatzhoehe by #1% \nextSchluessel} \def\KorrBund <#1> {\advance \DIMBund by #1% \nextSchluessel} \def\KorrAussen <#1> {\advance \DIMAussen by #1% \nextSchluessel} \def\KorrOben <#1> {\advance \DIMOben by #1% \nextSchluessel} \def\KorrUnten <#1> {\advance \DIMUnten by #1% \nextSchluessel} \def\KorrKopfzeile{\NewOber{KorrKopf}% \nextSchluessel} \@namedef{KorrKopf/}{\OldOber{KorrKopf}% \nextSchluessel} \def\KorrKopflebend{\Kopfinnentrue \nextSchluessel} \def\KorrKopftot{\Kopfinnenfalse \nextSchluessel} \def\KorrKopfHoehe <#1> {\advance \DIMKHoehe by #1 \nextSchluessel} \def\KorrKopfAbstand <#1> {\advance \DIMKAbstand by #1 \nextSchluessel} \def\KorrFusszeile{\NewOber{KorrFuss}% \nextSchluessel} \@namedef{KorrFuss/}{\OldOber{KorrFuss}% \nextSchluessel} \def\KorrFussAbstand <#1> {\advance \DIMFAbstand by #1 \nextSchluessel} % \end{macrocode} % % \subsection{Konstruktionsmethoden} % % Um dem Anwender nun aber wirklich das Leben zu erleichtern, werden % einige Konstruktionsmethoden hier schon implementiert. Ihre Ergebnisse % k"onnen dan immer noch mit |\KorrStyle| korrigiert bzw. angepa"st % werden. Wichtig ist, da"s dem Benutzer verschiedene Layouts an die % Hand gegeben werden, die ohne Aufwand mit \TeX\ realisiert werden % k"onnen. Bevor diese Konstruktionsmethoden aufgerufen werden k"onnen, % mu"s das Papierformat definiert worden sein. % % \subsubsection{"Ahnlichkeitskonstruktion} % % Die Basis ist eine vom Benutzer zu w"ahlende Satzbreite. Davon % ausgehend wird dann ein zum Papierformat "ahnliches Rechteck als % Satzspiegel konstruiert. Die R"ander werden im Verh"altnis des % goldenen Schnitts ($1:1.618$) verteilt. % \begin{macrocode} \def\Aehnlichkeitskonstruktion <#1> {% \@Divide{\Papierhoehe}{\Papierbreite}{\HW}% \removept{\HW}\Hf \DIMSatzbreite=#1\relax \DIMSatzhoehe=\Hf\DIMSatzbreite \Rechne {\Papierbreite} - {\DIMSatzbreite} -> {\HW} \DIMAussen = 0.618\HW \DIMBund = 0.382\HW \Rechne {\Papierhoehe} - {\DIMSatzhoehe} -> {\HW} \DIMUnten = 0.618\HW \DIMOben = 0.382\HW \WerteRealisieren} % \end{macrocode} % Die Festlegung der \TeX-Werte kann man sich nun aus dem |\FreeStyle| % borgen, genauer aus dem Makro |\Free/|. Zum Ende der Konstruktion % wird dann noch eine Plausibilit"atspr"ufung durchgef"uhrt, um den % Benutzer vor merkw"urdigen Werten zu warnen. % \begin{macrocode} \def\WW#1{\Wert{\csname DIM#1\endcsname}{\HH}% \message{(#1:\HH)}} \def\WerteRealisieren{% \Plausibilitaet% \DIMKAbstand=1\baselineskip \DIMKHoehe=1\baselineskip \DIMFAbstand=2\baselineskip \Kopfinnentrue \NewOber{Korr}% \csname Korr/\endcsname} % \end{macrocode} % % Die Plausibilit"atspr"ufung wird gleich anschlie"send programmiert. Sie % ist recht einfach nachzuvollziehen. % \begin{macrocode} \def\Plausibilitaet{% \ifdim\DIMSatzbreite<0.6\Papierbreite \KonWarn{Die Satzbreite ist ziemlich klein.}% \fi \ifdim\DIMSatzbreite>0.8\Papierbreite \KonWarn{Die Satzbreite ist ziemlich gross.}% \fi \ifdim\DIMBund<15mm \KonWarn{Der Bundsteg ist sehr klein ausgefallen.}% \fi \ifdim\Rcount=1234pt\else \ifdim\Rcount<5pt \removept{\Rcount}\RCount \KonWarn{Rasterteilung zu grob (\RCount).}% \fi \ifdim\Rcount>12pt \removept{\Rcount}\RCount \KonWarn{Rasterteilung zu fein (\RCount).}% \fi \fi} \def\KonWarn#1{\message{Layout Warnung: #1}} % \end{macrocode} % % \subsubsection{Renaissance-Verteilung} % % Bei der Renaissance-Verteilun werden die R"ander im Verh"altnis % $2:3:4:5$ aufgeteilt. Die Satzbreite wird vorgegeben. % % \begin{macrocode} \def\Renaissancekonstruktion <#1> {% \DIMSatzbreite=#1\relax \Rechne {\Papierbreite} - {\DIMSatzbreite} -> {\HW} \divide\HW by 6 \DIMBund=2\HW \DIMAussen=4\HW \DIMOben=3\HW \DIMUnten=5\HW \Rechne {\Papierhoehe} - {\DIMOben} - {\DIMUnten} -> {\DIMSatzhoehe} \WerteRealisieren} % \end{macrocode} % % \subsubsection{Rasterkonstruktion} % % Die allgemeine Rasterkonstruktion geht von einer rasterartigen % Aufteilung der Seite auf. Die R"ander werden dann im Verh"altnis % $1:2$ besetzt. % \begin{macrocode} \newdimen\Rcount \Rcount=1234pt \def\Rasterkonstruktion #1 {\Rcount=#1pt% \advance\Rcount by -3pt% \removept{\Rcount}\RCount \@Divide{\Papierbreite}{#1pt}{\HW}% \DIMSatzbreite=\RCount\HW \@Divide{\Papierhoehe}{\Papierbreite}{\HW}% \removept{\HW}\Hw \DIMSatzhoehe=\Hw\DIMSatzbreite \@Divide{\Papierbreite}{#1pt}{\HW}% \DIMBund=1\HW \DIMAussen=2\HW \edef\RasterWeiteB{\the\HW}% \@Divide{\Papierhoehe}{#1pt}{\HW}% \DIMOben=1\HW \DIMUnten=2\HW \edef\RasterWeiteH{\the\HW}% \Rcount=#1pt% \WerteRealisieren % \end{macrocode} % Nun wird noch die Konstruktionsmethode als \PiCTeX-Eingabe festgelegt, % damit sie bei der Satzspiegelzeichnung mit eingebaut werden kann: % \begin{macrocode} \PiCKonstruktion={% \removept{\Papierbreite}\Pb \removept{\Papierhoehe}\Ph \dimen0\Rcount\removept{\Rcount}\RC \edef\RC{\expandafter\MakeCUTG\RC.000*}% \expandafter\HW\RC pt \ifdim\Rcount=\HW \accountingoff \put {\beginpicture \setplotarea x from 0 to {\Pb}, y from 0 to {\Ph} \accountingoff \linethickness=0.1pt \grid {\RC} {\RC} \endpicture} [Bl] at 0 0 \fi}} % \end{macrocode} % % \subsubsection{Diagonalkonstruktion} % % Das Diagonalverfahren ist ein Rasterverfahren mit ggf. % nichtganzzahliger Rasterzahl. Die Berechnung erfolgt nach % der gew"unschten Satzbreite % \begin{macrocode} \def\Diagonalkonstruktion <#1> {\DIMSatzbreite=#1 \Rechne {0.33333\Papierbreite} - {0.33333\DIMSatzbreite} -> {\HW} \@Divide{\Papierbreite}{\HW}{\Rcount}% \removept{\Rcount}\RCOunt \Rasterkonstruktion {\RCOunt} % \end{macrocode} % Auch hier kommt noch die Konstruktionsmethode: % \begin{macrocode} \PiCKonstruktion={% \removept{\Papierbreite}{\Pb}% \removept{\Papierhoehe}{\Ph}% \removept{0.5\Papierhoehe}{\Phh}% \ifodd\value{page}% \plot {\Pb} 0 0 {\Ph} / \plot {\Pb} 0 0 {\Phh} {\Pb} {\Ph} / \else \plot 0 {\Ph} {\Pb} {\Phh} 0 0 / \plot 0 0 {\Pb} {\Ph} / \fi}} % \end{macrocode} % % \subsubsection{Goldener Schnitt} % % Der Konstruktion zum Goldenen Schnitt ist noch einfacher zu % programmieren. Sie hat den Vorteil, da"s zus"atzlich zu den R"andern % auch der Satzspiegel zum Papierformat im Goldenen Schnitt steht. % Es handelt sich einfach um die Rasterkonstruktion mit Rasterwert~9. % \begin{macrocode} \def\GoldenerSchnitt{% \Rasterkonstruktion 9 % \end{macrocode} % Die Konstruktionsmethode wird jedoch wie bei der Diagonalkonstruktion % mit einer Zusatzkonstruktion gezeichnet. % \begin{macrocode} \PiCKonstruktion={% \removept{\Papierbreite}{\Pb}% \removept{\Papierhoehe}{\Ph}% \removept{0.5\Papierhoehe}{\Phh}% \removept{0.3333\Papierbreite}{\Pbd}% \removept{0.6667\Papierbreite}{\Pbdd}% \removept{0.6667\Papierhoehe}{\Phs}% \removept{0.8333\Papierhoehe}{\Phss}% \ifodd\value{page}% \plot {\Pb} 0 0 {\Ph} / \plot {\Pb} 0 0 {\Phh} {\Pb} {\Ph} / \plot {\Pbd} {\Phs} {\Pbd} {\Ph} / \plot {\Pbd} {\Ph} 0 {\Phss} / \else \plot 0 {\Ph} {\Pb} {\Phh} 0 0 / \plot 0 0 {\Pb} {\Ph} / \plot {\Pbdd} {\Phs} {\Pb} {\Phss} / \fi}} % \end{macrocode} % % \subsubsection{Silberner Schnitt} % % Da wir bei der Konstruktion des Goldenen Schnitts eigentlich gar nicht % so recht wissen, was hier eigentlich im Verh"altnis des Goldenen % Schnitts stehen soll, kommt hier ein etwas abgewandeltes Verfahren. % Damit steht die Satzbreite (Satzh"ohe) zur Papierbreite (Papierh"ohe) % etwa im richtigen Verh"altnis ($3:5$). % \begin{macrocode} \def\SilbernerSchnitt{% \Rasterkonstruktion 8 % \end{macrocode} % Die Konstruktionsmethode ist fast die des Goldenen Schnitts: % \begin{macrocode} \PiCKonstruktion={% \removept{\Papierbreite}{\Pb}% \removept{\Papierhoehe}{\Ph}% \removept{0.5\Papierhoehe}{\Phh}% \removept{0.3333\Papierbreite}{\Pbd}% \removept{0.5\Papierbreite}{\Pbh}% \removept{0.6667\Papierhoehe}{\Phs}% \ifodd\value{page}% \plot {\Pb} 0 0 {\Ph} / \plot {\Pb} 0 0 {\Phh} {\Pb} {\Ph} / \plot {\Pbd} {\Phs} {\Pbd} {\Ph} / \plot {\Pbd} {\Ph} {-\Pbh} {\Phh} / \else \plot 0 {\Ph} {\Pb} {\Phh} 0 0 / \plot 0 0 {\Pb} {\Ph} / \plot 0 {\Ph} {\Pb} 0 / \fi}} % \end{macrocode} % % \subsection{Fertige Layouts} % % Die fertigen Layouts werden auf den Originalkonstruktionen aufgebaut. % Dann werden die Werte entsprechend ge"andert. % \changes{v1.0f}{93/05/13}{{\tt`FertigLayout} {\tt`fi} erg"anzt.} % \begin{macrocode} \def\FertigLayout #1 {% \expandafter\ifx\csname Fertig#1\endcsname\undefined \message{Layout Warnung: Das fertige Layout #1 existiert nicht.}% \else \csname Fertig#1\endcsname \fi} \@namedef{Fertig12A}{\Rasterkonstruktion 12 } \@namedef{Fertig12B}{\Rasterkonstruktion 12 \dimen0=\RasterWeiteB \dimen1=\RasterWeiteH \Rechne {\DIMSatzbreite} - {\dimen0} -> {\DIMSatzbreite} \Rechne {\DIMSatzhoehe} - {\dimen1} -> {\DIMSatzhoehe} \DIMBund=1.5\dimen0 \DIMAussen=2.5\dimen0 \DIMOben=1.5\dimen1 \DIMUnten=2.5\dimen1 \WerteRealisieren} \@namedef{Fertig12C}{\Rasterkonstruktion 12 \dimen0=\RasterWeiteB \dimen1=\RasterWeiteH \DIMOben=\dimen1 \DIMUnten=2\dimen1 \DIMBund=2\dimen0 \DIMAussen=2\dimen0 \DIMSatzbreite=8\dimen0 \DIMSatzhoehe=9\dimen1 \WerteRealisieren} \@namedef{Fertig10A}{\Rasterkonstruktion 10 } \@namedef{Fertig10B}{\Rasterkonstruktion 10 \Rechne {\DIMBund} + {\RasterWeiteB} -> {\DIMBund} \Rechne {\DIMSatzbreite} - {\RasterWeiteB} -> {\DIMSatzbreite} \WerteRealisieren} \@namedef{Fertig10C}{\Rasterkonstruktion 10 \dimen0=\RasterWeiteB \Rechne {\DIMBund} + {0.5\dimen0} -> {\DIMBund} \Rechne {\DIMSatzbreite} - {0.5\dimen0} -> {\DIMSatzbreite} \WerteRealisieren} \@namedef{Fertig8A}{\Rasterkonstruktion 8 } \@namedef{Fertig7A}{\Rasterkonstruktion 7 } % \end{macrocode} % % \subsection{Wenn man fast alles auf eine Seite bekommen will\ldots} % F"ur Seiten, die einen m"oglichst gro"sen Satzspiegel erhalten sollen, % gibt es den folgenden Befehl: % \begin{macrocode} \def\MaximalSeite{% \FreeStyle Einfachseite Oben <15mm> Unten <20mm> Bund <20mm> Aussen <10mm> Fusszeile Abstand <8mm> Text {\hfil--\,\thepage\,--\hfil} / Kopfzeile tot Hoehe <0mm> Abstand <0mm> Text {\hfil} / / } % \end{macrocode} % % Die Schnittmarken bestehen aus $+$-Zeichen, die mittels Kerning und % leeren Boxen an die richtigen Stellen positioniert werden. Mittels % \verb+\clearpage+ wird ggf. am Anfang eine neue Seite erzeugt. Hierdurch % ist garantiert, da"s das Makro nur am Seitenanfang aufgerufen wird. % \begin{macrocode} \def\@SPunkt{\vbox to 0pt{\vss\hbox to 0pt{\hss+\hss}\vss}} \def\@SDot{\vbox to 0pt{\vss\hbox to 0pt{\hss.\hss}\vss}} \def\SchnittMarken{\clearpage{\offinterlineskip% \vbox to 0pt{\kern-\DIMOben \ifKopfinnen\else \kern-\headsep\kern-\headheight \fi \hbox to 0pt{\kern-\DIMBund\@SPunkt \kern0.5\Papierbreite \@SDot \kern0.5\Papierbreite \@SPunkt\hss}% \kern0.5\Papierhoehe \hbox to 0pt{\kern-\DIMBund\@SDot \kern\Papierbreite\@SDot\hss}% \kern0.5\Papierhoehe \hbox to 0pt{\kern-\DIMBund\@SPunkt \kern0.5\Papierbreite \@SDot \kern0.5\Papierbreite \@SPunkt\hss}% \vss}}} % \end{macrocode} % % \subsection{Zentrieren auf dem Druckformat} % % \begin{macro}{\Zentriert} % Mittels \verb+\Zentriert auf+ kann das erstellte Layout auf das % angegebene Druckformat zentriert werden. Normalerweise steht es % ja in der linken oberen Ecke. Es werden die Differenzen zwischen % dem bestehenden und dem angegebenen Format berechnet. Entsprechend % werden dann \verb+\hoffset+ und \verb+\voffset+ erh"oht. % \begin{macrocode} \def\Zentriert auf {\bgroup\let\EndPapierFormat\EndZentriert \edef\PB@{\the\Papierbreite}% \edef\PH@{\the\Papierhoehe}% \def\message##1{}% \PapierFormat} \def\EndZentriert{% \advance\Papierbreite by -\PB@ \advance\Papierhoehe by -\PH@ \Papierhoehe=0.5\Papierhoehe \Papierbreite=0.5\Papierbreite \typeout{Verschoben um (\the\Papierbreite,\the\Papierhoehe).}% \global\advance\hoffset by \Papierbreite \global\advance\voffset by \Papierhoehe \egroup} % \end{macrocode} % \end{macro} % % \endinput