% ====================================================================== % typearea-experts.tex % Copyright (c) Markus Kohm, 2008-2021 % % 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. % ---------------------------------------------------------------------- % typearea-experts.tex % Copyright (c) Markus Kohm, 2008-2021 % % 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. % ====================================================================== % % Chapter about typearea of the KOMA-Script guide part II % Maintained by Markus Kohm % % ---------------------------------------------------------------------- % % Kapitel über typearea in der KOMA-Script-Anleitung Teil II % Verwaltet von Markus Kohm % % ====================================================================== \KOMAProvidesFile{typearea-experts.tex} [$Date: 2021-07-11 17:14:57 +0200 (Sun, 11 Jul 2021) $ KOMA-Script guide (chapter: typearea for experts)] \chapter{Zusätzliche Informationen zum Paket \Package{typearea.sty}} \labelbase{typearea-experts} \BeginIndexGroup \BeginIndex{Package}{typearea} In diesem Kapitel finden Sie zusätzliche Informationen zum Paket \hyperref[cha:typearea]{\Package{typearea}}. \iffree{Einige Teile des Kapitels sind dabei dem \KOMAScript-Buch \cite{book:komascript} vorbehalten. Dies sollte kein Problem sein, denn der}{Der} normale Anwender, der das Paket einfach nur verwenden will, wird diese Informationen eher selten benötigen. Ein Teil der Informationen richtet sich an Anwender, die ausgefallene Aufgaben lösen oder eigene Pakete schreiben wollen, die auf \Package{typearea} basieren. Ein weiterer Teil der Informationen behandelt Möglichkeiten von \Package{typearea}, die aus Gründen der Kompatibilität zu den Standardklassen oder früheren Versionen von \KOMAScript{} existieren. Die Teile, die nur aus Gründen der Kompatibilität zu früheren Versionen von \KOMAScript{} existieren, sind in serifenloser Schrift gesetzt und sollten nicht mehr verwendet werden. \section{Experimentelle Möglichkeiten} \seclabel{experimental} In diesem Abschnitt werden experimentelle Möglichkeiten beschrieben. Experimentell bedeutet in diesem Zusammenhang, dass die Funktion nicht garantiert werden kann. \iffalse % Umbruchkorrektur Dafür kann es zwei Gründe geben. Zum einen steht die endgültige Funktion oder Implementierung eventuell noch nicht abschließend fest. Zum anderen hängen die Möglichkeiten teilweise von Interna anderer Pakete ab und können deshalb in ihrer Funktion nur so lange garantiert werden, wie diese anderen Pakete nicht geändert werden. \fi \begin{Declaration} \OptionVName{usegeometry}{Ein-Aus-Wert} \end{Declaration} Normalerweise kümmert sich \Package{typearea} wenig darum, ob es in irgend einer Konstellation zusammen mit dem Paket \Package{geometry}\IndexPackage{geometry} (siehe \cite{package:geometry}) verwendet wird. Das bedeutet insbesondere, dass \Package{geometry} nach wie vor nichts davon mitbekommt, wenn man mit \Package{typearea} beispielsweise die Papiergröße ändert -- etwas, das \Package{geometry} selbst gar nicht bietet. Sobald\ChangedAt{v3.17}{\Package{typearea}} Option \Option{usegeometry} gesetzt wird, versucht \Package{typearea}, alle eigenen Optionen für \Package{geometry} in dessen Optionen zu übersetzen. Innerhalb des Dokuments wird sogar \Macro{newgeometry} aufgerufen, wenn neue Parameter aktiviert werden (siehe \DescRef{\LabelBase.cmd.activateareas} im nachfolgenden Abschnitt). Da \Package{geometry} keine Änderung der Papiergröße oder Papierausrichtung via \Macro{newgeometry} bietet, wird diese bei Bedarf über interne Anweisungen und Längen von \Package{geometry} umgesetzt. Getestet ist dies für \Package{geometry}~5.3 bis 5.6. Die Option bedeutet übrigens nicht, dass bei Verwendung von \Package{geometry} nach einer Papiergrößen- oder Papierausrichtungsänderung mit \Package{typearea} das neue Papier direkt optimal genutzt wird. Da \Package{geometry} aus Komfortgründen deutlich mehr Optionen für die Papiereinstellung bietet, als für die Bestimmung von Textbereich, Rändern, Kopf, Fuß etc. benötigt werden -- man spricht von \emph{Überbestimmung} -- und gleichzeitig bei neuen Aufrufen von \Macro{newgeometry} fehlende Angaben aus bereits bekannten ableitet -- man spricht von \emph{Werterhalt} --, muss man gegebenenfalls durch vollständige Bestimmung neuer Werte mit einem eigenen Aufruf von \Macro{newgeometry} alle gewünschten Einstellungen explizit vornehmen. Nichtsdestotrotz kann die Berücksichtigung von \Package{geometry} durch \Package{typearea} zusätzliche Möglichkeiten eröffnen. {\setlength{\emergencystretch}{1em}% Von \Package{typearea} werden mit \Option{usegeometry} für \Package{geometry} derzeit die Optionen \Option{bindingoffset}, \Option{footskip}, \Option{headheight}, \Option{headsep}, \Option{includefoot}, \Option{includehead}, \Option{includemp}, \Option{lmargin}, \Option{marginparsep}, \Option{marginparwidth}, \Option{textheight}, \Option{textwidth}, \Option{top} und in der Dokumentpräambel zusätzlich \Option{paperheight} und \Option{paperwidth} gesetzt.\par}% \EndIndexGroup \begin{Declaration} \OptionVName{areasetadvanced}{Ein-Aus-Wert} \Macro{areaset}\OParameter{BCOR}\Parameter{Breite}\Parameter{Höhe} \end{Declaration} Normalerweise berücksichtigt \DescRef{typearea.cmd.areaset} Optionen zur Bestimmung der Höhe von Kopf und Fuß oder zur Festlegung, ob Randelemente Teil des Satzspiegels sein sollen, nicht in gleicher Weise wie \DescRef{typearea.cmd.typearea}. Mit Option \Option{areasetadvanced}\ChangedAt{v3.11}{\Package{typearea}} kann jedoch eingestellt werden, dass sich \DescRef{typearea.cmd.areaset} diesbezüglich mehr wie \DescRef{typearea.cmd.typearea} verhalten soll. Trotzdem unterscheiden sich Einstellungen, die zu gleich großen Textbereichen führen zwischen den beiden Befehlen weiterhin, da \DescRef{typearea.cmd.typearea} immer auf ganze Zeilen rundet und dabei gegebenenfalls den unteren Rand um bis zu eine Zeile kleiner wählt, während \DescRef{typearea.cmd.areaset} den oberen und unteren Rand immer im Verhältnis 1:2 einstellt. Die Textbereiche der unterschiedlichen Befehle können also bei gleicher Größe vertikal leicht verschoben sein. Nach Aktivierung von \Option{areasetadvanced} kann jedoch mit einer Kombination wie \begin{lstcode}[escapeinside=><] \typearea{>\PName{BCOR}<}{>\PName{DIV}<} \areaset[current]{\textwidth}{\textheight} \end{lstcode} das unterschiedliche Verhalten ausgeglichen werden, ohne dass dabei die eingangs erwähnten Abstriche in der Arbeitsweise von \Macro{areaset} in Kauf genommen werden müssen. Siehe dazu auch das Beispiel im nächsten Abschnitt.% \EndIndexGroup \section{Anweisungen für Experten} \seclabel{experts} In diesem Abschnitt werden Anweisungen beschrieben, die für den normalen Anwender kaum oder gar nicht von Interesse sind. Experten bieten diese Anweisungen zusätzliche Möglichkeiten. \begin{Declaration} \Macro{activateareas} \end{Declaration}% Diese Anweisung wird von \Package{typearea} genutzt, um die Einstellungen für Satzspiegel und Ränder in die internen \LaTeX-Längen zu übertragen, wenn der Satzspiegel innerhalb des Dokuments, also nach \Macro{begin}\PParameter{document} neu berechnet wurde. Wurde die Option \DescRef{typearea.option.pagesize} verwendet, so wird diese anschließend mit demselben Wert neu aufgerufen. Damit kann beispielsweise innerhalb von PDF-Dokumenten die Seitengröße tatsächlich variieren. Experten können diese Anweisung auch verwenden, wenn Sie aus irgendwelchen Gründen Längen wie \Length{textwidth} oder \Length{textheight} innerhalb des Dokuments manuell geändert haben. Der Experte ist dabei für eventuell notwendige Seitenumbrüche vor oder nach der Verwendung jedoch selbst verantwortlich! Darüber hinaus sind alle von \Macro{activateareas} durchgeführten Änderungen lokal!% \EndIndexGroup \begin{Declaration} \Macro{storeareas}\Parameter{Anweisung} \Macro{BeforeRestoreareas}\Parameter{Code} \Macro{BeforeRestoreareas*}\Parameter{Code} \Macro{AfterRestoreareas}\Parameter{Code} \Macro{AfterRestoreareas*}\Parameter{Code} \end{Declaration} Mit Hilfe von \Macro{storeareas} wird eine \PName{Anweisung} definiert, über die alle aktuellen Seitenspiegeleinstellungen wiederhergestellt werden können. So ist es möglich, die aktuellen Einstellungen zu speichern, anschließend die Einstellungen zu ändern und dann die gespeicherten Einstellungen wieder zu reaktivieren. \begin{Example} Immer wieder fragen Anwender nach der Möglichkeit, in einem A4-Dokument unter Beibehaltung der Randeinstellungen eine A3-Seite im Querformat einfügen zu können. Der Textbereich soll also lediglich um die gewonnene Papierbreite verbreitert werden. Mit \Macro{storeareas}, \DescRef{\LabelBase.cmd.areaset} und der zuvor bereits erklärten Option \DescRef{\LabelBase.option.areasetadvanced} ist das sehr einfach möglich: \begin{lstcode} \documentclass[areasetadvanced]{scrartcl} \areaset[current]{\textwidth}{\textheight} \begin{document} \noindent\rule{\textwidth}{\textheight} \storeareas\meinegespeichertenWerte \KOMAoption{paper}{a3,landscape} \areaset[current] {\dimexpr\textwidth+.5\paperwidth\relax} {\textheight} \noindent\rule{\textwidth}{\textheight} \clearpage \meinegespeichertenWerte \noindent\rule{\textwidth}{\textheight} \end{document} \end{lstcode} Die \DescRef{\LabelBase.cmd.areaset}-Anweisung\IndexCmd{areaset} in der Dokumentpräambel dient dabei zusammen mit Option \DescRef{\LabelBase.option.areasetadvanced}\IndexOption{areasetadvanced} dazu, die Unterschiede zwischen der \DescRef{typearea.cmd.typearea}-Voreinstellung und der späteren Verwendung von \DescRef{\LabelBase.cmd.areaset} auszugleichen, wie dies bereits auf \DescPageRef{\LabelBase.option.areasetadvanced} erklärt wurde. Ohne diese Maßnahme könnte es insbesondere bei Verwendung von Optionen wie \DescRef{typearea.option.headinclude} und \DescRef{typearea.option.headheight} zu deutlichen Abweichungen bei den Randeinstellungen kommen. Wichtig\textnote{Achtung!} ist auch die Anweisung \DescRef{maincls.cmd.clearpage} vor dem Aufruf von \Macro{meinegespeichertenWerte}, damit die Wiederherstellung erst auf der nächsten Seite erfolgt. Bei doppelseitigen Dokumenten sollte bei Änderungen am Papierformat stattdessen sogar \DescRef{maincls.cmd.cleardoubleoddpage}\IndexCmd{cleardoubleoddpage} oder -- wenn keine \KOMAScript-Klasse zum Einsatz kommt -- \DescRef{maincls.cmd.cleardoublepage}\IndexCmd{cleardoublepage} verwendet werden.% \iffree{\par Außerdem wird \Macro{noindent} verwendet, um den normalen Absatzeinzug vor den schwarzen Kästen zu verhindern. Sie würden sonst kein korrektes Bild des Seitenlayouts wiedergeben.}{}% \end{Example} Bei\textnote{Achtung!} der Verwendung von \Macro{storeareas} ist zu beachten, dass sowohl \Macro{storeareas} als auch die damit definierte \PName{Anweisung} nicht innerhalb einer Gruppe aufgerufen werden sollten. Die Definition der \PName{Anweisung} erfolgt intern mit \Macro{newcommand}\IndexCmd{newcommand*}\important{\Macro{newcommand*}}. Bei erneuter Verwendung einer bereits definierten \PName{Anweisung} wird eine entsprechende Fehlermeldung ausgegeben. Oftmals\ChangedAt{v3.18}{\Package{typearea}} ist auch erwünscht, vor der Wiederherstellung der Einstelllungen per \PName{Anweisung} grundsätzlich bestimmte Aktionen wie beispielsweise ein \DescRef{maincls.cmd.cleardoubleoddpage} auszuführen. Dies kann man mit Hilfe von \Macro{BeforeRestoreareas} und \Macro{BeforeRestoreareas*} erreichen. Entsprechend kann man mit \Macro{AfterRestoreareas} und \Macro{AfterRestoreareas*} \PName{Code} nach der Wiederherstellung der Einstellungen ausführen lassen. Die Formen mit und ohne Stern unterscheiden sich insoweit, als die Sternform nur für noch nicht per \Macro{storeareas} gespeicherte Einstellungen gilt, während sich die Variante ohne Stern auch auf die zukünftige Verwendung bereits früher gespeicherter Einstellungen auswirkt.% % \EndIndexGroup \begin{Declaration} \Macro{AfterCalculatingTypearea}\Parameter{Anweisungen} \Macro{AfterCalculatingTypearea*}\Parameter{Anweisungen} \Macro{AfterSettingArea}\Parameter{Anweisungen} \Macro{AfterSettingArea*}\Parameter{Anweisungen} \end{Declaration}% Diese Anweisungen dienen der Verwaltung zweier Haken\Index{Haken} (engl. \emph{hooks}\Index{hook=\emph{hook}}). Die ersten beiden, \Macro{AfterCalculatingTypearea} und deren Sternform, ermöglichen es dem Experten jedes Mal, nachdem \Package{typearea} eine neue Auf"|teilung in Satzspiegel und Ränder berechnet hat, also nach jeder impliziten oder expliziten Ausführung von \DescRef{typearea.cmd.typearea}, \PName{Anweisungen} ausführen zu lassen. Entsprechendes leisten \Macro{AfterSettingArea}\ChangedAt{v3.11}{\Package{typearea}} und dessen Stern-Form für die Ausführung von \DescRef{typearea.cmd.areaset}. Die Normalformen arbeiten dabei global, während die Änderungen durch die Sternformen nur lokal wirksam sind. Die \PName{Anweisungen} werden jeweils unmittelbar vor \DescRef{\LabelBase.cmd.activateareas} ausgeführt.\iffree{}{ In \autoref{cha:modernletters} wird für die \emph{Letter-Class-Option} \File{asymTypB.lco} davon Gebrauch gemacht, um die Randverteilung zu ändern.}% % \EndIndexGroup \section{Lokale Einstellungen durch die Datei \File{typearea.cfg}} \seclabel{cfg} \BeginIndex{File}{typearea.cfg} \LoadNonFree{typearea-experts}{0} \section{Mehr oder weniger obsolete Optionen und Anweisungen} \seclabel{obsolete} \LoadNonFree{typearea-experts}{1} % \EndIndexGroup %%% Local Variables: %%% mode: latex %%% coding: utf-8 %%% TeX-master: "../guide" %%% End: % LocalWords: Hochformat Seitenspiegels