diff options
Diffstat (limited to 'info/german/stammtisch/wuppertal/updates/konstruk.sty')
-rw-r--r-- | info/german/stammtisch/wuppertal/updates/konstruk.sty | 1366 |
1 files changed, 1366 insertions, 0 deletions
diff --git a/info/german/stammtisch/wuppertal/updates/konstruk.sty b/info/german/stammtisch/wuppertal/updates/konstruk.sty new file mode 100644 index 0000000000..c3996b0fc1 --- /dev/null +++ b/info/german/stammtisch/wuppertal/updates/konstruk.sty @@ -0,0 +1,1366 @@ +\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: <Andreas.Schrell@FernUni-Hagen.de> +% +% \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 |