% \CheckSum{1911}
% \iffalse meta-comment
% ======================================================================
% scrktare.dtx
% Copyright (c) Markus Kohm, 2002-2011
%
% 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-2011
%
% 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}[2011/01/25 v3.08a 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}
%
%
% \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}{\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}{\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}
% 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@ifundefinedorrelax{currentgrouptype}{}{%
\ifcase\currentgrouptype\else
\PackageWarning{typearea}{%
\string\typearea\space used at group level
\the\currentgrouplevel.\MessageBreak
Using \string\typearea\space inside any group, e.g.\MessageBreak
environments, math mode, boxes, etc. may result in\MessageBreak
many type setting problems. Because of this you\MessageBreak
should never do this. You should move the
\string\typearea\MessageBreak
outside all groups%
}%
\fi
}%
\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
\divide\ta@hblk by3
\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@
}%
\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
\if@semitwoside
\marginparwidth=\ta@hblk
\else
\marginparwidth=1.5\ta@hblk
\fi
\else
\marginparwidth=\ta@hblk
\fi
\marginparsep=1cc
\marginparpush=0.45\baselineskip
\ta@layoutinfo{areaset}{}%
\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
%
%