% \CheckSum{2087} % \iffalse meta-comment % ====================================================================== % scrktare.dtx % Copyright (c) Markus Kohm, 2002-2012 % % 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.3c of the license. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.3c 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-2012 % % Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz, % Version 1.3c, verteilt und/oder veraendert werden. % Die neuste Version dieser Lizenz ist % http://www.latex-project.org/lppl.txt % und Version 1.3c 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}[2012/04/17 v3.11 KOMA-Script (type area)] % \iffalse % %\ProvidesPackage{typearea}[% % \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} % % \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 %<*class|package> %<*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-^^J% } % \end{macrocode} % % \iffalse % %<*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 Teile für Klassen und Paket: % \begin{macrocode} % % \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} % \PassOptionsToPackage{BCOR#2}{typearea}% % \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 % \PassOptionsToPackage{DIV#2}{typearea}% % \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 % \PassOptionsToPackage{#1headlines}{typearea} % \setlength{\@tempdima}{#1\baselineskip}% % \def\ta@hh{#1\baselineskip}% \else\@DIV\fi } % \end{macrocode} % \end{macro} % \end{macro} % % Jetzt kommt ein Stück, das nur im Paket benötigt wird. % \begin{macrocode} %<*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} % Jetzt noch die gewünschte Ausrichtung beachten. % \changes{v2.97e}{2007/10/23}{gewünschte Papierausrichtung wird beachtet} % \begin{macrocode} \if@landscape \setlength{\@tempdima}{\paperwidth}% \setlength{\paperwidth}{\paperheight}% \setlength{\paperheight}{\@tempdima}% \fi } % \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} % % \end{macrocode} % % Zurück zur Mustererkennung. Diese ist tatsächlich etwas einfacher % als die in den beiden Fällen zuvor. % \changes{v2.97e}{2007/10/23}{Optionen werden nach der neuen Syntax an % typearea weitergeleitet} % \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}{% % \PassOptionsToPackage{#3=#1#2}{typearea}% % \isopaper[a]{#2}% }{% \ifstr{#1}{b}{% % \PassOptionsToPackage{#3=#1#2}{typearea}% % \isopaper[b]{#2}% }{% \ifstr{#1}{c}{% % \PassOptionsToPackage{#3=#1#2}{typearea}% % \isopaper[c]{#2}% }{% \ifstr{#1}{d}{% % \PassOptionsToPackage{#3=#1#2}{typearea}% % \isopaper[d]{#2}% }{\scr@pti@nerr@r}% }% }% }% }{\scr@pti@nerr@r}% }{% % \@pt@scan % \@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}{ % \OptionNotUsed % \@unknownoptionerror } % \end{macrocode} % \end{macro} % % Jetzt wieder nur für Pakete: % \begin{macrocode} %<*package> % \end{macrocode} % % \subsection{Optionen mit \textsf{keyval}} % % \subsubsection{Kopf-, Fuß-, Rand- und Textbereich} % % \begin{option}{headlines} % \changes{v2.95}{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}{headheight} % \changes{v2.98c}{2008/04/06}{neue Option} % Manchmal ist es nützlicher, wenn man die Höhe direkt setzen kann, statt sie % über die Anzahl der Grundlinien zu setzen. In dem Fall nimmt man einfach % diese Option. % \begin{macrocode} \KOMA@key{headheight}{% \begingroup \setlength{\@tempdima}{#1}% \endgroup \def\ta@hh{#1}% } % \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}} % \changes{v2.97d}{2007/10/03}{\cs{PackageInfo} durch \cs{PackageInfoNoLine} % ersetzt} % \changes{v3.01a}{2008/11/21}{deprecated} % 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}} % \changes{v2.97c}{2007/04/19}{direkte Initialisierung über \cs{if@hsl}, % falls definiert} % \begin{macro}{\@hincltrue} % \begin{macro}{\@hinclfalse} % Der Zustand selbst wird in einem Schalter gespeichert. % \begin{macrocode} \newif\if@hincl\@ifundefined{if@hsl}{}{\let\if@hincl\if@hsl} \KOMA@ifkey{headinclude}{@hincl} \KOMA@DeclareDeprecatedOption[typearea]{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}} % \changes{v2.97d}{2007/10/03}{\cs{PackageInfo} durch \cs{PackageInfoNoLine} % ersetzt} % \changes{v3.01a}{2008/11/21}{deprecated} % Diese Optionen bestimmen, ob die Fußzeilen noch zum Textbereich % gehören. % \begin{macro}{\if@fincl} % \changes{v2.95}{2002/07/08}{Verwendung von \textsf{scrkeyvl}} % \changes{v2.97c}{2007/04/19}{direkte Initialisierung über \cs{if@fsl}, % falls definiert} % \begin{macro}{\@fincltrue} % \begin{macro}{\@finclfalse} % Der Zustand selbst wird in einem Schalter gespeichert. % \begin{macrocode} \newif\if@fincl\@ifundefined{if@fsl}{}{\let\if@fincl\if@fsl} \KOMA@ifkey{footinclude}{@fincl} \KOMA@DeclareDeprecatedOption[typearea]{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}} % \changes{v2.97d}{2007/10/03}{\cs{PackageInfo} durch \cs{PackageInfoNoLine} % ersetzt} % \changes{v3.01a}{2008/11/21}{deprecated} % 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@DeclareDeprecatedOption[typearea]{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} % \changes{v2.97d}{2007/10/03}{\cs{PackageInfo} durch \cs{PackageInfoNoLine} % ersetzt} % \changes{v3.01a}{2008/11/21}{standard statt obsolet} % \begin{option}{DIVclassic} % \changes{v2.4n}{1997/05/28}{neue Option} % \changes{v2.95}{2002/12/04}{über Option \texttt{DIV} reimplementiert} % \changes{v2.97d}{2007/10/03}{\cs{PackageInfo} durch \cs{PackageInfoNoLine} % ersetzt} % \changes{v3.01a}{2008/11/21}{standard statt obsolet} % Dann gibt es da noch zwei alte Sonderfälle. % \begin{macrocode} \KOMA@DeclareDeprecatedOption[typearea]{DIVcalc}{DIV=calc} \KOMA@DeclareDeprecatedOption[typearea]{DIVclassic}{DIV=classic} % \end{macrocode} % \end{option} % \end{option} % % % \begin{option}{areasetadvanced} % \changes{v3.11}{2012/04/17}{new internal option} % Switch to advanced version of \cs{areaset}. This does calculate margins % more like \cs{typearea}. Nevertheless, there's still a difference at the top % margin, because \cs{typerea} doesn't balance differences in calculated % height of margins and resulting height of margins but reduces only the % bottom margin. % \begin{macrocode} \KOMA@ifkey{areasetadvanced}{@areasetadvanced} % \end{macrocode} % \end{option} % % % \subsubsection{Sonstige Satzspiegel-Optionen} % % \begin{option}{oneside} % \changes{v2.97e}{2007/11/23}{auf vielfachen Wunsch reicht die Klasse die % Option an das Paket weiter} % \changes{v3.01a}{2008/11/21}{standard statt obsolet} % \begin{option}{twoside} % \changes{v2.97d}{2007/10/03}{\cs{PackageInfo} durch \cs{PackageInfoNoLine} % ersetzt} % \changes{v2.97e}{2007/11/23}{auf vielfachen Wunsch reicht die Klasse die % Option an das Paket weiter} % \changes{v3.00}{2008/07/09}{die Option kennt zusätzlich den Wert % \texttt{semi}} % \begin{macro}{if@semitwoside} % \changes{v3.00}{2008/07/09}{neuer Schalter (intern)} % \begin{macro}{if@twoside} % \changes{v3.00}{2008/07/09}{Schalter setzt auch \cs{if@semitwoside}} % Einseitiger oder zweiseitiger Satzspiegel? % \begin{macrocode} \newif\if@semitwoside \g@addto@macro\@twosidetrue\@semitwosidefalse \g@addto@macro\@twosidefalse\@semitwosidefalse % % \end{macrocode} % \end{macro} % \end{macro} % \begin{macrocode} \KOMA@key{twoside}[true]{% % \if@atdocument\else\PassOptionsToPackage{twoside=#1}{typearea}\fi% %<*package> \if@atdocument\if@twoside\cleardoublepage\else\clearpage\fi\fi \ifstr{#1}{semi}{% \@twosidetrue \@semitwosidetrue }{% \def\FamilyElseValue{, `semi'}% \KOMA@set@ifkey{twoside}{@twoside}{#1}% }% \if@twoside \if@semitwoside \@mparswitchfalse \else \@mparswitchtrue \fi \else \@mparswitchfalse \fi% \csname recalctypearea\endcsname % } \KOMA@DeclareStandardOption% % [typearea]% {oneside}{twoside=false} %<*package> % \end{macrocode} % \end{option} % \end{option} % % \begin{option}{onecolumn} % \changes{v2.95}{2002/12/04}{Option in das \textsf{typearea}-Paket % verlagert} % \changes{v2.97d}{2007/10/03}{\cs{PackageInfo} durch \cs{PackageInfoNoLine} % ersetzt} % \changes{v2.97e}{2007/11/23}{auf vielfachen Wunsch reicht die Klasse die % Option an das Paket weiter} % \changes{v3.01a}{2008/11/21}{standard statt obsolet} % \begin{option}{twocolumn} % \changes{v2.95}{2002/12/04}{Option in das \textsf{typearea}-Paket % verlagert} % \changes{v2.97e}{2007/11/23}{auf vielfachen Wunsch reicht die Klasse die % Option an das Paket weiter} % \changes{v2.98a}{2007/01/08}{es wird die richtige Option an das Paket % weitergereicht} % Einspaltiger oder zweispaltiger Satz? % \begin{macrocode} % \KOMA@key{twocolumn}[true]{% % \if@atdocument\else\PassOptionsToPackage{twocolumn=#1}{typearea}\fi% %<*package> \if@atdocument\clearpage\fi \KOMA@set@ifkey{twocolumn}{@twocolumn}{#1}% \csname recalctypearea\endcsname % } \KOMA@DeclareStandardOption% % [typearea]% {onecolumn}{twocolumn=false} %<*package> % \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} % \changes{v3.02c}{2009/02/14}{neuer Wert \texttt{false}} % \changes{v3.05a}{2010/03/18}{neuer Wert \texttt{dvipdfmx}} % 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{dvipdfmx}] das \cs{special} für \texttt{dvipdfmx} wird % ausgegeben, falls \texttt{dvi}-Ausgabe erwartet wird. % \item[\texttt{false}] die automatische Anpassung bei Änderungen innerhalb % des Dokuments abschalten. % \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}{% {off}{-1},{no}{-1},{false}{-1},% {auto}{0},{automedia}{1},{dvips}{2},{pdftex}{3},{dvipdfmx}{4}% }{#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 \or \endgroup \set@dvipdfmxpagesize \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)} % \changes{v3.02c}{2009/02/13}{\texttt{seascape} wird beachtet} % \changes{v3.02c}{2009/02/14}{funktioniert auch im Dokument} % \begin{macro}{\setnot@dvipspagesize} % \changes{v2.95}{2002/08/27}{neu (intern)} % \begin{macro}{\set@dvipdfmxpagesize} % \changes{v3.05a}{2010/03/18}{neu (intern)} % \begin{macro}{\set@vtexpagesize} % \changes{v2.95}{2002/08/27}{neu (intern)} % \begin{macro}{\scr@updatedvipspagesize} % \changes{v3.02c}{2009/02/14}{neu (intern)} % Damit die Option \texttt{pagesize} überhaupt funktionieren kann, % werden einige 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}% \if@seascape\special{! TeXDict begin /landplus90{true}store end }\fi }% }% \ifnum \scr@compatibility>\@nameuse{scr@v@3.02b}\relax \let\set@dvipspagesize=\@empty \else \let\set@dvipspagesize=\setnot@dvipspagesize \fi \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@dvipdfmxpagesize}{% \scr@ifdvioutput{% \AtBeginDocument{\AtBeginDvi{% \special{papersize=\the\paperwidth,\the\paperheight}% }% }% }{}% } \newcommand{\set@vtexpagesize}{% \AtBeginDocument{% \ifnotundefined{mediawith}{\mediawidth=\paperwidth}{}% \ifnotundefined{mediaheight}{\mediaheight=\paperheight}{}% }% \let\set@vtexpagesize=\@empty } \newcommand*{\scr@updatedvipspagesize}{% \special{ps::\@percentchar\@percentchar PageBoundingBox: 0 0 \the\numexpr\paperwidth/\dimexpr 1bp\relax\relax \space \the\numexpr\paperheight/\dimexpr 1bp\relax\relax^^J% \@percentchar\@percentchar BeginPageSetup^^J% << /PageSize [\the\numexpr\paperwidth/\dimexpr 1bp\relax\relax\space \the\numexpr\paperheight/\dimexpr 1bp\relax\relax] >> setpagedevice^^J%<< 0 0 bop^^J% \@percentchar\@percentchar EndPageSetup}% } \AtBeginDocument{% \renewcommand*{\set@pdftexpagesize}{% \ifnotundefined{pdfpagewidth}{\pdfpagewidth=\paperwidth}{}% \ifnotundefined{pdfpageheight}{\pdfpageheight=\paperheight}{}% }% \ifnum \scr@compatibility>\@nameuse{scr@v@3.02b}\relax \renewcommand*{\set@dvipspagesize}{% \scr@ifundefinedorrelax{AtNextShipout}{% \scr@ifundefinedorrelax{AtBeginShipoutNext}{% \begingroup \protected@edef\reserved@a{\endgroup \scr@updatedvipspagesize}\reserved@a }{% % \end{macrocode} % Wenn \textsf{atbegshi} geladen wurde, bzw. \cs{AtBeginShipoutNext} zur % Verfügung steht, dann soll dieser Code noch vor Code ausgeführt werden, der % eventuell in \cs{shipout} eingeschleust wurde. Das funktioniert leider nicht % wirklich zuverlässig. Sollte zwischen dem Aufruf von \cs{set@dvipspagesize} % (also der Neuberechnung des Satzspiegels) und der Ausgabe der Seite doch % noch etwas per \cs{AtBeginShipout} oder \cs{AtBeginShipoutNext} eingefügt % werden, dann gehen diese Teile verloren! % \begin{macrocode} \begingroup \protected@edef\reserved@a{\endgroup \protect\AtBeginShipoutNext{% \protect\bgroup \protect\global\protect\setbox\AtBeginShipoutBox\protect\vbox{% \scr@updatedvipspagesize \protect\box\AtBeginShipoutBox }% \protect\egroup }}\reserved@a }% }{% % \end{macrocode} % Wenn \textsf{everyshi} geladen wurde, bzw. \cs{AtNextShipout} zur % Verfügung steht, dann soll dieser Code noch vor Code ausgeführt werden, der % eventuell in \cs{shipout} eingeschleust wurde. Das funktioniert leider nicht % wirklich zuverlässig. Sollte zwischen dem Aufruf von \cs{set@dvipspagesize} % (also der Neuberechnung des Satzspiegels) und der Ausgabe der Seite doch % noch etwas per \cs{AtNextShipout} oder \cs{EveryShipout} eingefügt % werden, dann gehen diese Teile verloren! % \begin{macrocode} \begingroup \protected@edef\reserved@a{\endgroup \protect\AtNextShipout{% \protect\bgroup \protect\global\protect\setbox\protect\@cclv\protect\vbox{% \scr@updatedvipspagesize \protect\box\protect\@cclv }% \protect\egroup }}\reserved@a }% }% \else \let\set@dvipspagesize=\setnot@dvipspagesize \fi \renewcommand*{\set@dvipdfmxpagesize}{% \scr@ifdvioutput{% \special{papersize=\the\paperwidth,\the\paperheight}% }{}% }% \renewcommand*{\set@vtexpagesize}{% \ifnotundefined{mediawith}{\mediawidth=\paperwidth}{}% \ifnotundefined{mediaheight}{\mediaheight=\paperheight}{}% }% } % \end{macrocode} % \end{macro} % \end{macro} % \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} % \changes{v2.98c}{2008/04/09}{Ersatz geändert} % \changes{v2.98c}{2008/04/09}{Info statt Warnung} % \changes{v3.01a}{2008/11/21}{standard statt obsolet} % Die Option ist obsolete und wird nun über die Option % \texttt{pagesize} implementiert. Obwohl die Verwendung von % \texttt{pagesize=automedia} zu einer Warnung führen kann, wird hier nur % informiert. % \begin{macrocode} \KOMA@DeclareStandardOption[typearea]{dvips}{% pagesize=automedia% } % \end{macrocode} % \end{option} % % \begin{option}{pdftex} % \changes{v2.7g}{2001/04/17}{neue Option} % \changes{v2.95}{2002/08/27}{neu implementiert} % \changes{v2.97d}{2007/10/03}{\cs{PackageInfo} durch \cs{PackageInfoNoLine} % ersetzt} % \changes{v3.01a}{2008/11/21}{standard statt obsolet} % Die Option ist obsolete und wird nun über die Option % \texttt{pagesize} implementiert. % \begin{macrocode} \KOMA@DeclareStandardOption[typearea]{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} % \changes{v2.97d}{2007/10/03}{\cs{PackageInfo} durch \cs{PackageInfoNoLine} % ersetzt} % \changes{v3.01a}{2008/11/21}{standard statt obsolet} % \begin{option}{a5paper} % \changes{v2.97d}{2007/10/03}{\cs{PackageInfo} durch \cs{PackageInfoNoLine} % ersetzt} % \changes{v3.01a}{2008/11/21}{standard statt obsolet} % \begin{option}{b5paper} % \changes{v2.97d}{2007/10/03}{\cs{PackageInfo} durch \cs{PackageInfoNoLine} % ersetzt} % \changes{v3.01a}{2008/11/21}{standard statt obsolet} % \begin{option}{letterpaper} % \changes{v2.97d}{2007/10/03}{\cs{PackageInfo} durch \cs{PackageInfoNoLine} % ersetzt} % \changes{v3.01a}{2008/11/21}{standard statt obsolet} % \begin{option}{legalpaper} % \changes{v2.97d}{2007/10/03}{\cs{PackageInfo} durch \cs{PackageInfoNoLine} % ersetzt} % \changes{v3.01a}{2008/11/21}{standard statt obsolet} % \begin{option}{executivepaper} % \changes{v2.97d}{2007/10/03}{\cs{PackageInfo} durch \cs{PackageInfoNoLine} % ersetzt} % \changes{v3.01a}{2008/11/21}{standard statt obsolet} % \begin{option}{landscape} % \changes{v2.97d}{2007/10/03}{\cs{PackageInfo} durch \cs{PackageInfoNoLine} % ersetzt} % \changes{v3.01a}{2008/11/21}{standard statt obsolet} % \begin{option}{portrait} % \changes{v2.97d}{2007/10/03}{\cs{PackageInfo} durch \cs{PackageInfoNoLine} % ersetzt} % \changes{v3.01a}{2008/11/21}{standard statt obsolet} % 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@DeclareStandardOption[typearea]{a4paper}{paper=a4} \KOMA@DeclareStandardOption[typearea]{a5paper}{paper=a5} \KOMA@DeclareStandardOption[typearea]{b5paper}{paper=b5} \KOMA@DeclareStandardOption[typearea]{letterpaper}{paper=letter} \KOMA@DeclareStandardOption[typearea]{legalpaper}{paper=legal} \KOMA@DeclareStandardOption[typearea]{executivepaper}{paper=executive} \KOMA@DeclareStandardOption[typearea]{landscape}{paper=landscape} \KOMA@DeclareStandardOption[typearea]{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} % \changes{v3.01b}{2008/12/09}{Höhe und Breite vertauscht} % \changes{v3.02c}{2009/02/12}{neuer Wert \texttt{seascape}} % 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}{seascape}{% \@seascapetrue \if@landscape\else \setlength{\@tempdima}{\paperwidth}% \setlength{\paperwidth}{\paperheight}% \setlength{\paperheight}{\@tempdima}% \@landscapetrue \fi }{% \ifstr{#1}{landscape}{% \@seascapefalse \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}{% \if@landscape \setlength\paperheight{8.5in}% \setlength\paperwidth {11in}% \else \setlength\paperheight{11in}% \setlength\paperwidth {8.5in}% \fi }{% \ifstr{#1}{legal}{% \if@landscape \setlength\paperheight{8.5in}% \setlength\paperwidth {14in}% \else \setlength\paperheight{14in}% \setlength\paperwidth {8.5in}% \fi }{% \ifstr{#1}{executive}{% \if@landscape \setlength\paperheight{7.25in}% \setlength\paperwidth {10.5in}% \else \setlength\paperheight{10.5in}% \setlength\paperwidth {7.25in}% \fi }{% \iso@paper{#1}% \if@tempswa\else \expandafter\maybe@pair#1::\@nil \if@tempswa \ifnum \scr@ta@compatibility<\@nameuse{scr@v@3.01b}\relax \PackageWarningNoLine{typearea}{% You may have to exchange height and width!\MessageBreak Until KOMA-Script version 3.01b the semantic\MessageBreak of option `paper' was `paper=height:width'\MessageBreak instead of `paper=width:height'.\MessageBreak I've switched back to that old interpretation\MessageBreak because of the given compatiblity settings}% \setlength\paperheight{\@tempa}% \setlength\paperwidth{\@tempb}% \else \setlength\paperwidth{\@tempa}% \setlength\paperheight{\@tempb}% \fi \else \KOMA@unknown@keyval{paper}{#1}{% `letter', `legal', `executive', `a', `b', `c', `d',\MessageBreak `:', `landscape' and `portrait'% }% \fi \fi }% }% }% }% }% }% } % \end{macrocode} % \begin{macro}{\if@seascape} % \changes{v3.02c}{2009/02/12}{neu} % \begin{macro}{\@seascapetrue} % \changes{v3.02c}{2009/02/12}{neu} % \begin{macro}{\@seascapefalse} % \changes{v3.02c}{2009/02/12}{neu} % In diesem Schalter wird nur gespeichert, ob Breitformat ggf. umgekehrt % verwendet werden soll. Dies macht derzeit nur bei Verwendung von dvips einen % Unterschied! % \begin{macrocode} \newif\if@seascape % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \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)} % \changes{v2.97e}{2007/11/26}{funktioniert zum ersten Mal} % Testet, ob der nachfolgende Parameter die Form % "`\meta{erstes Argument}:\meta{zweites Argument}"' hat. % Wenn ja, wird \cs{@tempa} mit dem ersten und \cs{@tempb} mit dem % zweiten Argument definiert. % \begin{macrocode} \newcommand*{\maybe@pair}{} \def\maybe@pair#1:#2:#3\@nil{% \edef\@tempa{#1}\edef\@tempb{#2}% \ifx\@tempa\@empty\@tempswafalse\else \ifx\@tempb\@empty\@tempswafalse\else\@tempswatrue\fi \fi } % \end{macrocode} % \end{macro} % \end{option} % % \begin{macrocode} % % \end{macrocode} % % % \subsubsection{Geparste Optionen} % % Die Behandlung für \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}. % \changes{v2.97c}{2007/09/12}{\cs{lco@test} bei den geparsten Optionen % eingefügt} % \begin{macrocode} \DeclareOption*{% % \lco@test \x@paper} % \end{macrocode} % % \iffalse % Der Rest gehört nicht mehr zu den Optionen. % %<*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{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.} % \changes{v2.96}{2006/08/18}{Optionen werden in Reihenfolge der Angabe statt % in Reihenfolge der Deklaration abgearbeitet.} % \changes{v2.97c}{2007/04/19}{Verwendung von \cs{KOMAExecuteOptions} an % Stelle von \cs{KOMAoptions} und \cs{KOMAProcessOptions} an Stelle von % \cs{ProcessOptions}} % \changes{v2.97c}{2007/04/19}{Optionen, die der Voreinstellung ohnehin % entsprechen, werden nicht explizit gesetzt} % \changes{v2.97c}{2007/07/18}{Option \texttt{twoside} wird explizit passend % gesetzt} % \begin{macrocode} \KOMAExecuteOptions{paper=A4} \if@twoside \if@semitwoside \KOMAExecuteOptions{twoside=semi} \else \KOMAExecuteOptions{twoside} \fi \else \KOMAExecuteOptions{twoside=false} \fi \KOMAProcessOptions\relax % \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} % % \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} % % \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 \if@semitwoside \marginparwidth=\ta@hblk \else \marginparwidth=1.5\ta@hblk \fi \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 \if@semitwoside \advance\oddsidemargin by1.5\ta@hblk \advance\oddsidemargin by\ta@bcor \evensidemargin=\oddsidemargin \else \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 \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. % \changes{v2.96}{2006/09/12}{\cs{topskip} wird gesetzt} % \changes{v2.97c}{2007/07/04}{\cs{maxdepth} wird gesetzt} % \begin{macrocode} \scr@ifundefinedorrelax{@ptsize}{% \topskip=\f@size\p@ }{% \topskip=\@ptsize\p@ \advance\topskip by 10\p@ }% \maxdepth=.5\topskip \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}{\AfterCalculatingTypearea} % \changes{v2.96a}{2006/11/29}{neu} % Neuerdings besteht die Möglichkeit, auf Benutzerebene das Verhalten von % \cs{typearea} zu beeinflussen. In der Sternvariante wird dabei lokal % gearbeitet. % \begin{macrocode} \newcommand*{\AfterCalculatingTypearea}{% \@ifstar \l@addto@macro \g@addto@macro \@typearea@end } % \end{macrocode} % \begin{macro}{\@typearea@end} % \changes{v2.96a}{2006/11/29}{wird wieder immer aber mit neuer Bedeutung % definiert} % Das Makro \cs{@typearea@end} dient als Hook, um am Ende von \cs{typearea} % noch irgendwelche Änderungen vornehmen zu können. Dies geschieht ggf. noch % vor der Aktivierung der Einstellungen innerhalb eines Dokuments. % \begin{macrocode} \newcommand*{\@typearea@end}{} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\AfterSettingArea} % \changes{v3.11}{2012/04/17}{new} % The user may influence the result of \cs{areaset}. The star version works % local while the non-star version is global. % \begin{macrocode} \newcommand*{\AfterSettingArea}{% \@ifstar \l@addto@macro \g@addto@macro \@areaset@end } % \end{macrocode} % \begin{macro}{\@areaset@end} % \changes{v3.11}{2012/04/17}{new} % Macro \cs{@areaset@end} is a hook to make it possible to add some % instructions to the end of the \cs{areaset} command. This will be executed % before the activation of the settings inside a document. % \begin{macrocode} \newcommand*{\@areaset@end}{} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\activateareas} % \changes{v2.96a}{Neuer Name für alte Anweisung} % Dieses Makro wird verwendet, um mit einem gewaltigen Hack die Änderung des % Satzspiegels innerhalb eines Dokuments zu ermöglichen. Es stellt selbst % sicher, dass es nur innerhalb des Dokuments ausgeführt wird. % \begin{macrocode} \newcommand*{\activateareas}{% % \end{macrocode} % Als erstes wird getestet, ob wir überhaupt innerhalb des Dokuments sind und % nur dann wird etwas getan. % \begin{macrocode} \if@atdocument % \end{macrocode} % Wenn dem so ist, 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 \scr@ifundefinedorrelax{@pagesizelast}{}{\KOMAoptions{pagesize=\@pagesizelast}}% \fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\storeareas} % \changes{v3.10}{2011/09/13}{neue Anweisung}% % Die aktuellen Einstellungen können in einem Makro gespeichert % werden. Dieses Makro kann anschließend genutzt werden, um die % Einstellungen wieder her zu stellen. % \begin{macro}{\scr@grouplevel@test} % \changes{v3.10}{2011/09/13}{neu (intern)} % \begin{macrocode} \newcommand*{\scr@grouplevel@test}[1]{% \ifcase\currentgrouptype\else \PackageWarning{typearea}{% \string#1\space used at group level \the\currentgrouplevel.\MessageBreak Using \string#1\space inside any group, e.g.\MessageBreak environments, math mode, boxes, etc. may result in\MessageBreak many type setting problems.\MessageBreak You should move the command \string#1\MessageBreak outside all groups% }% \fi } \newcommand*{\storeareas}[1]{% \edef\reserved@a{% \noexpand\newcommand*{\unexpanded{#1}}{% \noexpand\scr@grouplevel@test\unexpanded{#1}% \noexpand\paperheight=\the\paperheight\space \noexpand\paperwidth=\the\paperwidth\space \noexpand\topmargin=\the\topmargin\space \noexpand\headheight=\the\headheight\space \noexpand\headsep=\the\headsep\space \noexpand\textheight=\the\textheight\space \noexpand\vsize=\the\vsize\space \noexpand\footskip=\the\footskip\space \noexpand\@colht=\the\@colht\space \noexpand\@colroom=\the\@colroom\space \noexpand\textwidth=\the\textwidth\space \noexpand\columnwidth=\the\columnwidth\space \noexpand\hsize=\the\hsize\space \noexpand\oddsidemargin=\the\oddsidemargin\space \noexpand\evensidemargin=\if@twoside \the\evensidemargin \else \the\oddsidemargin \fi\space \noexpand\linewidth=\the\linewidth\space \noexpand\maxdepth=\the\maxdepth\space \scr@ifundefinedorrelax{@pagesizelast}{}{% \noexpand\KOMAoptions{pagesize=\@pagesizelast}}% \noexpand\ta@div=\the\ta@div\space \noexpand\ta@bcor=\the\ta@bcor\space \noexpand\def\noexpand\@lastdiv{\@lastdiv}% \noexpand\marginparsep=\the\marginparsep\space \noexpand\marginparwidth=\the\marginparwidth\space }% }% \reserved@a } % \end{macrocode} % \end{macro} % \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'} % \changes{v2.96}{2006/08/11}{Schriftgröße muss nicht in ganzen pt sein} % \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{}}% \@tempdima=#1pt \addtolength{\@tempdima}{.5\p@}% \divide\@tempdima by\p@ \setlength{\@tempdimb}{\@tempdima}% \multiply\@tempdimb by\p@ \ifdim \@tempdimb=#1pt \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 }% \else \let\@tempa\empty \fi \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} \setlength{\@tempdima}{#1\p@}% \addtolength{\@tempdima}{10\p@}% \PackageWarningNoLine{typearea}{% DIV for \the\@tempdima\space 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} % \changes{v2.96}{2006/08/21}{Warnung, wenn \cs{typearea} innerhalb einer % Gruppe verwendet wird} % \changes{v3.10}{2011/09/13}{Verwendung von \cs{scr@grouplevel@test}} % % 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@]{% \scr@grouplevel@test\typearea \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\p@ \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 is \f@size pt.\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} % \changes{v3.00}{2008/10/08}{Layout-Infos werden per \cs{ta@layoutinfo} % in die \texttt{log}-Datei geschrieben} % \changes{v3.01b}{2008/12/09}{Warnungen vor ungünstigen Einstellungen % geändert} % 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 \@tempcnta=-\@tempcnta \PackageWarningNoLine{typearea}{% Bad type area settings!\MessageBreak The detected line width is about \the\@tempcnta\@percentchar\MessageBreak larger than the heuristically detected line width.\MessageBreak You should e.g. decrease DIV, increase fontsize\MessageBreak or change papersize% }% \@tempcnta=-\@tempcnta \else \ifnum\@tempcnta>15 \PackageWarningNoLine{typearea}{% Maybe no optimal type area settings!\MessageBreak The maximum limit of line width is about \the\@tempcnta\@percentchar\MessageBreak larger than the heuristically detected line width.\MessageBreak You may e.g. increase DIV, decrease fontsize\MessageBreak or change the 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 \ta@layoutinfo{\number\ta@div}{\the\@tempcnta}% \@typearea@end \activateareas \fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\ta@layoutinfo} % \changes{v3.00}{2008/10/08}{neu (intern)} % Schreibt die Layout-Information in die \texttt{log}-Datei. Dabei ist das % erste Argument die Ausgabe für den DIV-Wert und das zweite Argument die % DIV-Abweichung. Letztere wird nur ausgegeben, wenn das Argument nicht leer % und nicht \cs{relax} ist. % \begin{macrocode} \newcommand*{\ta@layoutinfo}[2]{% \PackageInfo{typearea}{% These are the values describing the layout:\MessageBreak DIV\space\space=\space#1\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 \ifx\relax#2\relax\else \space DIV departure\space\space\space=% \space#2\@percentchar\MessageBreak \fi \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 }% } % \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: % \changes{v2.96}{2006/09/12}{\cs{topskip} wird gesetzt} % \changes{v3.00}{2008/10/08}{Layout-Infos werden per \cs{ta@layoutinfo} % in die \texttt{log}-Datei geschrieben} % \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 % \end{macrocode} % \changes{v3.11}{2012/04/17}{advanced version with different margin widths}% % With version 3.11 we will have an advanced version of \cs{areaset}. This % version takes care to option \texttt{mpinclude}. % \begin{macrocode} \if@areasetadvanced \if@mincl \divide\ta@hblk by4 \else \divide\ta@hblk by3 \fi \else \divide\ta@hblk by3 \fi \oddsidemargin=-1in \evensidemargin=-1in \if@twoside \if@semitwoside \advance\oddsidemargin by1.5\ta@hblk \advance\oddsidemargin by\ta@bcor \evensidemargin\oddsidemargin \else \advance\oddsidemargin by\ta@hblk \advance\oddsidemargin by\ta@bcor \advance\evensidemargin by2\ta@hblk \fi \else \advance\oddsidemargin by1.5\ta@hblk \advance\oddsidemargin by\ta@bcor \evensidemargin\oddsidemargin \fi \scr@ifundefinedorrelax{@ptsize}{% \topskip=\f@size\p@ }{% \topskip=\@ptsize\p@ \advance\topskip by 10\p@ }% % \end{macrocode} % \changes{v3.11}{2012/04/17}{advanced version with different margin widths}% % With version 3.11 we will have an advanced version of \cs{areaset}. This % version uses the head height algorithm of \cs{typearea}. % \begin{macrocode} \if@areasetadvanced \normalsize \@ifundefined{ta@hh}{% \headheight=1.25\baselineskip }{% \headheight=\ta@hh }% \else \headheight=15\p@ \advance\headheight by\f@size\p@ \advance\headheight by-10\p@ \fi \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=-1in \advance\topmargin by\ta@vblk \if@hincl \else \advance\topmargin by-\headheight \advance\topmargin by-\headsep \fi \if@twoside \if@semitwoside \marginparwidth=\ta@hblk \else \marginparwidth=1.5\ta@hblk \fi \else \marginparwidth=\ta@hblk \fi \marginparsep=1cc % \end{macrocode} % \changes{v3.11}{2012/04/17}{advanced version with different % \cs{marginparwidth} and unchanged \cs{marginparsep}}% % With version 3.11 we will have an advanced version of \cs{areaset}. This % version supports \texttt{mpinclude} option like \cs{typearea}. % \begin{macrocode} \if@areasetadvanced \if@mincl \marginparwidth=\ta@hblk \if@twoside\if@semitwoside\else \advance\evensidemargin by\marginparwidth \fi\fi \advance\marginparwidth by-\marginparsep \fi \fi \marginparpush=0.45\baselineskip \ta@layoutinfo{areaset}{}% % \end{macrocode} % \changes{v3.11}{2012/04/17}{usage of \cs{@areaset@end}}% % Since version~3.11 we also support \cs{AfterSettingArea} analogous to % \cs{AfterCalculatingTypearea}: % \begin{macrocode} \@areaset@end \activateareas } % \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 % % % % \fi % % \Finale % \endinput % % end of file `scrktare.dtx' %%% Local Variables: %%% mode: doctex %%% TeX-master: t %%% End: