diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/koma-script/scrkernel-typearea.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/koma-script/scrkernel-typearea.dtx | 2716 |
1 files changed, 2716 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/koma-script/scrkernel-typearea.dtx b/Master/texmf-dist/source/latex/koma-script/scrkernel-typearea.dtx new file mode 100644 index 00000000000..44bfbf9fb9c --- /dev/null +++ b/Master/texmf-dist/source/latex/koma-script/scrkernel-typearea.dtx @@ -0,0 +1,2716 @@ +% \CheckSum{2328} +% \iffalse meta-comment +% ====================================================================== +% scrkernel-typearea.dtx +% Copyright (c) Markus Kohm, 2002-2013 +% +% 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. +% ---------------------------------------------------------------------- +% scrkernel-typearea.dtx +% Copyright (c) Markus Kohm, 2002-2013 +% +% 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: $Id: scrkernel-typearea.dtx 1512 2013-11-11 10:35:04Z mjk $ +%<package&identify>\NeedsTeXFormat{LaTeX2e}[1995/06/01] +%<*driver> +\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi +\ProvidesFile{scrkernel-typearea.dtx}[% +%</driver> +%<*driver|(package&identify)> +%<package>\ProvidesPackage{typearea}[% +%!KOMAScriptVersion + package (type area)] +%</driver|(package&identify)> +%<*dtx> +\ifx\documentclass\undefined + \input scrdocstrip.tex + \@@input scrkernel-version.dtx + \@@input scrstrip.inc + \generate{\usepreamble\defaultpreamble + \file{typearea.sty}{% + \from{scrkernel-version.dtx}{package,typearea}% + \from{scrkernel-typearea.dtx}{package,identify}% + \from{scrkernel-basics.dtx}{load}% + \from{scrkernel-typearea.dtx}{package,option}% + \from{scrkernel-compatibility.dtx}{package,typearea,option}% + \from{scrkernel-typearea.dtx}{package,body}% + \from{scrkernel-compatibility.dtx}{package,typearea,body}% + \from{scrlogo.dtx}{logo}% + }% + } + \@@input scrstrop.inc +\else + \let\endbatchfile\relax +\fi +\endbatchfile +%</dtx> +%<*driver> +\documentclass{scrdoc} +\usepackage[english,ngerman]{babel} +\usepackage[latin1]{inputenc} +\CodelineIndex +\RecordChanges +\GetFileInfo{scrkernel-typearea.dtx} +\title{\KOMAScript{} \partname\ \texttt{\filename}% + \footnote{Dies ist Version \fileversion\ von Datei \texttt{\filename}.}} +\date{\filedate} +\author{Markus Kohm} + +\begin{document} + \maketitle + \tableofcontents + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \selectlanguage{ngerman} +% +% \changes{v2.95}{2002/06/20}{% +% erste Version aus der Aufteilung von \texttt{scrclass.dtx}} +% +% +% \section{Satzspiegel Makros} +% +% Dieser Abschnitt beinhaltet alle Makros, die für den Satzspiegel +% benötigt werden. Dies betrifft sowohl das Paket \textsf{typearea} +% als auch die Klassen. +% +% \StopEventually{\PrintIndex\PrintChanges} +% +% +% \subsection{Präambel} +% +% \iffalse +%<*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 +%</package&identify> +%<*option> +% \fi +% +% \subsection{Von den Optionen benötigte Befehle} +% +% Für das Paket +% \begin{macrocode} +%<*package> +% \end{macrocode} +% +% Zur Auswertung der Optionen werden einige Makros benötigt. Diese +% sind natürlich vor der Deklaration der Optionen bzw. vor der +% Auswertung der Optionen zu definieren. Ich mache das hier vor der +% Deklaration der Optionen. +% +% \begin{macro}{\SetDIVList} +% \changes{v2.1a}{1994/10/28}{neu} +% \changes{v2.6}{2000/01/04}{\cs{ta@divlist} enthält Werte für +% Schriftgrößen ab 1pt} +% Der Befehl \cs{SetDIVList} tut nichts weiter als die innere Variable +% für die schriftgrößenabhängige \emph{DIV}-Liste \cs{ta@divlist} neu +% zu definieren. Dabei können \emph{DIV}-Werte für Größen ab 10\,pt +% gesetzt werden. +% \begin{macrocode} +\newcommand*\SetDIVList[1]{\def\ta@divlist{{}{}{}{}{}{}{}{}{}#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\SetXDIVList} +% \changes{v2.6}{2000/01/04}{neu} +% Da mit \cs{SetDIVList} aus Kompatibilitätsgründen nur Werte für +% Größen ab 10\,pt gesetzt werden können, wird für Werte ab 1\,pt +% ein neuer Befehl benötigt. +% \begin{macrocode} +\newcommand*\SetXDIVList[1]{\def\ta@divlist{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{Length}{\ta@bcor} +% \changes{v2.2a}{1995/01/25}{Definition der Dimension wegen der +% Option \texttt{BCOR} vorgezogen} +% \changes{v2.7g}{2001/04/17}{\cs{newlength} and Stelle von +% \cs{newdimen} für die Definition verwendet} +% Dimension für die Bindekorrektur reservieren. Diese wird implizit +% zu 0\,pt initialisiert. +% \begin{macrocode} +\newlength{\ta@bcor} +% \end{macrocode} +% \end{Length} +% +% \begin{macro}{\ta@div} +% \changes{v2.2a}{1995/01/25}{Definition wegen der Option +% \texttt{DIV} vorgezogen} +% Zähler für \emph{DIV} reservieren. Dieser wird implizit zu 0 +% initialisiert. +% \begin{macrocode} +\newcount\ta@div +% \end{macrocode} +% \end{macro} +% +% Ab hier nun Teile für Klassen und Paket: +% \begin{macrocode} +%</package> +% \end{macrocode} +% +% \begin{macro}{\@BCOR} +% \begin{macro}{\@@BCOR} +% \changes{v2.5}{1997/06/17}{Einzelzeichenscanner durch +% Mustererkennung ersetzt} +% Das Makro \cs{@BCOR} wird später benötigt, um die Option +% \texttt{BCOR\emph{BCOR}} zu erkennen. Die Option wird über ihr +% Muster erkannt. +% \begin{macrocode} +\newcommand*{\@BCOR}{\expandafter\@@BCOR\CurrentOption BCORBCOR\@@BCOR} +\newcommand*{\@@BCOR}{} +\def\@@BCOR #1BCOR#2BCOR#3\@@BCOR{% +% \end{macrocode} +% Handelt es sich um die Option \texttt{BCOR}, so ist der erste +% Parameter leer. +% \begin{macrocode} + \ifstr{#1}{}{% +% \end{macrocode} +% Außerdem ist der dritte Parameter dann \texttt{BCOR}. +% \begin{macrocode} + \ifstr{#3}{BCOR}{% +% \end{macrocode} +% Der zweite Parameter sollte dann die Größe enthalten. Ist dies +% nicht der Fall, wird ein Fehler gemeldet (Fehlerzeile ist dann +% \cs{ProcessOptions}). +% \begin{macrocode} +%<class> \PassOptionsToPackage{BCOR#2}{typearea}% +%<package> \ifdimen{#2}{\setlength{\ta@bcor}{#2}}{\scr@pti@nerr@r}% +% \end{macrocode} +% In allen anderen Fällen ist es nicht diese Option, dann wird ein +% Fehler ausgegeben. Stattdessen könnte hier auch auf weitere Optionen +% getestet werden. +% \begin{macrocode} + }{\scr@pti@nerr@r}% + }{\scr@pti@nerr@r}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@DIV} +% \begin{macro}{\@@DIV} +% \changes{v2.5}{1997/06/17}{Einzelzeichenscanner durch +% Mustererkennung ersetzt} +% Die grundsätzliche Funktion ist die gleiche wie bei \cs{@BCOR}, +% \cs{@@BCOR}. +% \begin{macrocode} +\newcommand*{\@DIV}{\expandafter\@@DIV\CurrentOption DIVDIV\@@DIV} +\newcommand*{\@@DIV}{} +\def\@@DIV #1DIV#2DIV#3\@@DIV{% + \edef\@tempa{#1}\ifx\@tempa\@empty + \edef\@tempa{#3}\def\@tempb{DIV}\ifx\@tempa\@tempb +%<class> \PassOptionsToPackage{DIV#2}{typearea}% +%<package> \ifnumber{#2}{\ta@div=#2\relax}{\scr@pti@nerr@r}% + \else\scr@pti@nerr@r\fi +% \end{macrocode} +% Der Unterschied liegt darin, dass bei einem Fehlschlag der +% Mustererkennung kein Fehler vorliegt, sondern u.\,U. noch auf +% \texttt{BCOR} getestet werden muss. +% \begin{macrocode} + \else\@BCOR\fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@headlines} +% \begin{macro}{\@@headlines} +% \changes{v2.7g}{2001/04/17}{neue Mustererkennung für die Anzahl +% der Kopfzeilen} +% Das Macro \cs{@headlines} wird benötigt, um die Option +% \texttt{headlines} zu erkennen. +% \begin{macrocode} +\newcommand{\@headlines}{% + \expandafter\@@headlines\CurrentOption headlines\@@headlines% +} +\newcommand*{\@@headlines}{} +\def\@@headlines #1headlines#2\@@headlines{ + \edef\@tempa{#2}\edef\@tempb{headlines}\ifx\@tempa\@tempb +%<class> \PassOptionsToPackage{#1headlines}{typearea} +%<package> \setlength{\@tempdima}{#1\baselineskip}% +%<package> \def\ta@hh{#1\baselineskip}% + \else\@DIV\fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% 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} +%</package> +% \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}{% +%<class> \PassOptionsToPackage{#3=#1#2}{typearea}% +%<package> \isopaper[a]{#2}% + }{% + \ifstr{#1}{b}{% +%<class> \PassOptionsToPackage{#3=#1#2}{typearea}% +%<package> \isopaper[b]{#2}% + }{% + \ifstr{#1}{c}{% +%<class> \PassOptionsToPackage{#3=#1#2}{typearea}% +%<package> \isopaper[c]{#2}% + }{% + \ifstr{#1}{d}{% +%<class> \PassOptionsToPackage{#3=#1#2}{typearea}% +%<package> \isopaper[d]{#2}% + }{\scr@pti@nerr@r}% + }% + }% + }% + }{\scr@pti@nerr@r}% + }{% +%<class> \@pt@scan +%<package> \@headlines + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\scr@pti@nerr@r} +% \changes{v2.95}{2002/06/20}{\cs{OptionNotUsed} statt +% \cs{PackageError}} +% Falls die zuätzliche Option nicht \texttt{BCOR}, \texttt{DIV}, +% \texttt{headlines} oder eine bekannte Papiergröße ist, ist die +% Option nicht verwendet. +% \begin{macrocode} +\newcommand*{\scr@pti@nerr@r}{ +%<class> \OptionNotUsed +%<package> \@unknownoptionerror +} +% \end{macrocode} +% \end{macro} +% +% 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} +% \changes{v3.12}{2013/03/05}{Verwendung der Status-Signalisierung mit +% \cs{FamilyKeyState}} +% \begin{option}{footlines} +% \changes{v3.12}{2013/03/26}{neue Option} +% 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. Für den Fuß wird überhaupt nur +% diese Form bereit gestellt. +% \begin{macrocode} +\KOMA@key{headlines}{% + \begingroup + \setlength{\@tempdima}{#1\baselineskip}% + \endgroup + \def\ta@hh{#1\baselineskip}% + \FamilyKeyStateProcessed +} +\KOMA@key{footlines}{% + \begingroup + \setlength{\@tempdima}{#1\baselineskip}% + \endgroup + \def\ta@fh{#1\baselineskip}% + \FamilyKeyStateProcessed +} +% \end{macrocode} +% \end{option} +% \end{option} +% +% \begin{option}{headheight} +% \changes{v2.98c}{2008/04/06}{neue Option} +% \changes{v3.12}{2013/03/05}{Verwendung der Status-Signalisierung mit +% \cs{FamilyKeyState}} +% \begin{option}{footheight} +% \changes{v3.12}{2013/03/26}{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 Optionen. +% \begin{macrocode} +\KOMA@key{headheight}{% + \begingroup + \setlength{\@tempdima}{#1}% + \endgroup + \def\ta@hh{#1}% + \FamilyKeyStateProcessed +} +\KOMA@key{footheight}{% + \begingroup + \setlength{\@tempdima}{#1}% + \endgroup + \def\ta@fh{#1}% + \FamilyKeyStateProcessed +} +% \end{macrocode} +% \end{option} +% \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} +% \changes{v3.12}{2013/03/05}{Verwendung der Status-Signalisierung mit +% \cs{FamilyKeyState}} +% 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 + \FamilyKeyStateProcessed +} +% \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} +% \changes{v3.12}{2013/03/05}{Verwendung der Status-Signalisierung mit +% \cs{FamilyKeyState}} +% 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=\z@ \else + \def\@tempb{calc}\ifx\@tempa\@tempb\ta@div=\tw@ \else + \def\@tempb{classic}\ifx\@tempa\@tempb\ta@div=\thr@@ \else + \ta@div=\@tempa + \fi + \fi + \fi + \fi + \FamilyKeyStateProcessed +} +% \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}} +% \changes{v3.12}{2013/03/05}{Verwendung der Status-Signalisierung mit +% \cs{FamilyKeyState}} +% \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 +%</package> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macrocode} +\KOMA@key{twoside}[true]{% +%<class> \if@atdocument\else\PassOptionsToPackage{twoside=#1}{typearea}\fi% +%<*package> + \if@atdocument\if@twoside\cleardoublepage\else\clearpage\fi\fi + \ifstr{#1}{semi}{% + \@twosidetrue + \@semitwosidetrue + \FamilyKeyStateProcessed + }{% + \def\FamilyElseValue{, `semi'}% + \KOMA@set@ifkey{twoside}{@twoside}{#1}% + }% + \if@twoside + \if@semitwoside + \@mparswitchfalse + \else + \@mparswitchtrue + \fi + \else + \@mparswitchfalse + \fi% + \csname recalctypearea\endcsname +%</package> +} +\KOMA@DeclareStandardOption% +%<package> [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} +% \changes{v3.12}{2013/03/05}{Verwendung der Status-Signalisierung mit +% \cs{FamilyKeyState}} +% Einspaltiger oder zweispaltiger Satz? +% \begin{macrocode} +%</package> +\KOMA@key{twocolumn}[true]{% +%<class> \if@atdocument\else\PassOptionsToPackage{twocolumn=#1}{typearea}\fi% +%<*package> + \if@atdocument\clearpage\fi + \KOMA@set@ifkey{twocolumn}{@twocolumn}{#1}% + \ifx\FamilyKeyState\FammilyKeyStateProcessed + \csname recalctypearea\endcsname + \fi +%</package> +} +\KOMA@DeclareStandardOption% +%<package> [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}} +% \changes{v3.12}{2013/03/05}{Verwendung der Status-Signalisierung mit +% \cs{FamilyKeyState}} +% 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}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed + \aftergroup\FamilyKeyStateProcessed + \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}% + \else + \endgroup + \FamilyKeyStateUnknownValue + \fi +} +% \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} +% \changes{v3.12}{2012/02/06}{nicht ausgeführtes +% \cs{let}\cs{if@tempswa}\cs{if@dvips} funktioniert auch noch, wenn +% letzteres nicht definiert ist} +% \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)} +% \changes{v3.12}{2013/05/10}{deaktiviert, wenn \cs{XeTeXversion} existiert} +% 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}{% + \expandafter\let\csname if@tempswa\expandafter\endcsname + \csname if@dvips\endcsname + }{}% + }% + \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}{% + \scr@ifundefinedorrelax{XeTeXversion}{% + \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}{% +% \end{macrocode} +% \changes{v3.12}{2012/11/23}{nur im DVI- und PS-Fall das Papierformatupdate +% durchführen} +% \changes{v3.12}{2012/02/06}{nicht ausgeführtes +% \cs{let}\cs{if@tempswa}\cs{if@dvips} funktioniert auch noch, wenn +% letzteres nicht definiert ist} +% Es wird getestet, ob unspezfizierte DVI-Ausgabe oder spezifizierte +% PS-Ausgabe verwendet wird. Nur in diesen Fällen wird der PS-Code für das +% Papierformatupdate eingefügt. +% \begin{macrocode} + \begingroup + \@tempswafalse + \scr@ifdvioutput{\@tempswatrue}{% + \ifnotundefined{if@dvips}{% + \expandafter\let\csname if@tempswa\expandafter\endcsname + \csname if@dvips\endcsname + }{}% + }% + \if@tempswa + \endgroup + \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 +% \end{macrocode} +% In diesem Fall (nämlich weder DVI- noch PS-Ausgabe) muss nur die Gruppe, die +% eingefügt wurde, um die Änderung von \cs{if@tempswa} lokal zu halten, +% geschlossen werden. +% \begin{macrocode} + \endgroup + \fi + }% + \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}} +% \changes{v3.12}{2013/03/05}{Verwendung der Status-Signalisierung mit +% \cs{FamilyKeyState}} +% 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 + \FamilyKeyStateProcessed + }{% + \ifstr{#1}{landscape}{% + \@seascapefalse + \if@landscape\else + \setlength{\@tempdima}{\paperwidth}% + \setlength{\paperwidth}{\paperheight}% + \setlength{\paperheight}{\@tempdima}% + \@landscapetrue + \fi + \FamilyKeyStateProcessed + }{% + \ifstr{#1}{portrait}{% + \if@landscape + \setlength{\@tempdima}{\paperwidth}% + \setlength{\paperwidth}{\paperheight}% + \setlength{\paperheight}{\@tempdima}% + \@landscapefalse + \fi + \FamilyKeyStateProcessed + }{% + \ifstr{#1}{letter}{% + \if@landscape + \setlength\paperheight{8.5in}% + \setlength\paperwidth {11in}% + \else + \setlength\paperheight{11in}% + \setlength\paperwidth {8.5in}% + \fi + \FamilyKeyStateProcessed + }{% + \ifstr{#1}{legal}{% + \if@landscape + \setlength\paperheight{8.5in}% + \setlength\paperwidth {14in}% + \else + \setlength\paperheight{14in}% + \setlength\paperwidth {8.5in}% + \fi + \FamilyKeyStateProcessed + }{% + \ifstr{#1}{executive}{% + \if@landscape + \setlength\paperheight{7.25in}% + \setlength\paperwidth {10.5in}% + \else + \setlength\paperheight{10.5in}% + \setlength\paperwidth {7.25in}% + \fi + \FamilyKeyStateProcessed + }{% + \iso@paper{#1}% + \if@tempswa + \FamilyKeyStateProcessed + \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 + \FamilyKeyStateProcessed + \else + \KOMA@unknown@keyval{paper}{#1}{% + `letter', `legal', `executive', `a'<nr>, `b'<nr>, + `c'<nr>, `d'<nr>,\MessageBreak + <width>`:'<height>, `landscape' and `portrait'% + }% + \fi + \fi + }% + }% + }% + }% + }% + }% +} +% \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} +%</package> +% \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*{% +%<letter> \lco@test + \x@paper} +% \end{macrocode} +% +% \iffalse +% Der Rest gehört nicht mehr zu den Optionen. +%</option> +%<*body> +%<*package> +% \fi +% +% +% \subsubsection{Konfigurationsdatei} +% +% \changes{v2.0e}{1994/10/28}{Konfigurationsdatei +% \texttt{typearea.cfg} zur Definition weiterer Optionen +% bzw. Papiergrößen} +% Es ist möglich in einer Datei \texttt{typearea.cfg} z.\,B. weitere +% Optionen zu definieren, die dann automatisch eingeladen werden. +% \begin{macrocode} +\InputIfFileExists{typearea.cfg}{% + \typeout{% + ***************************************^^J% + * Local config file typearea.cfg used^^J% + ***************************************% + } +}{} +% \end{macrocode} +% +% +% \subsubsection{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} +% \changes{v3.12}{2013/11/11}{die voreingestellte Papiergröße kann via +% \cs{defaultpagesize} auch in \texttt{typearea.cfg} verändert werden} +% \begin{macro}{\defaultpapersize} +% \changes{v3.12}{2013/11/11}{Neue Anweisung} +% \begin{macrocode} +\providecommand*{\defaultpapersize}{A4} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +\KOMAExecuteOptions{paper=\defaultpapersize} +\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} +%</package> +% \end{macrocode} +% +% +% \subsection{Laden des Pakets} +% +% Das Folgende wird nur in einem zweiten Durchlauf in die Klassen +% eingefügt und sorgt für das Laden des \textsf{typearea} Pakets. +% \begin{macrocode} +%<*class> +% \end{macrocode} +% Vor dem Laden müssen noch diverse Makros zurückgesetzt werden, damit +% sie überhaupt in \textsf{typearea} definiert werden können: +% \begin{macrocode} +\let\@BCOR =\relax +\let\@@BCOR =\relax +\let\@DIV =\relax +\let\@@DIV =\relax +\let\@headlines =\relax +\let\@@headlines =\relax +\let\x@paper =\relax +\let\x@@paper =\relax +\let\scr@pti@nerr@r =\relax +% \end{macrocode} +% Jetzt kann geladen werden: +% \changes{v2.95}{2002/06/22}{Beim Laden von \textsf{typearea} wird +% \cs{KOMAScriptVersion} verwendet} +% Die Überprüfung auf die korrekte \KOMAScript-Version geschieht in +% dem Paket (siehe dazu \texttt{scrkernel-version.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. +% +% Für die Kompatibilität mit den Standardklassen muss jetzt ggf. noch der +% Seitenspiegel angepasst werden. Dies geschieht aber nur, wenn ein +% vordefinierter Wert verwendet wurde: +% \begin{macrocode} +%<*!letter> +\if@scr@emulatestandardclasses + \ifnum\@lastdiv=\z@ + \setlength{\textwidth}{\dimexpr \paperwidth-2in\relax} + \ifdim \f@size\p@<10.5\p@ + \setlength{\@tempdimb}{345\p@} + \else\ifdim \f@size\p@<11.5\p@ + \setlength{\@tempdimb}{360\p@} + \else + \setlength{\@tempdimb}{390\p@} + \fi + \fi + \if@twocolumn + \ifdim\@textwidth>2\@tempdimb\relax + \setlength{\textwidth}{2\@tempdimb} + \fi + \else + \ifdim\textwidth>\@tempdimb + \setlength{\textwidth}{\@tempdimb} + \fi + \fi + \@settopoint\textwidth + \setlength{\@tempdima}{\dimexpr \paperheight-3.5in\relax} + \divide\@tempdima\baselineskip + \@tempcnta=\@tempdima + \setlength{\textheight}{\@tempcnta\baselineskip} + \addtolength{\textheight}{\topskip} + \edef\reserved@a{% + \noexpand\@areasetadvancedtrue + \noexpand\areaset[current]{\noexpand\textwidth}{\noexpand\textheight}% + \if@areasetadvanced\else\noexpand\@areasetadvancedfalse\fi + }\reserved@a + \fi +\fi +%</!letter> +% \end{macrocode} +% +% \begin{macrocode} +%</class> +% \end{macrocode} +% +% +% Ab hier ist alles nur noch für das Paket. +% \begin{macrocode} +%<*package> +% \end{macrocode} +% +% \subsection{Einige interne Register} +% +% \begin{Length}{\ta@hblk} +% \begin{Length}{\ta@vblk} +% \begin{Length}{\ta@temp} +% Diese Größsenparameter und werden intern für verschiedene Befehle +% benötigt. (Die Zähler \cs{ta@bcor} und \cs{ta@div} werden bereits +% bei der Optionenauswertung benötigt und sind deshalb vorgezogen.) +% \begin{macrocode} +\newlength{\ta@hblk} +\newlength{\ta@vblk} +\newlength{\ta@temp} +% \end{macrocode} +% \end{Length} +% \end{Length} +% \end{Length} +% +% +% \subsection{Die Berechnung des Satzspiegels} +% +% \begin{macro}{\typearea} +% Die Berechnung des Satzspiegels, wie sie in der Anleitung +% beschrieben ist, findet mit Hilfe des Befehls \cs{typearea} statt, +% der hier definiert wird. Die Berechnung selbst benötigt mehreren +% Stufen. +% +% \begin{macro}{\@typearea} +% \changes{v2.4n}{1997/05/28}{eigentliche Satzspiegelberechnung in +% \cs{@typearea} ausgegliedert} +% \changes{v2.95}{2002/08/20}{\cs{selectfont} eingefügt} +% Die eigentliche Satzspiegelberechnung geschieht über das Hilfsmakro +% \cs{@typearea}, das dann auch von \cs{typearea} genutzt wird. Dieses +% Hilfsmakro benötigt keine Parameter, da diese bereits zuvor von +% \cs{typearea} in die entsprechenden Variablen geschrieben wurden. +% \begin{macrocode} +\newcommand*\@typearea{% +% \end{macrocode} +% Bevor irgend etwas anderes gemacht wird, sogen wir dafür, dass die +% gewählte Schrift auch gesetzt wird. Dies ist notwendig, falls jemand +% vor \cs{typearea} einen Befehl wie \cs{linespread} verwendet. +% \begin{macrocode} + \selectfont +% \end{macrocode} +% Zunächst werden die horizontalen Maße berechnet. Dazu wird als +% erstes die Größe einer horizontalen Längeneinheit (\emph{HLE}) +% ermittelt: +% \begin{macrocode} + \ta@hblk=\paperwidth + \advance \ta@hblk by-\ta@bcor + \divide\ta@hblk by\ta@div +% \end{macrocode} +% Die Größe des Bereichs für die Randnotizen ist ebenfalls von der +% Streifenbreite abhängig. +% \changes{v2.8q}{2002/03/28}{Textbreite berücksichtigt Option +% \texttt{mpinclude}} +% \begin{macrocode} + \if@mincl + \marginparwidth=\ta@hblk + \advance\marginparwidth by-\marginparsep + \else + \if@twoside + \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 +% \end{macrocode} +% \changes{v3.12}{2013/10/15}{use alternating \texttt{BCOR} with +% \texttt{twoside!=semi}} +% Wenn \texttt{twoside=semi} verwendet wird, wird der Binderand ab +% \KOMAScript~3.12 dem inneren Rand zugeschlagen. Bei Kompatibilität zu +% älteren Versionen wird hingegen immer der linke Rand verwendet. +% \begin{macrocode} + \ifnum \scr@compatibility<\@nameuse{scr@v@3.12}\relax + \evensidemargin=\oddsidemargin + \else + \advance\evensidemargin by1.5\ta@hblk + \fi + \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=\tw@ + \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}} +% \changes{v3.12}{2013/03/26}{konfigurierbare Höhe des Fußes} +% +% 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=\z@ \else + \def\@tempb{calc}\ifx\@tempa\@tempb\ta@div=\tw@ \else + \def\@tempb{classic}\ifx\@tempa\@tempb\ta@div=\thr@@ \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} +% Für den Fuß muss ähnlich verfahren werden. Dabei muss aber nicht nur +% ggf. \cs{footheight}, sondern auch \cs{footskip} angepasst werden. +% \begin{macrocode} + \@ifundefined{footheight}{% + \newlength\footheight + }{}% + \@ifundefined{ta@fh}{% + \footheight=1.25\baselineskip + }{% + \footheight=\ta@fh + }% + \footskip=\dimexpr\footheight+2.25\baselineskip +% \end{macrocode} +% Es folgen die restlichen von \textit{DIV} und \textit{BCOR} +% unabhängigen Werte. +% \begin{macrocode} + \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 + \ifdim \dimexpr 1in+\topmargin + +\headheight+\headsep + +\textheight + +\footskip+\dp\strutbox\relax + >\paperheight + \PackageWarningNoLine{typearea}{% + page content and margins higher than paper.\MessageBreak + This may result in page footer out of paper.\MessageBreak + You should decrease DIV, decrease foot height,\MessageBreak + or include footer into type area% + }% + \fi + \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 +% \end{macrocode} +% \changes{v3.12}{2013/10/15}{use alternating \texttt{BCOR} with +% \texttt{twoside!=semi}} +% Wenn \texttt{twoside=semi} verwendet wird, wird der Binderand ab +% \KOMAScript~3.12 dem inneren Rand zugeschlagen. Bei Kompatibilität zu +% älteren Versionen wird hingegen immer der linke Rand verwendet. +% \begin{macrocode} + \ifnum \scr@compatibility<\@nameuse{scr@v@3.12}\relax + \evensidemargin=\oddsidemargin + \else + \advance\evensidemargin by1.5\ta@hblk + \fi + \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 +% \end{macrocode} +% \changes{v3.12}{2013/03/26}{changes for height of foot} +% \begin{macrocode} + \@ifundefined{footheight}{\newlength\footheight}{} + \if@areasetadvanced + \@ifundefined{ta@fh}{% + \footheight=1.25\baselineskip + \footskip=3.5\baselineskip + }{% + \footheight=\ta@fh + \footskip=\dimexpr \footheight+2.25\baselineskip\relax + }% + \else + \footheight=1.25\baselineskip + \footskip=3.5\baselineskip + \fi + \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 + \ifdim \dimexpr 1in+\topmargin + +\headheight+\headsep + +\textheight + +\footskip+\dp\strutbox\relax + >\paperheight + \PackageWarningNoLine{typearea}{% + page content and margins higher than paper.\MessageBreak + This may result in page footer out of paper.\MessageBreak + You should decrease DIV, decrease foot height,\MessageBreak + or decreate height of text area% + }% + \fi +} +% \end{macrocode} +% \end{macro} +% +% +% \subsection{Berechnung des Standardsatzspiegels} +% +% \changes{v2.8q}{2001/11/06}{Initialisierung mit Hilfe der +% symbolischen Werte \texttt{current}} +% Nun fehlt nur noch die eigentliche Initialisierung. Dazu wird +% einfach der Satzspiegel mit den getroffenen Voreinstellungen +% berechnet. Da der \textit{DIV}-Wert 0 für einen Wert aus der +% Default-Liste steht, bleibt die Kompatibilität zu älteren Versionen +% erhalten. Der aktuelle Wert für \textit{DIV} und \textit{BCOR} wurde +% über die Optionen bereits gesetzt. Dabei kann abweichend zu sonst +% der aktuelle Wert auch 0, 1, 2 oder 3 sein. Die Initialisierung des +% Pakets ist damit sehr einfach. +% \begin{macrocode} +\typearea[current]{current} +% \end{macrocode} +% +% \iffalse +%</package> +%</body> +%</class|package> +% \fi +% +% \Finale +% +\endinput +% +% end of file `scrkernel-typearea.dtx' +%%% Local Variables: +%%% mode: doctex +%%% TeX-master: t +%%% End: |