diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/koma-script/scrktare.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/koma-script/scrktare.dtx | 1940 |
1 files changed, 1940 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/koma-script/scrktare.dtx b/Master/texmf-dist/source/latex/koma-script/scrktare.dtx new file mode 100644 index 00000000000..0264b9c47b3 --- /dev/null +++ b/Master/texmf-dist/source/latex/koma-script/scrktare.dtx @@ -0,0 +1,1940 @@ +% \CheckSum{1540} +% \iffalse meta-comment +% ====================================================================== +% scrktare.dtx +% Copyright (c) Markus Kohm, 2002-2006 +% +% This file is part of the LaTeX2e KOMA-Script bundle. +% +% This work may be distributed and/or modified under the conditions of +% the LaTeX Project Public License, version 1.3b of the license. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3b or later is part of all distributions of LaTeX +% version 2005/12/01 or later and of this work. +% +% This work has the LPPL maintenance status "author-maintained". +% +% The Current Maintainer and author of this work is Markus Kohm. +% +% This work consists of all files listed in manifest.txt. +% ---------------------------------------------------------------------- +% scrktare.dtx +% Copyright (c) Markus Kohm, 2002-2006 +% +% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz, +% Version 1.3b, verteilt und/oder veraendert werden. +% Die neuste Version dieser Lizenz ist +% http://www.latex-project.org/lppl.txt +% und Version 1.3b ist Teil aller Verteilungen von LaTeX +% Version 2005/12/01 oder spaeter und dieses Werks. +% +% Dieses Werk hat den LPPL-Verwaltungs-Status "author-maintained" +% (allein durch den Autor verwaltet). +% +% Der Aktuelle Verwalter und Autor dieses Werkes ist Markus Kohm. +% +% Dieses Werk besteht aus den in manifest.txt aufgefuehrten Dateien. +% ====================================================================== +% \fi +% +% \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 +%%% From File: scrktare.dtx +%<*driver> +% \fi +\ProvidesFile{scrktare.dtx}[2006/07/20 v2.95a KOMA-Script (type area)] +% \iffalse +%</driver> +%<package&identify>\ProvidesPackage{typearea}[% +%<package&identify> \KOMAScriptVersion\space package (type area)] +%<*driver> +\documentclass{scrdoc} +\usepackage[english,ngerman]{babel} +\usepackage[latin1]{inputenc} +\CodelineIndex +\RecordChanges +\GetFileInfo{scrktare.dtx} +\title{\KOMAScript{} \partname\ \texttt{\filename}% + \footnote{Dies ist Version \fileversion\ von Datei \texttt{\filename}.}} +\date{\filedate} +\author{Markus Kohm} + +\begin{document} + \maketitle + \tableofcontents + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \selectlanguage{ngerman} +% +% \changes{v2.95}{2002/06/20}{% +% erste Version aus der Aufteilung von \texttt{scrclass.dtx}} +% +% +% \section{Satzspiegel Makros} +% +% Dieser Abschnitt beinhaltet alle Makros, die für den Satzspiegel +% benötigt werden. Dies betrifft sowohl das Paket \textsf{typearea} +% als auch die Klassen. +% +% \StopEventually{\PrintIndex\PrintChanges} +% +% +% \subsection{Präambel} +% +% \iffalse +%<*package&identify> +% \fi +% +% Zuerst einmal zeigen, was das Paket ist: +% \begin{macrocode} +\typeout{% + Package typearea, \csname ver@typearea.sty\endcsname^^J% + \@spaces\@spaces\@spaces\@spaces\space\space + Copyright (C) Frank Neukam, 1992-1994^^J% + \@spaces\@spaces\@spaces\@spaces\space\space + Copyright (C) Markus Kohm, 1994-2002^^J% +} +% \end{macrocode} +% +% \iffalse +%</package&identify> +%<*option> +% \fi +% +% \subsection{Von den Optionen benötigte Befehle} +% +% Für das Paket +% \begin{macrocode} +%<*package> +% \end{macrocode} +% +% Zur Auswertung der Optionen werden einige Makros benötigt. Diese +% sind natürlich vor der Deklaration der Optionen bzw. vor der +% Auswertung der Optionen zu definieren. Ich mache das hier vor der +% Deklaration der Optionen. +% +% \begin{macro}{\SetDIVList} +% \changes{v2.1a}{1994/10/28}{neu} +% \changes{v2.6}{2000/01/04}{\cs{ta@divlist} enthält Werte für +% Schriftgrößen ab 1pt} +% Der Befehl \cs{SetDIVList} tut nichts weiter als die innere Variable +% für die schriftgrößenabhängige \emph{DIV}-Liste \cs{ta@divlist} neu +% zu definieren. Dabei können \emph{DIV}-Werte für Größen ab 10\,pt +% gesetzt werden. +% \begin{macrocode} +\newcommand*\SetDIVList[1]{\def\ta@divlist{{}{}{}{}{}{}{}{}{}#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\SetXDIVList} +% \changes{v2.6}{2000/01/04}{neu} +% Da mit \cs{SetDIVList} aus Kompatibilitätsgründen nur Werte für +% Größen ab 10\,pt gesetzt werden können, wird für Werte ab 1\,pt +% ein neuer Befehl benötigt. +% \begin{macrocode} +\newcommand*\SetXDIVList[1]{\def\ta@divlist{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{Length}{\ta@bcor} +% \changes{v2.2a}{1995/01/25}{Definition der Dimension wegen der +% Option \texttt{BCOR} vorgezogen} +% \changes{v2.7g}{2001/04/17}{\cs{newlength} and Stelle von +% \cs{newdimen} für die Definition verwendet} +% Dimension für die Bindekorrektur reservieren. Diese wird implizit +% zu 0\,pt initialisiert. +% \begin{macrocode} +\newlength{\ta@bcor} +% \end{macrocode} +% \end{Length} +% +% \begin{macro}{\ta@div} +% \changes{v2.2a}{1995/01/25}{Definition wegen der Option +% \texttt{DIV} vorgezogen} +% Zähler für \emph{DIV} reservieren. Dieser wird implizit zu 0 +% initialisiert. +% \begin{macrocode} +\newcount\ta@div +% \end{macrocode} +% \end{macro} +% +% Ab hier nun wieder Teile für Klassen und Paket: +% \begin{macrocode} +%</package> +%<*package|class> +% \end{macrocode} +% +% \begin{macro}{\@BCOR} +% \begin{macro}{\@@BCOR} +% \changes{v2.5}{1997/06/17}{Einzelzeichenscanner durch +% Mustererkennung ersetzt} +% Das Makro \cs{@BCOR} wird später benötigt, um die Option +% \texttt{BCOR\emph{BCOR}} zu erkennen. Die Option wird über ihr +% Muster erkannt. +% \begin{macrocode} +\newcommand*{\@BCOR}{\expandafter\@@BCOR\CurrentOption BCORBCOR\@@BCOR} +\newcommand*{\@@BCOR}{} +\def\@@BCOR #1BCOR#2BCOR#3\@@BCOR{% +% \end{macrocode} +% Handelt es sich um die Option \texttt{BCOR}, so ist der erste +% Parameter leer. +% \begin{macrocode} + \ifstr{#1}{}{% +% \end{macrocode} +% Außerdem ist der dritte Parameter dann \texttt{BCOR}. +% \begin{macrocode} + \ifstr{#3}{BCOR}{% +% \end{macrocode} +% Der zweite Parameter sollte dann die Größe enthalten. Ist dies +% nicht der Fall, wird ein Fehler gemeldet (Fehlerzeile ist dann +% \cs{ProcessOptions}). +% \begin{macrocode} +%<class> \PassOptionsToPackage{BCOR#2}{typearea}% +%<package> \ifdimen{#2}{\setlength{\ta@bcor}{#2}}{\scr@pti@nerr@r}% +% \end{macrocode} +% In allen anderen Fällen ist es nicht diese Option, dann wird ein +% Fehler ausgegeben. Stattdessen könnte hier auch auf weitere Optionen +% getestet werden. +% \begin{macrocode} + }{\scr@pti@nerr@r}% + }{\scr@pti@nerr@r}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@DIV} +% \begin{macro}{\@@DIV} +% \changes{v2.5}{1997/06/17}{Einzelzeichenscanner durch +% Mustererkennung ersetzt} +% Die grundsätzliche Funktion ist die gleiche wie bei \cs{@BCOR}, +% \cs{@@BCOR}. +% \begin{macrocode} +\newcommand*{\@DIV}{\expandafter\@@DIV\CurrentOption DIVDIV\@@DIV} +\newcommand*{\@@DIV}{} +\def\@@DIV #1DIV#2DIV#3\@@DIV{% + \edef\@tempa{#1}\ifx\@tempa\@empty + \edef\@tempa{#3}\def\@tempb{DIV}\ifx\@tempa\@tempb +%<class> \PassOptionsToPackage{DIV#2}{typearea}% +%<package> \ifnumber{#2}{\ta@div=#2\relax}{\scr@pti@nerr@r}% + \else\scr@pti@nerr@r\fi +% \end{macrocode} +% Der Unterschied liegt darin, dass bei einem Fehlschlag der +% Mustererkennung kein Fehler vorliegt, sondern u.\,U. noch auf +% \texttt{BCOR} getestet werden muss. +% \begin{macrocode} + \else\@BCOR\fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@headlines} +% \begin{macro}{\@@headlines} +% \changes{v2.7g}{2001/04/17}{neue Mustererkennung für die Anzahl +% der Kopfzeilen} +% Das Macro \cs{@headlines} wird benötigt, um die Option +% \texttt{headlines} zu erkennen. +% \begin{macrocode} +\newcommand{\@headlines}{% + \expandafter\@@headlines\CurrentOption headlines\@@headlines% +} +\newcommand*{\@@headlines}{} +\def\@@headlines #1headlines#2\@@headlines{ + \edef\@tempa{#2}\edef\@tempb{headlines}\ifx\@tempa\@tempb +%<class> \PassOptionsToPackage{#1headlines}{typearea} +%<package> \setlength{\@tempdima}{#1\baselineskip}% +%<package> \def\ta@hh{#1\baselineskip}% + \else\@DIV\fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% Zur Abwechslung geht es mit einem Teil weiter, den es nur bei den +% Klassen gibt: +% \begin{macrocode} +%</package|class> +%<*class> +% \end{macrocode} +% +% Jetzt gibt es wieder etwas, was nur für \textsf{typearea} benötigt +% wird. +% \begin{macrocode} +%</class> +%<*package> +% \end{macrocode} +% +% \begin{macro}{\x@paper} +% \begin{macro}{\x@@paper} +% \changes{v2.5}{1997/06/17}{neue Mustererkennung für die +% Papiergröße} +% Diese Makros werden ebenfalls später benötigt, wenn die Papiergröße +% festgelegt wird. +% \begin{macro}{\isopaper} +% \changes{v2.5}{1997/06/17}{neu} +% \changes{v2.95}{2002/12/03}{es sind auch Großbuchstaben erlaubt} +% Da das Makro \cs{isopaper} zur Berechnung unterschiedlicher +% ISO/DIN-Papierformate in der Mustererkennung für die Papiergröße +% benötigt wird, wurde dieses Makro ebenfalls vorgezogen. +% \begin{macrocode} +\newcommand\isopaper[2][a]{% +% \end{macrocode} +% Das Makro kennt zwei Parameter, von denen der erste und optionale +% die Grundgröße angibt. Die Angabe erfolgt über einen +% Buchstaben. Möglich sind +% \begin{description} +% \item[a] -- ISO/DIN-A-Format +% \item[b] -- ISO/DIN-B-Format +% \item[c] -- ISO/DIN-C-Format +% \item[d] -- ISO/DIN-D-Format +% \end{description} +% Der zweite Paremeter gibt dann die Skalierung an. +% +% Als Grundgröße wird jeweils die 0-Größe eingesetzt. +% \begin{macrocode} + \ifx a#1 + \setlength{\paperwidth}{841sp}% + \setlength{\paperheight}{1189sp}% + \else\ifx A#1 + \setlength{\paperwidth}{841sp}% + \setlength{\paperheight}{1189sp}% + \else\ifx b#1 + \setlength{\paperwidth}{1000sp}% + \setlength{\paperheight}{1414sp}% + \else\ifx B#1 + \setlength{\paperwidth}{1000sp}% + \setlength{\paperheight}{1414sp}% + \else\ifx c#1 + \setlength{\paperwidth}{917sp}% + \setlength{\paperheight}{1297sp}% + \else\ifx C#1 + \setlength{\paperwidth}{917sp}% + \setlength{\paperheight}{1297sp}% + \else\ifx d#1 + \setlength{\paperwidth}{771sp}% + \setlength{\paperheight}{1090sp}% + \else\ifx D#1 + \setlength{\paperwidth}{771sp}% + \setlength{\paperheight}{1090sp}% +% \end{macrocode} +% Wurde ein anderer Buchstabe angegeben, ist ein Fehler auszugeben. +% \changes{v2.5a}{1997/06/22}{Ausgabe der gewählten Papiergröße +% entfernt} +% \begin{macrocode} + \else + \PackageError{typearea}{% + Unknown ISO/DIN-papersize-letter #1% + }{% + There are only four defined paper scalings:\MessageBreak + a = ISO/DIN-A, b = ISO/DIN-B, c = ISO/DIN-C, + d = ISO/DIN-D\MessageBreak + Read KOMA-Script-documentation for further information.% + }% + \setlength{\paperwidth}{841sp}% + \setlength{\paperheight}{1189sp}% + \fi + \fi + \fi + \fi + \fi + \fi + \fi + \fi +% \end{macrocode} +% Es dürfte aufgefallen sein, dass bei der Größenfestlegung statt +% der Einheit "`mm"' die Einheit "`sp"' geschrieben wurde. Die Maße +% sind also um ein Vielfaches zu klein und müssen später noch mit +% 186468 multiplitziert werden, um auf Millimeter zu kommen. Dieser +% Trick ist jedoch notwendig, weil die Norm vorschreibt, dass bei der +% nun folgenden $n$-fachen Halbierung der Seiten ($n = +% \mathrm{Skalierung} + 1$) jeweils auf ganze Millimeter abgerundet +% werden muss. +% \begin{macrocode} + \@tempcnta=#2\relax + \@whilenum\@tempcnta>0 + \do{\setlength{\@tempdima}{\paperwidth} + \setlength{\paperwidth}{.5\paperheight} + \setlength{\paperheight}{\@tempdima} + \advance\@tempcnta by\m@ne + } +% \end{macrocode} +% Zum Schluß muss nun die genannte Multiplitkation erfolgen. Da +% "`mm"' kein ganzzahliges Vielfaches von "`sp"' ist, beinhaltet diese +% Multiplikation eigentlich einen Fehler und eine Abweichung von der +% Norm. Da jedoch "`sp"' die Rechengenauigkeit von {\TeX} darstellt, +% stellt auch die Angabe eines ganzzahligen Millimeterwertes bereits +% einen solchen Fehler dar. +% \begin{macrocode} + \multiply\paperwidth by186468 + \multiply\paperheight by186468 +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\iso@paper} +% \changes{v2.95}{2002/12/03}{neu (intern)} +% Ein ganz ähnlicher interner Befehl erhält den gesamten Namen des +% ISO-Papierformats als einziges Argument. +% \begin{macro}{\iso@@paper} +% \changes{v2.95}{2002/12/03}{neu (intern)} +% Dieses Argument wird dann über einen weiteren internen Befehl per +% Mustererkennung in den Kennbuchstaben und eine Zahl zerlegt. +% \begin{macrocode} +\newcommand*{\iso@paper}[1]{\expandafter\iso@@paper#1\@nil} +\newcommand*{\iso@@paper}{} +\def\iso@@paper#1#2\@nil{% + \@tempswafalse + \if #1a\@tempswatrue + \else\if #1A\@tempswatrue + \else\if #1b\@tempswatrue + \else\if #1B\@tempswatrue + \else\if #1c\@tempswatrue + \else\if #1C\@tempswatrue + \else\if #1d\@tempswatrue + \else\if #1D\@tempswatrue + \fi\fi\fi\fi\fi\fi\fi\fi + \if@tempswa + \ifnumber{#2}{\isopaper[#1]{#2}}{\@tempswafalse}% + \fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% Jetzt wird es wieder für alle interessant: +% \begin{macrocode} +%</package> +%<*package|class> +% \end{macrocode} +% +% Zurück zur Mustererkennung. Diese ist tatsächlich etwas einfacher +% als die in den beiden Fällen zuvor. +% \begin{macrocode} +\newcommand*{\x@paper}{% + \expandafter\x@@paper\CurrentOption paper\x@@paper% +} +\newcommand*{\x@@paper}{} +\def\x@@paper #1#2paper#3\x@@paper{% + \ifstr{#3}{paper}{% + \ifnumber{#2}{% + \ifstr{#1}{a}{% +%<class> \PassOptionsToPackage{#1#2#3}{typearea}% +%<package> \isopaper[a]{#2}% + }{% + \ifstr{#1}{b}{% +%<class> \PassOptionsToPackage{#1#2#3}{typearea}% +%<package> \isopaper[b]{#2}% + }{% + \ifstr{#1}{c}{% +%<class> \PassOptionsToPackage{#1#2#3}{typearea}% +%<package> \isopaper[c]{#2}% + }{% + \ifstr{#1}{d}{% +%<class> \PassOptionsToPackage{#1#2#3}{typearea}% +%<package> \isopaper[d]{#2}% + }{\scr@pti@nerr@r}% + }% + }% + }% + }{\scr@pti@nerr@r}% + }{% +%<class> \@pt@scan +%<package> \@headlines + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\scr@pti@nerr@r} +% \changes{v2.95}{2002/06/20}{\cs{OptionNotUsed} statt +% \cs{PackageError}} +% Falls die zuätzliche Option nicht \texttt{BCOR}, \texttt{DIV}, +% \texttt{headlines} oder eine bekannte Papiergröße ist, ist die +% Option nicht verwendet. +% \begin{macrocode} +\newcommand*{\scr@pti@nerr@r}{ +%<class> \OptionNotUsed +%<package> \@unknownoptionerror +} +% \end{macrocode} +% \end{macro} +% +% Vorerst das Ende der Gemeinsamkeiten. +% \begin{macrocode} +%</package|class> +%<*package> +% \end{macrocode} +% +% +% \subsection{Optionen mit \textsf{keyval}} +% +% \subsubsection{Kopf-, Fuß-, Rand- und Textbereich} +% +% \begin{option}{headlines} +% \changes{v3.0}{2002/12/06}{mit \textsf{keyval} neu implementiert} +% Neben der Auswertung der \meta{Wert}\texttt{headlines} Form über +% Pattern Matching wird hier auch noch eine \textsf{keyval}-Option +% definiert, die bevorzugt zu verwenden ist. +% \begin{macrocode} +\KOMA@key{headlines}{% + \begingroup + \setlength{\@tempdima}{#1\baselineskip}% + \endgroup + \def\ta@hh{#1\baselineskip}% +} +% \end{macrocode} +% \end{option} +% +% \begin{option}{headinclude} +% \changes{v2.95}{2002/07/08}{Verwendung von \textsf{scrkeyvl}} +% \begin{option}{headexclude} +% \changes{v2.95}{2002/07/08}{Verwendung von \textsf{scrkeyvl}} +% Diese Optionen bestimmen, ob der Seitenkopf bereits zum Textbereich +% gehört. +% \begin{macro}{\if@hincl} +% \changes{v2.95}{2002/07/08}{Verwendung von \textsf{scrkeyvl}} +% \begin{macro}{\@hincltrue} +% \begin{macro}{\@hinclfalse} +% Der Zustand selbst wird in einem Schalter gespeichert. +% \begin{macrocode} +\KOMA@ifkey{headinclude}{@hincl} +\KOMA@DeclareObsoleteOption[\PackageInfo]{headexclude}{% + headinclude=false% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{option} +% \end{option} +% +% \begin{option}{footinclude} +% \changes{v2.95}{2002/07/08}{Verwendung von \textsf{scrkeyvl}} +% \begin{option}{footexclude} +% \changes{v2.95}{2002/07/08}{Verwendung von \textsf{scrkeyvl}} +% Diese Optionen bestimmen, ob die Fußzeilen noch zum Textbereich +% gehören. +% \begin{macro}{\if@incl} +% \changes{v2.95}{2002/07/08}{Verwendung von \textsf{scrkeyvl}} +% \begin{macro}{\@fincltrue} +% \begin{macro}{\@finclfalse} +% Der Zustand selbst wird in einem Schalter gespeichert. +% \begin{macrocode} +\KOMA@ifkey{footinclude}{@fincl} +\KOMA@DeclareObsoleteOption[\PackageInfo]{footexclude}{% + footinclude=false% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{option} +% \end{option} +% +% \begin{option}{mpinclude} +% \changes{v2.8q}{2002/03/28}{neue Option} +% \changes{v2.95}{2002/07/08}{Verwendung von \textsf{scrkeyvl}} +% \begin{option}{mpexclude} +% \changes{v2.8q}{2002/03/28}{neue Option} +% \changes{v2.95}{2002/07/08}{Verwendung von \textsf{scrkeyvl}} +% Es gibt Dokumente mit sehr ausführlichen Randnotizen, bei denen die +% Randnotizen bei der Satzspiegelberechnung in den Satzspiegel +% eingerechnet werden sollten. Diese Optionen bestimmen, ob dies der +% Fall ist. +% \begin{macro}{\if@mincl} +% \changes{v2.95}{2002/07/08}{Verwendung von \textsf{scrkeyvl}} +% \begin{macro}{\@mincltrue} +% \begin{macro}{\@minclfalse} +% Der Zustand wird in einem Schalter gespeichert. \textbf{Achtung:} +% Bei Verwendung dieser Option müssen größere DIV-Werte verwendet +% werden. Siehe dazu weiter unten. +% \begin{macrocode} +\KOMA@ifkey{mpinclude}{@mincl} +\KOMA@DeclareObsoleteOption[\PackageInfo]{mpexclude}{% + mpinclude=false% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{option} +% \end{option} +% +% \begin{option}{BCOR} +% \changes{v2.2a}{1995/01/25}{neue Option} +% \changes{v2.95}{2002/12/04}{als \textsf{keyval}-Option +% implementiert} +% Der Wert wird einfach an die Länge \cs{ta@bcor} verfüttert, wobei +% symbolische Werte speziell behandelt werden, auch wenn sie beim +% Laden des Pakets absolut keinen Sinn ergeben! +% \begin{macrocode} +\KOMA@key{BCOR}{% + \edef\@tempa{#1}\edef\@tempb{current}\ifx\@tempa\@tempb\else + \setlength{\ta@bcor}{#1}% + \fi +} +% \end{macrocode} +% Wenn allerdings der Satzspiegel bereits berechnet ist, dann muss er +% hier stattdessen neu berechnet werden. +% \begin{macrocode} +\AtEndOfPackage{\KOMA@key{BCOR}{\typearea[{#1}]{last}}} +% \end{macrocode} +% \end{option} +% +% \begin{option}{DIV} +% \changes{v2.2a}{1995/01/25}{neue Option} +% \changes{v2.95}{2002/12/04}{als \textsf{keyval}-Option +% implementiert} +% Der Wert wird einfach an den Zähler \cs{ta@div} verfüttert, wobei +% symbolische Werte speziell behandelt werden. Dabei werden auch die +% Werte "`\texttt{last}"' und "`\texttt{current}"' ausgewertet, auch +% wenn diese beim Laden des Pakets absolut keinen Sinn ergeben! +% \begin{macrocode} +\KOMA@key{DIV}[calc]{% + \edef\@tempa{#1}% + \def\@tempb{last}\ifx\@tempa\@tempb\let\@tempa=\@lastdiv\fi + \def\@tempb{current}\ifx\@tempa\@tempb\else + \def\@tempb{default}\ifx\@tempa\@tempb\ta@div=0 \else + \def\@tempb{calc}\ifx\@tempa\@tempb\ta@div=2 \else + \def\@tempb{classic}\ifx\@tempa\@tempb\ta@div=3 \else + \ta@div=\@tempa + \fi + \fi + \fi + \fi +} +% \end{macrocode} +% Wenn allerdings der Satzspiegel bereits berechnet ist, dann muss er +% hier stattdessen neu berechnet werden. +% \begin{macrocode} +\AtEndOfPackage{\KOMA@key{DIV}{\typearea[current]{#1}}} +% \end{macrocode} +% \end{option} +% +% \begin{option}{DIVcalc} +% \changes{v2.4g}{1996/11/04}{neue Option} +% \changes{v2.95}{2002/12/04}{über Option \texttt{DIV} +% reimplementiert} +% \begin{option}{DIVclassic} +% \changes{v2.4n}{1997/05/28}{neue Option} +% \changes{v2.95}{2002/12/04}{über Option \texttt{DIV} +% reimplementiert} +% Dann gibt es da noch zwei alte Sonderfälle. +% \begin{macrocode} +\KOMA@DeclareObsoleteOption[\PackageInfo]{DIVcalc}{DIV=calc} +\KOMA@DeclareObsoleteOption[\PackageInfo]{DIVclassic}{DIV=classic} +% \end{macrocode} +% \end{option} +% \end{option} +% +% +% \subsubsection{Sonstige Satzspiegel-Optionen} +% +% Ein Teil der weiteren Satzspiegeloptionen gibt es nur bei den Klassen: +% \begin{macrocode} +%</package> +%<*class> +% \end{macrocode} +% +% \begin{option}{oneside} +% \begin{option}{twoside} +% Einseitiger oder zweiseitiger Satzspiegel? +% \begin{macrocode} +\KOMA@key{twoside}[true]{% + \KOMA@set@ifkey{twoside}{@twoside}{#1}% + \if@twoside\@mparswitchtrue\else\@mparswitchfalse\fi% + \csname recalctypearea\endcsname +} +\KOMA@DeclareObsoleteOption[\PackageInfo]{oneside}{twoside=false} +% \end{macrocode} +% \end{option} +% \end{option} +% +% Weitere Satzspiegeloptionen sind jedoch dem \textsf{typearea}-Paket +% zuzuordnen: +% \begin{macrocode} +%</class> +%<*package> +% \end{macrocode} +% +% \begin{option}{onecolumn} +% \changes{v2.95}{2002/12/04}{Option in das \textsf{typearea}-Paket +% verlagert} +% \begin{option}{twocolumn} +% \changes{v2.95}{2002/12/04}{Option in das \textsf{typearea}-Paket +% verlagert} +% Einspaltiger oder zweispaltiger Satz? +% \begin{macrocode} +\KOMA@key{twocolumn}[true]{% + \KOMA@set@ifkey{twocolumn}{@twocolumn}{#1}% + \csname recalctypearea\endcsname +} +\KOMA@DeclareObsoleteOption[\PackageInfo]{onecolumn}{twocolumn=false} +% \end{macrocode} +% \end{option} +% \end{option} +% +% +% \subsubsection{Ausgabeformat-Optionen} +% +% Diese Optionen arbeiten in Abhänigkeit des Ausgabeformats. +% +% \begin{option}{pagesize} +% \changes{v2.7g}{2001/04/17}{neue Option} +% \changes{v2.95}{2002/08/27}{neu implementiert} +% Diese Option ist nun das zentrale Element für die Übermittlung der +% Seitengröße an pdf\TeX, \texttt{dvips} oder V\TeX. Sie wird auch von +% den obsoleten Optionen verwendet. Die Werte und ihre Bedeutung: +% \begin{labeling}[~--]{\texttt{automedia}} +% \item[\texttt{auto}] Kombination aus den Optionen \texttt{pdftex} +% und \texttt{dvips}. +% \item[\texttt{automedia}] wie \texttt{auto} allerdings werden +% zusätzlich \cs{mediawidth} und \cs{mediaheight} gesetzt, falls +% sie definiert sind. +% \item[\texttt{dvips}] das \cs{special} für \texttt{dvips} wird +% ausgegeben, falls \texttt{dvi}-Ausgabe erwartet wird oder +% \cs{if@dvips} erfüllt ist. Führt zu einer Warnung, wenn sie mehr +% als einmal oder nach der Präambel verwendet wird. +% \item[\texttt{pdftex}] \cs{pdfpagewidth} und \cs{pdfpageheight} +% werden gesetzt, falls sie definiert sind. +% \end{labeling} +% \begin{macrocode} +\KOMA@key{pagesize}[auto]{% + \begingroup + \KOMA@set@ncmdkey{pagesize}{@tempa}{% + {auto}{0},{automedia}{1},{dvips}{2},{pdftex}{3}% + }{#1}% + \ifcase\number\@tempa\relax + \endgroup + \set@pdftexpagesize + \set@dvipspagesize + \or + \endgroup + \set@pdftexpagesize + \set@vtexpagesize + \set@dvipspagesize + \or + \endgroup + \set@dvipspagesize + \or + \endgroup + \set@pdftexpagesize + \fi + \edef\@pagesizelast{#1}% +} +% \end{macrocode} +% \begin{macro}{\set@pdftexpagesize} +% \changes{v2.95}{2002/08/27}{neu (intern)} +% \begin{macro}{\set@dvipspagesize} +% \changes{v2.95}{2002/08/27}{neu (intern)} +% \begin{macro}{\setnot@dvipspagesize} +% \changes{v2.95}{2002/08/27}{neu (intern)} +% \begin{macro}{\set@vtexpagesize} +% \changes{v2.95}{2002/08/27}{neu (intern)} +% Damit die Option \texttt{pagesize} überhaupt funktionieren kann, +% werden drei interne Makros benötigt. +% \begin{description} +% \item{Achtung:} die Definition dieser Makros ändert sich teilweise +% bei ihrem Aufruf und insgesamt bei +% \texttt{\cs{begin}\{document\}}. +% \end{description} +% \begin{macrocode} +\newcommand{\set@pdftexpagesize}{% + \AtBeginDocument{% + \ifnotundefined{pdfpagewidth}{\pdfpagewidth=\paperwidth}{}% + \ifnotundefined{pdfpageheight}{\pdfpageheight=\paperheight}{}% + }% + \let\set@pdftexpagesize=\@empty +} +\newcommand{\set@dvipspagesize}{% + \begingroup + \@tempswafalse + \scr@ifdvioutput{\@tempswatrue}{% + \ifnotundefined{if@dvips}{\let\if@tempswa\if@dvips}{}% + }% + \if@tempswa + \endgroup + \AtBeginDocument{\AtBeginDvi{% + \special{papersize=\the\paperwidth,\the\paperheight}% + }% + }% + \let\set@dvipspagesize=\setnot@dvipspagesize + \else + \endgroup + \fi +} +\newcommand{\setnot@dvipspagesize}{% + \scr@ifdvioutput{% + \PackageWarning{% + typearea% + }{% + With dvi output option `pagesize=auto',\MessageBreak + `pagesize=automedia' or `pagesize=dvips'\MessageBreak + may be used only once at preamble.\MessageBreak + Option ignored% + }% + }{}% +} +\newcommand{\set@vtexpagesize}{% + \AtBeginDocument{% + \ifnotundefined{mediawith}{\mediawidth=\paperwidth}{}% + \ifnotundefined{mediaheight}{\mediaheight=\paperheight}{}% + }% + \let\set@vtexpagesize=\@empty +} +\AtBeginDocument{ + \renewcommand*{\set@pdftexpagesize}{% + \ifnotundefined{pdfpagewidth}{\pdfpagewidth=\paperwidth}{}% + \ifnotundefined{pdfpageheight}{\pdfpageheight=\paperheight}{}% + }% + \let\set@dvipspagesize=\setnot@dvipspagesize + \renewcommand*{\set@vtexpagesize}{% + \ifnotundefined{mediawith}{\mediawidth=\paperwidth}{}% + \ifnotundefined{mediaheight}{\mediaheight=\paperheight}{}% + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{option} +% +% +% \begin{option}{dvips} +% \changes{v2.7g}{2001/04/17}{neue Option} +% \changes{v2.95}{2002/08/27}{neu implementiert} +% Die Option ist obsolete und wird nun über die Option +% \texttt{pagesize} implementiert. In diesem Fall wird eine Warnung +% verwendet, weil die Verwendung von \texttt{pagesize=dvips} selbst +% ebenfalls zu einer Warnung führen kann. +% \begin{macrocode} +\KOMA@DeclareObsoleteOption[\PackageWarning]{dvips}{% + pagesize=dvips% +} +% \end{macrocode} +% \end{option} +% +% \begin{option}{pdftex} +% \changes{v2.7g}{2001/04/17}{neue Option} +% \changes{v2.95}{2002/08/27}{neu implementiert} +% Die Option ist obsolete und wird nun über die Option +% \texttt{pagesize} implementiert. +% \begin{macrocode} +\KOMA@DeclareObsoleteOption[\PackageInfo]{pdftex}{% + pagesize=pdftex% +} +% \end{macrocode} +% \end{option} +% +% +% \subsubsection{Papiergrößen-Optionen} +% +% Die folgende Option bestimmt die Papiergröße und -ausrichtung. Aus +% der Papiergröße wird später mit \cs{typearea} der Satzspiegel +% berechnet. Darüber hinaus wäre das eine passende Gelegenheit +% \cs{SetDIVList} anzuwenden, darauf wird aber verzichtet, da die +% Verwendung der Liste ohnehin als veraltete Methode betrachtet werden +% kann. +% +% \begin{option}{a4paper} +% \begin{option}{a5paper} +% \begin{option}{b5paper} +% \begin{option}{letterpaper} +% \begin{option}{legalpaper} +% \begin{option}{executivepaper} +% \begin{option}{landscape} +% \begin{option}{portrait} +% Die Formate, die auch bei den Standardklassen definiert sind, werden +% als Sonderfall explizit definiert. Dadurch ist ein Wechsel der +% Klasse bzw. die Verwendung von \textsf{typearea} mit den +% Standardklassen einfacher. Aus Kompatibilitätsgründen werden auch +% die übrigen Papiergrößenoptionen später noch per Mustererkennung +% verarbeitet. +% \begin{macrocode} +\KOMA@DeclareObsoleteOption[\PackageInfo]{a4paper}{paper=a4} +\KOMA@DeclareObsoleteOption[\PackageInfo]{a5paper}{paper=a5} +\KOMA@DeclareObsoleteOption[\PackageInfo]{b5paper}{paper=b5} +\KOMA@DeclareObsoleteOption[\PackageInfo]{letterpaper}{paper=letter} +\KOMA@DeclareObsoleteOption[\PackageInfo]{legalpaper}{paper=legal} +\KOMA@DeclareObsoleteOption[\PackageInfo]{executivepaper}{paper=executive} +\KOMA@DeclareObsoleteOption[\PackageInfo]{landscape}{paper=landscape} +\KOMA@DeclareObsoleteOption[\PackageInfo]{portrait}{paper=portrait} +% \end{macrocode} +% \end{option} +% \end{option} +% \end{option} +% \end{option} +% \end{option} +% \end{option} +% \end{option} +% \end{option} +% +% \begin{option}{paper} +% \changes{v2.95}{2002/12/03}{neu implementiert} +% Im Normalfall wird die Papiergröße jedoch über diese Option +% gesetzt. Dabei sind neben den Standard- und den ISO-Reihen A, B, C +% und D auch Wertepaare der Form +% "`\texttt{(\meta{Breite},\meta{Höhe})}"' und die Angaben +% "`\texttt{portrait}"' und "`\texttt{landscape}"' erlaubt. +% \begin{macrocode} +\KOMA@key{paper}{% + \ifstr{#1}{landscape}{% + \if@landscape\else + \setlength{\@tempdima}{\paperwidth}% + \setlength{\paperwidth}{\paperheight}% + \setlength{\paperheight}{\@tempdima}% + \@landscapetrue + \fi + }{% + \ifstr{#1}{portrait}{% + \if@landscape + \setlength{\@tempdima}{\paperwidth}% + \setlength{\paperwidth}{\paperheight}% + \setlength{\paperheight}{\@tempdima}% + \@landscapefalse + \fi + }{% + \ifstr{#1}{letter}{% + \setlength\paperheight{11in}% + \setlength\paperwidth {8.5in}% + }{% + \ifstr{#1}{legal}{% + \setlength\paperheight{14in}% + \setlength\paperwidth {8.5in}% + }{% + \ifstr{#1}{executive}{% + \setlength\paperheight{10.5in}% + \setlength\paperwidth {7.25in}% + }{% + \iso@paper{#1}% + \if@tempswa\else + \expandafter\maybe@pair#1\scr@next + \if@tempswa + \setlength\paperheight{\@tempa}% + \setlength\paperwidth{\@tempb}% + \else + \KOMA@unknown@keyval{paper}{#1}{% + `letter', `legal', `executive', `a'<nr>, `b'<nr>, + `c'<nr>, `d'<nr>,\MessageBreak + `('<width>`,'<height>`)', `landscape' and `portrait'% + }% + \fi + \fi + }% + }% + }% + \if@landscape + \setlength{\@tempdima}{\paperwidth}% + \setlength{\paperwidth}{\paperheight}% + \setlength{\paperheight}{\@tempdima}% + \fi + }% + }% +} +% \end{macrocode} +% \begin{macro}{\if@landscape} +% \begin{macro}{\@landscapetrue} +% \begin{macro}{\@landscapefalse} +% In diesem Schalter wird gespeichert, ob Hoch- oder Breitformat +% verwendet wird. +% \begin{macrocode} +\newif\if@landscape +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{\maybe@pair} +% \changes{v2.95}{2002/12/03}{neu (intern)} +% Testet, ob der nachfolgende Parameter die Form +% "`(\meta{erstes Argument},\meta{zweites Argument})"' hat. +% \begin{macro}{\maybe@@pair} +% \changes{v2.95}{2002/12/03}{neu (intern)} +% Wenn ja, wird \cs{@tempa} mit dem ersten und \cs{@tempb} mit dem +% zweiten Argument definiert. +% \begin{macrocode} +\newcommand*{\maybe@pair}{% + \@ifnextchar (% + {\@tempswatrue\maybe@@pair}{\@tempswafalse\gobble@till@scr@next}% +} +\newcommand*{\maybe@@pair}{} +\def\@maybepair(#1,#2)\scr@next{\def\@tempa{#1}\def\@tempb{#2}}% +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{option} +% +% \begin{macrocode} +%</package> +% \end{macrocode} +% +% +% \iffalse +% Aber das gehört nicht mehr zu den Optionen. +%</option> +%<*body> +%<*package> +% \fi +% +% +% \subsubsection{Konfigurationsdatei} +% +% \changes{v2.0e}{1994/10/28}{Konfigurationsdatei +% \texttt{typearea.cfg} zur Definition weiterer Optionen +% bzw. Papiergrößen} +% Es ist möglich in einer Datei \texttt{typearea.cfg} z.\,B. weitere +% Optionen zu definieren, die dann automatisch eingeladen werden. +% \begin{macrocode} +\InputIfFileExists{typearea.cfg}{% + \typeout{% + ***************************************^^J% + * Local config file typearea.cfg used^^J% + ***************************************% + } +}{} +% \end{macrocode} +% +% +% \subsubsection{Keyval-Optionen aktivieren} +% +% Die Behandlung für \textsf{keyval}-Optionen sowie +% \texttt{BCOR\emph{Wert}}, \texttt{DIV\emph{Wert}} und +% \texttt{a\emph{Wert}paper}, \texttt{b\emph{Wert}paper}, +% \texttt{c\emph{Wert}paper} sowie \texttt{d\emph{Wert}paper} und +% \texttt{\emph{Wert}headlines}. +% \begin{macrocode} +\DeclareKeyValOption[\x@paper]{KOMA} +% \end{macrocode} +% +% +% \subsubsection{Standardoptionen} +% +% Als Standardoptionen sind \texttt{headinclude=false}, +% \texttt{footinclude=false} und die Papiergröße \texttt{paper=A4} +% eingestellt. Diese Optionen können selbstverständlich durch +% explizite Angaben überladen werden. +% \changes{v2.3h}{1995/01/19}{\cs{relax} nach \cs{ProcessOptions} +% ergänzt.} +% \begin{macrocode} +\KOMAoptions{headinclude=false,footinclude=false,paper=A4} +\ProcessAllOptions{KOMA} +% \end{macrocode} +% +% +% \subsection{Schriftgrößenabhängige Voreinstellungen für \emph{DIV}} +% +% \begin{macro}{\ta@divlist} +% \changes{v2.0e}{1994/10/28}{neu (intern)} +% \changes{v2.6}{2000/01/04}{die Liste umfasst nun Werte ab 1\,pt +% statt ab 10\,pt.} +% \begin{macro}{\ta@divlistelse} +% \changes{v2.6}{2000/01/04}{neu (intern)} +% An dieser Stelle muss noch für die Standardeinstellung der +% \textit{DIV}-Liste gesorgt werden, falls eine solche noch nicht +% definiert wurde. +% \begin{macrocode} +\providecommand\ta@divlist{{}{}{}{}{}{}{}{}{}{8}{10}{12}} +% \end{macrocode} +% \end{macro} +% Wenn kein Defaultwert definiert ist, wird dieser Wert verwendet: +% \begin{macrocode} +\providecommand\ta@divlistelse{1} +% \end{macrocode} +% \end{macro} +% +% +% Das waren die Optionen für das Paket oder im ersten Durchlauf der +% Klassen. +% \begin{macrocode} +%</package> +% \end{macrocode} +% +% +% \subsection{Laden des Pakets} +% +% Das Folgende wird nur in einem zweiten Durchlauf in die Klassen +% eingefügt und sorgt für das Laden des \textsf{typearea} Pakets. +% \begin{macrocode} +%<*class> +% \end{macrocode} +% Vor dem Laden müssen noch diverse Makros zurückgesetzt werden, damit +% sie überhaupt in \textsf{typearea} definiert werden können: +% \begin{macrocode} +\let\@BCOR =\relax +\let\@@BCOR =\relax +\let\@DIV =\relax +\let\@@DIV =\relax +\let\@headlines =\relax +\let\@@headlines =\relax +\let\x@paper =\relax +\let\x@@paper =\relax +\let\scr@pti@nerr@r =\relax +% \end{macrocode} +% Jetzt kann geladen werden: +% \changes{v2.95}{2002/06/22}{Beim Laden von \textsf{typearea} wird +% \cs{KOMAScriptVersion} verwendet} +% Die Überprüfung auf die korrekte \KOMAScript-Version geschieht in +% dem Paket (siehe dazu \texttt{scrkvers.dtx}). +% \begin{macrocode} +\RequirePackage{typearea}[\KOMAScriptVersion] +% \end{macrocode} +% Auf diese Art ist sichergestellt, dass immer die Version von +% \textsf{typearea} verlangt wird, die zur gleichen Release wie +% die Klassen gehört. Wobei die Warnungen je nach Zusammentreffen der +% Versionen unterschiedlich ausfallen können. +% +% \begin{macrocode} +%</class> +% \end{macrocode} +% +% +% Ab hier ist alles nur noch für das Paket. +% \begin{macrocode} +%<*package> +% \end{macrocode} +% +% \subsection{Einige interne Register} +% +% \begin{Length}{\ta@hblk} +% \begin{Length}{\ta@vblk} +% \begin{Length}{\ta@temp} +% Diese Größsenparameter und werden intern für verschiedene Befehle +% benötigt. (Die Zähler \cs{ta@bcor} und \cs{ta@div} werden bereits +% bei der Optionenauswertung benötigt und sind deshalb vorgezogen.) +% \begin{macrocode} +\newlength{\ta@hblk} +\newlength{\ta@vblk} +\newlength{\ta@temp} +% \end{macrocode} +% \end{Length} +% \end{Length} +% \end{Length} +% +% +% \subsection{Die Berechnung des Satzspiegels} +% +% \begin{macro}{\typearea} +% Die Berechnung des Satzspiegels, wie sie in der Anleitung +% beschrieben ist, findet mit Hilfe des Befehls \cs{typearea} statt, +% der hier definiert wird. Die Berechnung selbst benötigt mehreren +% Stufen. +% +% \begin{macro}{\@typearea} +% \changes{v2.4n}{1997/05/28}{eigentliche Satzspiegelberechnung in +% \cs{@typearea} ausgegliedert} +% \changes{v2.95}{2002/08/20}{\cs{selectfont} eingefügt} +% Die eigentliche Satzspiegelberechnung geschieht über das Hilfsmakro +% \cs{@typearea}, das dann auch von \cs{typearea} genutzt wird. Dieses +% Hilfsmakro benötigt keine Parameter, da diese bereits zuvor von +% \cs{typearea} in die entsprechenden Variablen geschrieben wurden. +% \begin{macrocode} +\newcommand*\@typearea{% +% \end{macrocode} +% Bevor irgend etwas anderes gemacht wird, sogen wir dafür, dass die +% gewählte Schrift auch gesetzt wird. Dies ist notwendig, falls jemand +% vor \cs{typearea} einen Befehl wie \cs{linespread} verwendet. +% \begin{macrocode} + \selectfont +% \end{macrocode} +% Zunächst werden die horizontalen Maße berechnet. Dazu wird als +% erstes die Größe einer horizontalen Längeneinheit (\emph{HLE}) +% ermittelt: +% \begin{macrocode} + \ta@hblk=\paperwidth + \advance \ta@hblk by-\ta@bcor + \divide\ta@hblk by\ta@div +% \end{macrocode} +% Die Größe des Bereichs für die Randnotizen ist ebenfalls von der +% Streifenbreite abhängig. +% \changes{v2.8q}{2002/03/28}{Textbreite berücksichtigt Option +% \texttt{mpinclude}} +% \begin{macrocode} + \if@mincl + \marginparwidth=\ta@hblk + \advance\marginparwidth by-\marginparsep + \else + \if@twoside + \marginparwidth=1.5\ta@hblk + \else + \marginparwidth=\ta@hblk + \fi + \fi +% \end{macrocode} +% Der linke und rechte Rand wird relativ zur benutzbaren Seitenbreite +% berechnet. Dabei muss auch der Rand berücksichtigt werden, der vom +% Druckertreiber standardmäßig hinzugefügt wird. Außerdem ist der +% Rand abhängig davon, ob es sich um ein einseitiges oder beidseitiges +% Layout handelt. Bei Option \texttt{mpinclude} sind im beidseitigen +% Satz zusätzlich die Randnotizen zu beachten. +% \begin{macrocode} + \oddsidemargin=-1in + \evensidemargin=-1in + \if@twoside + \advance\oddsidemargin by\ta@hblk + \advance\oddsidemargin by\ta@bcor + \advance\evensidemargin by2\ta@hblk + \if@mincl + \advance\evensidemargin by\marginparwidth + \advance\evensidemargin by\marginparsep + \fi + \else + \advance\oddsidemargin by1.5\ta@hblk + \advance\oddsidemargin by\ta@bcor + \evensidemargin=\oddsidemargin + \fi +% \end{macrocode} +% Der Rest steht nun für den Textbereich zur Verfügung: +% \begin{macrocode} + \textwidth=\paperwidth + \advance\textwidth by-\ta@bcor + \advance\textwidth by-3\ta@hblk +% \end{macrocode} +% Falls die Randnotizen für die Satzspiegelberechnung zum Textbereich +% gehören, müssen sie zusammen mit ihrem Abstand vom Text nun von +% diesem abgezogen werden. Es wird dabei davon ausgegangen, dass die +% Randnotizen immer außen gesetzt werden. Sollte der Textbereich für +% Randnotizen zu schmal sein, so wird der Bereich der Randnotizen so +% lange verkleinert, bis dies nicht mehr der Fall ist. Am einfachsten +% geht dies, indem gegebenfalls die Breiten vertauscht werden. +% \begin{macrocode} + \if@mincl + \advance\textwidth by-\marginparwidth + \advance\textwidth by-\marginparsep + \ifdim\textwidth <\marginparwidth + \PackageWarningNoLine{typearea}{% + Width of text (\the\textwidth) less than width of\MessageBreak + marginpar (\the\marginparwidth) while using option\MessageBreak + `mpinclude'.\MessageBreak + Because of this, I'm exchanging the values.\MessageBreak + You should increase DIV to avoid such problems.\MessageBreak + }% + \@tempskipa=\marginparwidth + \marginparwidth=\textwidth + \textwidth=\@tempskipa + \fi + \fi +% \end{macrocode} +% Danach folgen die vertikalen Maße. Auch dafür wird zunächst die Höhe +% eines Streifens benötigt. +% \begin{macrocode} + \ta@vblk=\paperheight + \divide\ta@vblk by\ta@div +% \end{macrocode} +% Davon ausgehend kann der obere Rand berechnet werden, wobei zu +% berücksichtigen ist, dass {\TeX} diesen selbständig um ein Inch +% vergrößert. +% \begin{macrocode} + \topmargin=-1in + \advance\topmargin by\ta@vblk +% \end{macrocode} +% Außerdem ist zu berücksichtigen, ob der Kopf zum Textbereich oder +% zum Rand gehört. +% \begin{macrocode} + \if@hincl \else + \advance\topmargin by-\headheight + \advance\topmargin by-\headsep + \fi +% \end{macrocode} +% Bei der Berechnung des Textbereichs sind von der Papierhöhe die +% Ränder abzuziehen und es ist ebenfalls zu berücksichtigen, ob Kopf- +% und Fuß zu den Rändern oder zum Textbereich selbst gezählt werden. +% \begin{macrocode} + \ta@temp=\paperheight + \advance\ta@temp by-3\ta@vblk + \if@hincl + \advance\ta@temp by-\headheight + \advance\ta@temp by-\headsep + \fi + \if@fincl + \advance\ta@temp by-\footskip + \fi +% \end{macrocode} +% Als Sonderbedingung ist dann noch zu beachten, dass die Größse des +% Textbereichs nicht zu einer vertikalen Aufweitung führt. +% \begin{macrocode} + \textheight=\topskip + \@whiledim\textheight <\ta@temp + \do{\advance\textheight by\baselineskip}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ta@modiv} +% Dieses Hilfsmakro wird weiter unten benötigt. Es dividiert den +% ersten Parameter durch den zweiten und liefert das gerundete +% Ergebnis in \cs{ta@div} zurück. Für die Berechnung werden +% \cs{@tempdima} und \cs{@tempdimb} verwendet. +% \begin{macrocode} +\newcommand*\ta@modiv[2]{ + \setlength{\@tempdima}{#1} + \divide\@tempdima by#2 + \ta@div\@tempdima + \ifnum \ta@div<4 + \ta@div=4 + \else + \setlength{\@tempdimb}{#1}% + \divide\@tempdimb by\ta@div + \addtolength{\@tempdima}{\@tempdima}% + \addtolength{\@tempdima}{-\@tempdimb}% + \advance\ta@div by\@ne + \setlength{\@tempdimb}{#1}% + \divide\@tempdimb by\ta@div +% \end{macrocode} +% \changes{v2.5a}{1997/06/22}{\cs{ifdim} statt \cs{ifnum}} +% \begin{macrocode} + \ifdim \@tempdima<\@tempdimb + \advance\ta@div by\m@ne + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ta@temp@goodwidth} +% Dieses Makro setzt die Hilfdimension \cs{ta@temp} auf den Wert einer +% optimalen Zeilenbreite in der aktuellen Schrift. Voraussetzung für +% diese Berechnung ist, dass Zeilenbreiten von ca. 66 bis 72 Zeichen +% optimal sind. Zur Vereinfachung wird mit dem Mittelwert 69 +% gerechnet. Eine solche Zeile besteht dann aus 66 durchschnittlichen +% Klein- und 3 durchschnittlichen Großbuchstaben. +% \changes{v2.7i}{2001/05/17}{Berechnung ist robuster gegen +% arithmetischen Überlauf bei sehr großen Schriften} +% \changes{v2.8q}{2002/03/06}{\cs{normalfont} \cs{normalsize} +% hinzugefügt} +% \changes{v2.95a}{2006/07/20}{Berechnung für große Schriften korrigiert} +% \begin{macrocode} +\newcommand*\ta@temp@goodwidth{% + \settowidth{\ta@temp}{\normalfont\normalsize + abcdefghijklmnopqrstuvwxyz}% + \ifdim\ta@temp >200\p@ + \setlength{\ta@temp}{2.53846\ta@temp}% + \settowidth{\@tempdima}{\normalfont\normalsize + ABCDEFGHIJKLMNOPQRSTUVWXYZ}% + \setlength{\@tempdima}{.11538\@tempdima}% + \addtolength{\ta@temp}{\@tempdima}% + \else + \multiply\ta@temp by66 + \settowidth{\@tempdima}{\normalfont\normalsize + ABCDEFGHIJKLMNOPQRSTUVWXYZ}% + \multiply\@tempdima by3 + \addtolength{\ta@temp}{\@tempdima}% + \divide\ta@temp by26 + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@typearea@end} +% Das Makro \cs{@typearea@end} wird verwendet, um mit einem gewaltigen +% Hack die Änderung des Satzspiegels innerhalb eines Dokuments zu +% ermöglichen. Es wird daher erst am Anfang des Dokuments definiert. +% \begin{macrocode} +\AtBeginDocument{% + \newcommand\@typearea@end{% +% \end{macrocode} +% Als erstes wird jedoch eine Warnung ausgegeben, weil es wirklich sehr +% unsauber ist, so zu verfahren. Das ganze ist absolut abhängig von der +% \LaTeX-Version. +% \begin{macrocode} + \PackageWarning{typearea}{% + Typearea changed!\MessageBreak + You should do this only at preamble, because only\MessageBreak + \protect\begin{document} calculates output dimensions!\MessageBreak + Trying to calculate new output dimensions, but\MessageBreak + this is only a dirty hack}% +% \end{macrocode} +% Dann können endlich die Dimensionen, die z.\,B. von der Ausgaberoutine +% benötigt werden, neu berechnet werden. +% \begin{macrocode} + \@colht=\textheight + \@colroom=\textheight + \vsize=\textheight + \columnwidth=\textwidth + \if@twocolumn + \advance\columnwidth by-\columnsep + \divide\columnwidth by\tw@ + \hsize=\columnwidth + \@firstcolumntrue + \fi + \hsize=\columnwidth + \linewidth\hsize + \ifundefined{@pagesizelast}{}{\KOMAoptions{pagesize=\@pagesizelast}}% + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ta@divfor} +% Der Standardseitenspiegel ist abhängig von den mit \cs{SetDIVList} +% vorgegebenen Einstellungen. Dazu muss aus einer eventuell +% vorhandenen inneren Liste \cs{ta@divlist} der von der Schriftgröße +% abhängige \textit{DIV}-Wert ausgelesen werden. Dies geschieht mit +% Hilfe des \cs{ta@divfor}-Befehls, der sich wiederum einiger interner +% Befehle zur Listenbearbeitung bedient. +% \changes{v2.4g}{1996/11/04}{Satzspiegel wird nicht mehr direkt +% berechnet, sondern nur der \textit{DIV}-Wert aus der +% Defaultliste ermittelt} +% \changes{v2.6}{2000/01/04}{Berücksichtigung der erweiterten +% Liste} +% \changes{v2.8q}{2002/03/28}{Berücksichtigung der Option +% `mpinclude'} +% \begin{macrocode} +\newcommand*{\ta@divfor}[1]{% + \if@mincl + \PackageInfo{typearea}{% + With option `mpinclude' there are no predefined\MessageBreak + DIV-values. Using DIV calculation for good line\MessageBreak + width% + }% + \ta@div=2 + \else + \xdef\@tempa{\ta@divlist{}}% + \ta@div=#1\relax + \@whilenum \ta@div >-9 \do {% + \ifx\@tempa\empty + \else \xdef\@tempa{\expandafter\@cdr\@tempa\@nil}\fi + \advance\ta@div by-1 + }% + \ifx\@tempa\empty +% \end{macrocode} +% Wenn keine Voreinstellung gefunden werden konnte, so wird immer +% der Optimalwert berechnet. Mit einer Warnung wird darauf +% hingewiesen. +% \begin{macrocode} + \ta@div=10 \advance\ta@div by#1 + \PackageWarningNoLine{typearea}{% + DIV for \the\ta@div pt and used papersize\MessageBreak + not defined!\MessageBreak + Using DIV=\ta@divlistelse + }% + \ta@div=\ta@divlistelse\relax + \else +% \end{macrocode} +% Ansonsten wird der vorgegebene Wert verwendet. +% \begin{macrocode} + \xdef\@tempa{\expandafter\@car\@tempa\@nil}% + \ifx\@tempa\empty + \ta@div=\ta@divlistelse\relax + \else + \ta@div=\@tempa\relax + \fi + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% +% \changes{v2.4g}{1996/11/04}{überflüssigen Kommentar gelöscht} +% \changes{v2.7g}{2001/04/17}{die neuen Werte \texttt{current}, +% \texttt{default}, \texttt{calc}, \texttt{classic} werden +% verstanden} +% \changes{v2.8q}{2001/11/06}{der Wert \texttt{last} wird +% verstanden} +% Die symbolischen Werte für das obligatorische Argument von +% \cs{typearea} haben folgende Bedeutung: +% \begin{center}\begin{tabular}{lll} +% Symbol & Wert & Bedeutung \\\hline\\[-2ex] +% \texttt{calc} & 2 & guten Wert berechnen \\ +% \texttt{classic} & 3 & mittelalterlicher Buchseitenkanon \\ +% \texttt{current} & --- & aktuellen Wert beibehalten \\ +% \texttt{default} & 0 & Wert aus der Liste verwenden \\ +% \texttt{last} & --- & Argument des letzten Aufrufs verwenden \\ +% \texttt{areaset} & --- & Satzspiegel beibehalten nur neu anordnen \\ +% \end{tabular}\end{center} +% Das optionale Argument kennt hingegen nur den symbolischen Wert +% \texttt{current}. +% \begin{macrocode} +\newcommand*\typearea[2][\z@]{% + \edef\@tempa{#1}\edef\@tempb{current}\ifx\@tempa\@tempb\else + \setlength{\ta@bcor}{#1}% + \fi + \edef\@tempa{#2}% + \def\@tempb{last}\ifx\@tempa\@tempb\let\@tempa=\@lastdiv + \ifx\csname @tempa\endcsname\relax + \def\@tempa{current}% + \fi + \fi + \def\@tempb{areaset}\ifx\@tempa\@tempb + \areaset[current]{\textwidth}{\textheight}% + \else + \def\@tempb{current}\ifx\@tempa\@tempb\else + \def\@tempb{default}\ifx\@tempa\@tempb\ta@div=0 \else + \def\@tempb{calc}\ifx\@tempa\@tempb\ta@div=2 \else + \def\@tempb{classic}\ifx\@tempa\@tempb\ta@div=3 \else + \ta@div=\@tempa + \fi + \fi + \fi + \fi + \edef\@lastdiv{\the\ta@div}% +% \end{macrocode} +% Bevor nun irgendeine Berechnung durchgeführt wird, muss ggf. eine +% neue Seite begonnen werden. Außerdem wird sichergestellt, dass die aktuelle +% Schriftgröße die Grundschriftgröße ist und auch mit dem aktuellen +% Durchschuss gerechnet wird. +% \changes{v2.95a}{2006/07/20}{Grundschriftgröße einstellen} +% \begin{macrocode} + \if@atdocument\newpage\fi + \normalsize +% \end{macrocode} +% Nun muss festgestellt werden, ob die Höhe des Kopfbereichs bereits +% vorgegeben ist, oder ob diese selbst berechnet werden soll. Im Falle +% der Berechnung wird als Höhe für den Kopf das 1,25-Fache des +% Grundzeilenabstandes gewählt. Damit sollte auch noch genug Raum für die +% optionale Trennlinie vorhanden sein. +% \changes{v2.4n}{1997/05/28}{berechnete Kopfhöhe vom +% Grundzeilenabstand abhängig} +% \begin{macrocode} + \@ifundefined{ta@hh}{% + \headheight=1.25\baselineskip + }{% + \headheight=\ta@hh + }% +% \end{macrocode} +% Auch der Abstand zwischen Kopf und Text ist immer +% gleich. Verschiedene Typographen geben hier verschiedene Werte +% an. Ein guter Wert sollte erreicht werden, wenn dadurch eine +% Kopfzeile in das normale Zeilenraster eingepasst wird. Der Abstand +% soll aber auch nicht zu groß, werden. Optimal ist angeblich ein Wert +% von einer Zeile. Dies führt jedoch zu einem klaren Konflikt bei +% unterstrichenen Kopfzeilen. Deshalb wird ein Kompromiss gebildet. +% \begin{macrocode} + \headsep=1.5\baselineskip +% \end{macrocode} +% Es folgen die restlichen von \textit{DIV} und \textit{BCOR} +% unabhängigen Werte. +% \begin{macrocode} + \footskip=3.5\baselineskip + \marginparsep=1cc + \marginparpush=0.45\baselineskip +% \end{macrocode} +% \changes{v2.4g}{1996/11/04}{\textit{DIV}=0 versucht den Wert aus +% der Default-Liste zu verwenden} +% Vor der eigentlichen Berechnung des Satzspiegels wird nun zunächst +% überprüft, ob der übergebene \textit{DIV}-Wert 0 ist. Da Werte von 0 +% bis 3 nicht möglich sind (Minimum sind drei Teile Rand und ein Teil +% Text), wird der Wert 0 dafür verwendet, den Defaultwert aus der +% Liste zu ermitteln, falls ein solcher vorhanden ist. +% \changes{v2.5h}{1999/12/29}{Text der Warnung korrigiert} +% \begin{macrocode} + \ifnum\ta@div=\z@ + \@ifundefined{@ptsize}{% + \@tempdima=\f@size pt + \advance\@tempdima by.5pt + \ta@div=\@tempdima + \divide\ta@div by65536 + \advance\ta@div by-10 + \xdef\@ptsize{\the\ta@div}% + \PackageWarningNoLine{typearea}{% + \string\@ptsize\space not defined!\MessageBreak + Fontsize ist \f@size.\MessageBreak + Defining \string\@ptsize\space to \@ptsize% + }% + }{}% + \ta@divfor{\@ptsize}% + \fi +% \end{macrocode} +% \changes{v2.4n}{1997/05/28}{optionale, klassische Kreisberechnung +% für \texttt{DIV}} +% Als zweiter Sonderfall wird für einen \textit{DIV}-Wert von 3 die +% \emph{Kreisberechnung} durchgeführt. Dabei wird versucht, den +% Textbereich genau so hoch zu wählen, wie das Papier breit ist. Ein +% solches Verhältnis wird bei klassischen Papierformaten als +% harmonisch betrachtet. +% \begin{macrocode} + \ifnum\ta@div=3 + \typeout{DIV calculation for classic typearea.}% + \setlength{\ta@temp}{\paperwidth}% + \addtolength{\ta@temp}{-\ta@bcor}% +% \end{macrocode} +% Bei der Berechnung des vertikal benötigten Platzes, ist zu +% beachten, ob Kopf und Fuß zum Textbereich oder zu den Rändern +% gehören. +% \begin{macrocode} + \if@hincl\else + \addtolength{\ta@temp}{\headheight}% + \addtolength{\ta@temp}{\headsep}% + \fi + \if@fincl\else + \addtolength{\ta@temp}{\footskip}% + \fi +% \end{macrocode} +% Wird vertikal mehr Platz benötigt, als vorhanden ist, wird eine +% andere Berechnung versucht, die weiter unten erfolgt. +% \changes{v2.5a}{1997/06/22}{\cs{ifdim} statt \cs{ifnum}} +% \begin{macrocode} + \ifdim \ta@temp >\paperheight + \PackageWarningNoLine{typearea}{% + No classic typearea with this papersize!\MessageBreak + Using calculated DIV% + }% + \ta@div=\@ne +% \end{macrocode} +% Ansonsten wird mittels des belegten Textbereichs und der Papierhöhe +% der obere und untere Rand zusammen, +% \begin{macrocode} + \else + \setlength{\ta@temp}{\paperheight}% + \addtolength{\ta@temp}{-\paperwidth}% + \addtolength{\ta@temp}{\ta@bcor}% +% \end{macrocode} +% daraus die Streifenhöhe +% \begin{macrocode} + \divide\ta@temp by3 +% \end{macrocode} +% und schließlich erneut mit Hilfe der Papierhöhe der genaue +% \textit{DIV}-Wert berechnet. +% \begin{macrocode} + \ta@modiv{\paperheight}{\ta@temp}% + \fi +% \end{macrocode} +% An dieser Stelle muss \texttt{mpinclude} nicht berücksichtigt +% werden, da nicht die Breite des Textbereichs, sondern die Breite des +% Papiers als Kriterium verwendet wird. +% \begin{macrocode} + \fi +% \end{macrocode} +% Wurde bisher kein Wert gefunden oder ein \textit{DIV}-Wert von 1 bis +% 2 angegeben, so wird nun ein möglichst optimaler \textit{DIV}-Wert +% ermittelt. +% \changes{v2.4n}{1997/05/28}{optimale \textit{DIV}-Berechnung +% verbessert} +% \begin{macrocode} + \ifnum\ta@div <4 + \typeout{DIV calculation for typearea with good linewidth.}% +% \end{macrocode} +% Zunächst könnte die Textbreite die gesamte Sichtbare Papierbreite +% einnehmen: +% \begin{macrocode} + \setlength{\textwidth}{\paperwidth}% + \addtolength{\textwidth}{-\ta@bcor}% +% \end{macrocode} +% Als Sollbreite wird hier die ideale Zeilenfüllung verwendet: +% \begin{macrocode} + \ta@temp@goodwidth +% \end{macrocode} +% Im Zweispaltenmodus besteht jede Zeile aus zwei solchen Spalten +% zuzüglich dem Spaltenabstand: +% \changes{v2.8q}{2001/12/13}{\texttt{DIVcalc} liefert im +% zweispaltigen Satz (wie dokumentiert) breitere Spalten} +% \begin{macrocode} + \if@twocolumn + \addtolength{\ta@temp}{\ta@temp}% + \addtolength{\ta@temp}{\columnsep}% + \fi +% \end{macrocode} +% In früheren Versionen erfolgte nun eine iterative Annäherung an den +% optimalen \textit{DIV}-Wert. Je nach {\TeX}-Implementierung und +% Papierformat, kann das aber recht lange dauern. Die obere Berechnung +% zum Vorbild nehmend, wird deshalb nun ebenfalls versucht, den +% optimalen Wert direkt zu berechnen. Dazu wird zunächst wie oben die +% Größe der horizontalen Ränder zusammen ermittelt: +% \begin{macrocode} + \setlength{\ta@hblk}{\paperwidth}% + \addtolength{\ta@hblk}{-\ta@temp}% +% \end{macrocode} +% Daraus dann die Breite eines Streifens. +% \begin{macrocode} + \divide\ta@hblk by3 +% \end{macrocode} +% Ist die Breite negativ, so wird die Mindestbreite von 5mm eingesetzt. +% \changes{v2.5a}{1997/06/22}{\cs{ifdim} statt \cs{ifnum}.} +% \begin{macrocode} + \ifdim \ta@hblk <\z@ + \setlength{\ta@hblk}{5mm}% + \fi +% \end{macrocode} +% Nun kann wieder der \textit{DIV}-Wert ermittelt werden. +% \changes{v2.8q}{2002/03/28}{Berüchsichtigung von Option +% \texttt{mpinclude} bei der \textit{DIV}-Berechnung} +% Im Falle der Option \texttt{mpinclude} gilt allgemein, dass +% der Nenner mit $\frac{3}{3+m}$ zu multiplizieren ist. Dabei ist $m$ +% die Anzahl an Längeneinheiten, die für die Randnotizen verwendet +% werden sollen. Mit $m=1$ ist also der Faktor $\frac{3}{4}=0.75$ zu +% verwenden. Schwieriger wird es, wenn hier nicht die Anzahl +% Längeneinheiten, sondern ein konkreter Wert für die Breite der +% Randnotizen verwendet wird. +% \begin{macrocode} + \if@mincl + \setlength{\ta@temp}{.75\ta@hblk}% + \else + \setlength{\ta@temp}{\ta@hblk}% + \fi + \ta@modiv{\paperwidth}{\ta@temp}% +% \end{macrocode} +% Als Erschwernis kommt jetzt jedoch hinzu, dass nun zwar der +% \textit{DIV}-Wert für die Breite optimal ist, jedoch u.\,U. zu einer +% zu großen Höhe führt. Deshalb wird zunächst ein Satzspiegel für +% diesen \textit{DIV}-Wert berechnet. +% \begin{macrocode} + \@typearea +% \end{macrocode} +% Nun wird überprüft, ob die vertikalen Ausmaße in Ordnung sind. Auch +% hier ist wieder eine minimale Streifenbreite vorteilhaft. Die +% Streifenbreite ergibt sich direkt aus dem oberen Rand. Wobei jedoch +% noch das {\TeX}-Offset von 1\,in zu berücksichtigen ist. +% \changes{v2.5a}{1997/06/22}{\cs{ifdim} statt \cs{ifnum}} +% \begin{macrocode} + \setlength{\ta@temp}{-1in}% + \addtolength{\ta@temp}{5mm}% + \ifdim\topmargin <\ta@temp +% \end{macrocode} +% Ist der Minimalrand nicht eingehalten, so wird für diesen ein neuer +% \textit{DIV}-Wert ermittelt. Dabei muss ebenfalls berücksichtigt +% werden, ob Kopf- und Fußbereich zum Text oder zum Rand gehören. +% \changes{v2.5b}{1997/06/29}{bei der Mindestrandbetrachtung +% \texttt{headinclude} und \texttt{footinclude} berücksichtigen} +% \begin{macrocode} + \setlength{\ta@temp}{15mm}% + \if@hincl\else + \addtolength{\ta@temp}{\headheight}% + \addtolength{\ta@temp}{\headsep}% + \fi + \if@fincl\else + \addtolength{\ta@temp}{\footskip}% + \fi + \divide\ta@temp by3 + \ta@modiv{\paperheight}{\ta@temp}% + \fi +% \end{macrocode} +% Dieser Sonderfall ist somit abschließend behandelt. +% \begin{macrocode} + \fi +% \end{macrocode} +% Damit steht jetzt also der \textit{DIV}-Wert fest, und die +% eigentliche Berechnung kann folgen. +% \begin{macrocode} + \@typearea +% \end{macrocode} +% \changes{v2.0e}{1994/10/28}{Seitenaufteilung wird in die log-Datei +% geschrieben} +% \changes{v2.4i}{1996/11/11}{Seitenaufteilung wird etwas später in +% die log-Datei geschrieben} +% \changes{v2.4i}{1996/11/11}{am Ende von \cs{typearea} wird noch +% \cs{@typeare@end} ausgeführt} +% \changes{v2.4j}{1996/12/04}{bei der Seitenaufteilung wird +% \cs{textheight} nicht mehr doppelt, dafür zusätzlich +% \cs{baselineskip} ausgegeben} +% \changes{v2.5}{1997/06/17}{"`arithmetic overflow"' bei landscape +% behoben} +% \changes{v2.95}{2004/01/30}{Warnung im Zweispaltenmodus korrigiert} +% Zum Schluss soll die Seitenaufteilung noch in die \texttt{log}-Datei +% geschrieben werden. +% \begin{macrocode} + \ta@temp@goodwidth + \if@twocolumn + \addtolength{\ta@temp}{\ta@temp}% + \addtolength{\ta@temp}{\columnsep}% + \fi + \setlength{\@tempdima}{\ta@temp}% + \addtolength{\ta@temp}{-\textwidth}% + \divide\@tempdima by100 + \divide\ta@temp by\@tempdima + \@tempcnta=\ta@temp + \ifnum\@tempcnta <5 + \ifnum\@tempcnta >-5 + \@tempcnta=0 + \else + \advance\@tempcnta by4 + \fi + \else + \advance\@tempcnta by-4 + \fi + \ifnum\@tempcnta <-15 + \PackageWarningNoLine{typearea}{% + Bad DIV-value!\MessageBreak + You should e.g. decrease DIV, increase fontsize\MessageBreak + or change papersize% + }% + \else + \ifnum\@tempcnta>15 + \PackageWarningNoLine{typearea}{% + Bad DIV-value!\MessageBreak + You should e.g. increase DIV, decrease fontsize\MessageBreak + or change papersize% + } + \fi\fi + \ifnum\ta@div <6 + \PackageWarningNoLine{typearea}{% + Very low DIV-value!\MessageBreak + DIV-values less than 6 result in textwidth/-height\MessageBreak + smaller than total marginwidth/-height.\MessageBreak + You should e.g. increase DIV, increase fontsize or\MessageBreak + change papersize% + } + \fi + \PackageInfo{typearea}{% + These are the values describing the layout:\MessageBreak + DIV\space\space=\space\number\ta@div\MessageBreak + BCOR\space=\space\the\ta@bcor\MessageBreak + \string\paperwidth\space\space\space\space\space\space=% + \space\the\paperwidth\MessageBreak + \space\string\textwidth\space\space\space\space\space\space=% + \space\the\textwidth\MessageBreak + \space DIV-departure\space\space\space=% + \space\the\@tempcnta/100\MessageBreak + \space\string\evensidemargin\space=% + \space\the\evensidemargin\MessageBreak + \space\string\oddsidemargin\space\space=% + \space\the\oddsidemargin\MessageBreak + \string\paperheight\space\space\space\space\space=% + \space\the\paperheight\MessageBreak + \space\string\textheight\space\space\space\space\space=% + \space\the\textheight\MessageBreak + \space\string\topmargin\space\space\space\space\space\space=% + \space\the\topmargin\MessageBreak + \space\string\headheight\space\space\space\space\space=% + \space\the\headheight\MessageBreak + \space\string\headsep\space\space\space\space\space\space\space\space=% + \space\the\headsep\MessageBreak + \space\string\topskip\space\space\space\space\space\space\space\space=% + \space\the\topskip\MessageBreak + \space\string\footskip\space\space\space\space\space\space\space=% + \space\the\footskip\MessageBreak + \space\string\baselineskip\space\space\space=% + \space\the\baselineskip\MessageBreak + }% + \if@atdocument\@typearea@end\fi + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\recalctypearea} +% \changes{v2.95}{2002/12/04}{Neu} +% Dieses Anweisung dient der Neuberechnung des Satzspiegels mit den +% zuletzt eingestellten Werten. Dieser Befehl existiert erst, nachdem +% das Paket geladen wurde. +% \begin{macrocode} +\AtEndOfPackage{\newcommand*{\recalctypearea}{\typearea[current]{last}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\areaset} +% \changes{v2.1b}{1994/12/31}{\cs{headheight} von \cs{@ptsize} +% abhängig gemacht} +% \changes{v2.6}{2000/01/04}{\cs{headheight} von \cs{f@size} statt +% von \cs{@ptsize} abhängig gemacht} +% \changes{v2.7g}{2001/04/17}{auch hier existiert der symbolische +% Wert \texttt{current} für BCOR} +% \changes{v2.95}{2002/12/05}{am Ende von \cs{areaset} wird noch +% \cs{@typeare@end} ausgeführt} +% Zur Berechnung eines Satzspiegels mit fester Breite und Höhe dient +% der Befehl \cs{areaset}. Der Algorithmus ist ähnlich dem vorherigen +% Verfahren, aber einfacher. Auch hier soll ein Wechsel innerhalb des +% Dokuments ermöglicht werden. +% \begin{macrocode} +\newcommand*\areaset[3][\z@]{% + \edef\@tempa{#1}\edef\@tempb{current}\ifx\@tempa\@tempb\else + \setlength{\ta@bcor}{#1}% + \fi +% \end{macrocode} +% Bevor nun irgendeine Berechnung durchgeführt wird, muss ggf. eine +% neue Seite begonnen werden. +% \begin{macrocode} + \if@atdocument\newpage\fi +% \end{macrocode} +% Erst dann folgt die eigentlich Berechnung: +% \begin{macrocode} + \setlength{\textwidth}{#2}% + \setlength{\textheight}{#3}% + \def\@lastdiv{areaset}% + \ta@hblk=\paperwidth + \advance\ta@hblk by-\ta@bcor + \advance\ta@hblk by-\textwidth + \divide\ta@hblk by3 + \oddsidemargin=-1in + \evensidemargin=-1in + \if@twoside + \advance\oddsidemargin by\ta@hblk + \advance\oddsidemargin by\ta@bcor + \advance\evensidemargin by2\ta@hblk + \else + \advance\oddsidemargin by1.5\ta@hblk + \advance\oddsidemargin by\ta@bcor + \evensidemargin\oddsidemargin + \fi + \headheight=15\p@ + \advance\headheight by\f@size\p@ + \advance\headheight by-10\p@ + \headsep=1.5\baselineskip + \footskip=3.5\baselineskip + \ta@vblk=\paperheight + \advance\ta@vblk by-\textheight + \divide\ta@vblk by3 + \if@hincl + \advance\textheight by-\headheight + \advance\textheight by-\headsep + \fi + \if@fincl + \advance\textheight by-\footskip + \fi + \topmargin \ta@vblk + \advance\topmargin by-1in + \if@hincl \else + \advance\topmargin by-\headheight + \advance\topmargin by-\headsep + \fi + \if@twoside + \marginparwidth=1.5\ta@hblk + \else + \marginparwidth=\ta@hblk + \fi + \marginparsep=1cc + \marginparpush=0.45\baselineskip + \if@atdocument\@typearea@end\fi +} +% \end{macrocode} +% \end{macro} +% +% +% \subsection{Berechnung des Standardsatzspiegels} +% +% \changes{v2.8q}{2001/11/06}{Initialisierung mit Hilfe der +% symbolischen Werte \texttt{current}} +% Nun fehlt nur noch die eigentliche Initialisierung. Dazu wird +% einfach der Satzspiegel mit den getroffenen Voreinstellungen +% berechnet. Da der \textit{DIV}-Wert 0 für einen Wert aus der +% Default-Liste steht, bleibt die Kompatibilität zu älteren Versionen +% erhalten. Der aktuelle Wert für \textit{DIV} und \textit{BCOR} wurde +% über die Optionen bereits gesetzt. Dabei kann abweichend zu sonst +% der aktuelle Wert auch 0, 1, 2 oder 3 sein. Die Initialisierung des +% Pakets ist damit sehr einfach. +% \begin{macrocode} +\typearea[current]{current} +% \end{macrocode} +% +% \iffalse +%</package> +%</body> +% \fi +% +% \Finale +% +\endinput +% +% end of file `scrktare.dtx' +%%% Local Variables: +%%% mode: doctex +%%% TeX-master: t +%%% End: |