summaryrefslogtreecommitdiff
path: root/info/german/stammtisch/wuppertal/updates/konstruk.sty
diff options
context:
space:
mode:
Diffstat (limited to 'info/german/stammtisch/wuppertal/updates/konstruk.sty')
-rw-r--r--info/german/stammtisch/wuppertal/updates/konstruk.sty1366
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