% ====================================================================== % scrlayer-notecolumn.tex % Copyright (c) Markus Kohm, 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. % ---------------------------------------------------------------------- % scrlayer-notecolumn.tex % Copyright (c) Markus Kohm, 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. % ====================================================================== % % Chapter about scrlayer-notecolumn of the KOMA-Script guide % Maintained by Markus Kohm % % ---------------------------------------------------------------------- % % Kapitel über scrlayer-notecolumn in der KOMA-Script-Anleitung % Verwaltet von Markus Kohm % % ============================================================================ \KOMAProvidesFile{scrlayer-notecolumn.tex}% [$Date: 2013-10-16 16:24:20 +0200 (Mi, 16. Okt 2013) $ KOMA-Script guide (chapter:scrlayer-notecolumn)] \chapter{Notizspalten mit \Package{scrlayer-notecolumn}} \labelbase{scrlayer-notecolumn} \BeginIndex{Package}{scrlayer-notecolumn}% Bis einschließlich Version~3.11b unterstützte \KOMAScript{} Notizspalten nur in Form der Marginalienspalte, die mit \Macro{marginpar} und \Macro{marginline} (siehe \autoref{sec:maincls.marginNotes}, \autopageref{desc:maincls.cmd.marginline}) mit Inhalt versehen werden können. Jene Art der Randnotizen hat allerdings einige Nachteile: \begin{itemize} \item Randnotizen können nur vollständig auf einer einzelnen Seite gesetzt werden. Seitenumbrüche innerhalb von Randnotizen sind nicht möglich. Dies führt teilweise dazu, dass die Randnotizen bis in den unteren Rand hinein ragen. \item Randnotizen in der Nähe des Seitenumbruchs können auf die nächste Seiten rutschen und dort im Falle des doppelseitigen Layouts mit alternierenden Marginalienspalten im falschen Rand ausgegeben werden. Dieses Problem ist mit dem Zusatzpaket \Package{mparhack}\IndexPackage{mparhack} oder durch Verwendung von \Macro{marginnote} aus dem Paket \Package{marginnote}\IndexPackage{marginnote} lösbar. \item Randnotizen innerhalb von Gleitumgebungen oder Fußnoten sind nicht möglich. Auch dieses Problem ist mit \Package{marginnote} lösbar. \item Es gibt nur eine Marginalienspalte oder, wenn mit \Macro{reversemarginpar} und \Macro{normalmarginpar} gearbeitet wird, auch zwei. \end{itemize} Die Verwendung von \Package{marginnote}\IndexPackage{marginnote} führt zu einem weiteren Problem. Da das Paket keine Kollisionserkennung besitzt, können sich Randnotizen, die in unmittelbarer Nähe veranlasst wurden, gegenseitig ganz oder teilweise überdecken. Darüber hinaus führt \Macro{marginnote} je nach den gewählten Einstellungen von \Package{marginnote} manchmal zu Veränderungen beim Zeilenabstand des normalen Textes. Das Paket \Package{scrlayer-notecolumn} tritt an, all diese Probleme zu lösen. Dazu stützt es sich auf die Grundfunktionalität von \Package{scrlayer}\IndexPackage{scrlayer}. Damit einher geht jedoch auch ein Nachteil:\textnote{Achtung!} Notizen können nur auf den Seiten ausgegeben werden, die einen auf \Package{scrlayer} basierenden Seitenstil besitzen. Dieser Nachteil lässt sich mit Hilfe von \Package{scrlayer-scrpage}\IndexPackage{scrlayer-scrpage} jedoch leicht auflösen oder sogar in einen Vorteil verwandeln. \section{Hinweise zum Entwicklungsstand} \label{sec:scrlayer-notecolumn.draft} Obwohl sich das Paket derzeit noch in einem recht frühen Entwicklungsstadium befindet, ist die Stabilität von weiten Teilen weniger eine Frage von \Package{scrlayer-notecolumn} als von \Package{scrlayer}. Dennoch ist davon auszugehen, dass sich auch in \Package{scrlayer-notecolumn} noch Fehler befinden. Es wird darum gebeten, diese bei Auffinden zu melden. Einige \emph{Unzulänglichkeiten} des Pakets sind jedoch auch der Minimierung des Aufwands geschuldet. So können Notizspalten zwar über Seiten hinweg umbrochen werden, allerdings findet dabei kein neuerlicher Absatzumbruch statt. Dies ist bei \TeX{} schlicht nicht vorgesehen. Da das Paket derzeit noch als experimentell gilt, findet sich die Anleitung hier im zweiten Teil der \KOMAScript-Anleitung. Dementsprechend richtet sie sich auch in erster Linie an erfahrene Anwender. Für Anfänger oder Anwender, die sich bereits deutlich auf dem Weg zum \LaTeX-Experten befinden, mag einiges in den nachfolgenden Erklärungen unklar oder gar unverständlich sein. Ich bitte um Nachsicht, dass ich bei experimentellen Paketen den Aufwand für die Anleitung halbwegs erträglich halten will. \section{Deklaration neuer Notizspalten} \label{sec:scrlayer-notecolumn.declaration} Beim Laden des Pakets wird bereits automatisch eine Notizspalte namens \PName{marginpar} deklariert. Wie der Name andeutet, liegt diese Notizspalte auf der Marginalienspalte von \Macro{marginpar} und \Macro{marginline}. Dabei werden auch \Macro{reversemarginpar} und \Macro{normalmarginpar} beachtet, allerdings nicht für die einzelnen Notizen, sondern nur für die gesamten Notizen einer Seite. Maßgeblich ist dabei die Einstellung, die am Ende der Seite, nämlich bei der Ausgabe der Notizspalte gilt. Dies sind im Übrigen auch die Voreinstellungen für alle neue deklarierten Notizspalten, soweit bei der Deklaration nichts anderes angegeben wurde. Es ist zu beachten\textnote{Achtung!}, dass Notizspalten nur auf Seiten ausgegeben werden, deren Seitenstil auf dem Paket \Package{scrlayer}\IndexPackage{scrlayer} basiert. Das Paket \Package{scrlayer} wird von \Package{scrlayer-notecolumn} automatisch geladen und stellt in der Voreinstellung lediglich den Seitenstil \Pagestyle{empty}\IndexPagestyle{empty} bereit. Werden weitere Seitenstile benötigt, wird zusätzlich das Paket \Package{scrlayer-scrpage}\IndexPackage{scrlayer-scrpage} empfohlen. \begin{Declaration} \Macro{DeclareNoteColumn}% \OParameter{Liste der Einstellungen}\Parameter{Name der Notizspalte}\\ \Macro{DeclareNewNoteColumn}% \OParameter{Liste der Einstellungen}\Parameter{Name der Notizspalte}\\ \Macro{ProvideNoteColumn}% \OParameter{Liste der Einstellungen}\Parameter{Name der Notizspalte}\\ \Macro{RedeclareNoteColumn}% \OParameter{Liste der Einstellungen}\Parameter{Name der Notizspalte}% \end{Declaration} \BeginIndex{Cmd}{DeclareNoteColumn}% \BeginIndex{Cmd}{DeclareNewNoteColumn}% \BeginIndex{Cmd}{ProvideNoteColumn}% \BeginIndex{Cmd}{RedeclareNoteColumn}% Mit Hilfe dieser Anweisungen können Notizspalten angelegt werden. Dabei erzeugt \Macro{DeclareNoteColumn} die Notizspalte ungeachtet der Tatsache, ob sie bereits existiert oder nicht, während \Macro{DeclareNewNoteColumn} einen Fehler ausgibt, falls der \PName{Name der Notizspalte} bereits für eine andere Notizspalte vergeben ist, und \Macro{ProvideNoteColumn} in eben diesem Fall schlicht nichts tut. Mit \Macro{RedeclareNoteColumn} wiederum kann nur eine bereits existierende Notiz-Spalte neu konfiguriert werden. Bei der Neukonfigurierung bereits existierender Notizspalten mit \Macro{DeclareNoteColumn} oder \Macro{RedeclareNoteColumn} gehen im übrigen die bereits erzeugten Notizen für diese Spalte nicht verloren, sondern bleiben erhalten. \BeginIndex{FontElement}{notecolumn.\PName{Name der Notizspalte}}% \BeginIndex{FontElement}{notecolumn.marginpar}% Für neue Notizspalten wird immer ein Element zur Änderung der Schriftattribute mit \Macro{setkomafont} und \Macro{addtokomafont} angelegt, falls dieses noch nicht existiert. Als Name für das Element wird \PValue{notecolumn.}\PName{Name der Notizspalte} verwendet. Dementsprechend existiert für die vordefinierte Notizspalte \PValue{marginpar} das Element \PValue{notecolumn.marginpar}. Die Voreinstellung kann bei der Deklaration einer Notizspalte direkt über die Option \Option{font} innerhalb der optionalen \PName{Liste der Einstellungen} angegeben werden.% \EndIndex{FontElement}{notecolumn.marginpar}% \EndIndex{FontElement}{notecolumn.\PName{Name der Notizspalte}}% Die \PName{Liste der Einstellungen} ist eine durch Komma separierte Liste von Einstellungen oder Optionen. Die verfügbaren Optionen sind in \autoref{tab:scrlayer-notecolumn.note.column.options} zu finden. Als Voreinstellung ist \Option{marginpar} immer gesetzt, kann aber durch individuelle Einstellungen überschrieben werden. \begin{desclist} \desccaption{% Mögliche Einstellungen für die Deklaration von Notizspalten% \label{tab:scrlayer-notecolumn.note.column.options}% }{% Mögliche Einstellungen für die Deklaration von Notizspalten (\emph{Fortsetzung})% }% \entry{\KOption{font}\PName{Schriftattribute}}{% Einstellung der \PName{Schriftattribute} der Notizspalte mit Hilfe von \Macro{setkomafont}. Für erlaubte Werte sei auf \autoref{sec:maincls.textmarkup}, \autopageref{desc:maincls.cmd.setkomafont} verwiesen.\par% Voreinstellung: \emph{leer}% }% \entry{\Option{marginpar}}{% Position und Breite der Notizspalte werden so eingestellt, dass sie der Marginalienspalte von \Macro{marginpar} entsprechen. Eine Umschaltung zwischen \Macro{reversemarginpar}\IndexCmd{reversemarginpar} und \Macro{normalmarginpar}\IndexCmd{normalmarginpar} wird immer nur am Ende der Seite bei der Ausgabe der Notizspalte beachtet. Es wird darauf hingewiesen, dass diese Option kein Argument erwartet oder erlaubt.\par% Voreinstellung: \emph{ja} }% \entry{\Option{normalmarginpar}}{% Position und Breite der Notizspalte werden so eingestellt, dass sie der Marginalienspalte von \Macro{marginpar} bei Einstellung \Macro{normalmarginpar} entsprechen. Es wird darauf hingewiesen, dass diese Option kein Argument erwartet oder erlaubt.\par% Voreinstellung: \emph{nein} }% \entry{\KOption{position}\PName{Abstand}}{% Die Notizspalte wird mit \PName{Abstand} vom linken Rand des Papiers gesetzt. Dabei sind für \PName{Abstand} auch komplexe Ausdrücke gestattet, solange diese voll expandierbar sind und zum Zeitpunkt der Ausgabe der Notizspalte zu einer Länge oder zu einem Längenwert oder einem Längenausdruck expandieren. Siehe \cite[Abschnitt~3.5]{manual:eTeX} für weitere Informationen zu Längenausdrücken.\par% Voreinstellung: \emph{durch Option \Option{marginpar}}% }% \entry{\KOption{width}\PName{Breite}}{% Die Notizspalte wird mit der angegebenen Breite gesetzt. Dabei sind für \PName{Breite} auch komplexe Ausdrücke gestattet, solange diese voll expandierbar sind und zum Zeitpunkt der Ausgabe der Notizspalte zu einer Länge oder einem Längenwert oder einem Längenausdruck expandieren. Siehe \cite[Abschnitt~3.5]{manual:eTeX} für weitere Informationen zu Längenausdrucken.\par% Voreinstellung: \emph{durch Option \Option{marginpar}}% }% \entry{\Option{reversemarginpar}}{% Position und Breite der Notizspalte werden so eingestellt, dass sie der Marginalienspalte von \Macro{marginpar} bei Einstellung \Macro{reversemarginpar} entsprechen. Es wird darauf hingewiesen, dass diese Option kein Argument erwartet oder erlaubt.\par% Voreinstellung: \emph{nein} }% \end{desclist} Da die Notizspalten mit Hilfe von \Package{scrlayer} definiert werden, wird auch für jede Notizspalte eine Ebene angelegt. Als Name für diese Ebene wird ebenfalls \PValue{notecolumn.}\PName{Name der Notizspalte} verwendet. Näheres zu Ebenen ist \autoref{sec:scrlayer.layers} zu entnehmen.% % \begin{Example} Angenommen Sie sind Professor für ulkiges Recht und wollen eine Abhandlung über das neue »Gesetz über die ausgelassene Verbreitung allgemeiner Späße«, kurz GüdaVaS, schreiben. Der Hauptaugenmerk soll dabei jeweils auf dem Kommentar zu einzelnen Paragraphen liegen. Sie entscheiden sich für ein zweispaltiges Layout, wobei der Kommentar in der Hauptspalte enthalten sein soll und die Paragraphen jeweils klein\iffree{ und in Farbe}{} in einer schmaleren Notizspalte rechts daneben. \begin{lstcode} \documentclass{scrartcl} \usepackage[ngerman]{babel} \usepackage{selinput} \SelectInputMappings{ adieresis={ä}, germandbls={ß}, } \usepackage[T1]{fontenc} \usepackage{lmodern} \usepackage{xcolor} \usepackage{scrjura} \setkomafont{contract.Paragraph}{\bfseries} \setkeys{contract}{preskip=-\dp\strutbox} \usepackage{scrlayer-scrpage} \usepackage{scrlayer-notecolumn} \newlength{\paragraphscolwidth} \AfterCalculatingTypearea{% \setlength{\paragraphscolwidth}{.333\textwidth}% \addtolength{\paragraphscolwidth}{-\marginparsep}% } \recalctypearea \DeclareNewNoteColumn[% position=\oddsidemargin+1in +.667\textwidth +\marginparsep, width=\paragraphscolwidth, font=\raggedright\footnotesize \color{blue} ]{paragraphs} \end{lstcode} Es wird ein einseitiger Artikel verfasst. Dazu wird die Sprache mit Hilfe des \Package{babel}\IndexPackage{babel}-Pakets auf Deutsch (neue Rechtschreibung) festgelegt. Die Eingabecodierung wird mit Hilfe von \Package{selinput}\IndexPackage{selinput} automatisch bestimmt. Als Schrift wird Latin Modern in 8-Bit-Codierung verwendet.\iffree{ Für die Farbeinstellungen wird das Paket \Package{xcolor}\IndexPackage{xcolor} genutzt.}{} Bezüglich des Setzens von Gesetzestexten mit \Package{scrjura} sei auf \iffree{dessen Anleitung}{\autoref{cha:scrjura}} verwiesen. Da ein Seitenstil mit Seitenzahl verwendet werden soll, wird das Paket \Package{scrlayer-scrpage} verwendet. Somit können Notizspalten auf allen Seiten ausgegeben werden. Dann wird das Paket \Package{scrlayer-notecolumn} für die Notizspalten geladen. Die gewünschte Breite der Notizspalte wird über \Macro{AfterCalculatingTypearea} nach jeder etwaigen Neuberechnung des Satzspiegels neu berechnet. Sie soll jeweils ein Drittel der Satzspiegelbreite betragen, wobei der Abstand zwischen Text und Notizspalte zu Lasten der Notizspalte geht. Mit dieser Information kann dann die neue Notizspalte definiert werden. Bei der Festlegung der Position wird ein einfacher Längenausdruck genutzt. Dabei ist zu beachten, dass \Length{oddsidemargin} nicht der gesamte linke Rand ist, sondern aus historischen Gründen der linke Rand abzüglich 1\Unit{inch}. Daher muss dieser Wert noch hinzugezählt werden. Damit ist die Deklaration abgeschlossen. Es ist zu beachten, dass die Notizspalte bisher im Textbereich ausgegeben wird. Die Notizspalte würde also den Text überschreiben. \begin{lstcode} \begin{document} \title{Kommentar zum GüdaVaS} \author{Professor R. O. Tenase} \date{11.\,11.~2011} \maketitle \tableofcontents \section{Vormerkung} Das GüdaVaS ist ohne jeden Zweifel das wichtigste Gesetz, das in Spaßmanien in den letzten eintausend Jahren verabschiedet wurde. Die erste Lesung fand bereits am 11.\,11.~1111 im obersten spaßmanischen Kongress statt, wurde aber vom damalige Spaßvesier abgelehnt. Erst nach Umwandlung der spaßmanischen, aberwitzigen Monarchie in eine repräsentative, witzige Monarchie durch W. Itzbold, den Urkomischen, am 9.\,9.~1999 war der Weg für dieses Gesetz endlich frei. \end{lstcode} Dadurch, dass der Textbereich nicht verkleinert wurde, wird hier der ganze Vorspann über die Gesamtbreite ausgegeben. Um das Beispiel zu testen, können Sie vorübergehend \begin{lstcode} \end{document} \end{lstcode} ergänzen. \end{Example} % Offen blieb in diesem Beispiel die Frage, wie dann aber der Text für den Kommentar schmaler gesetzt werden kann. Dies werden Sie bei der Fortsetzung des Beispiels erfahren.% \EndIndex{Cmd}{RedeclareNoteColumn}% \EndIndex{Cmd}{ProvideNoteColumn}% \EndIndex{Cmd}{DeclareNewNoteColumn}% \EndIndex{Cmd}{DeclareNoteColumn}% \section{Erstellen einer Notiz} \label{sec:scrlayer-notecolumn.makenote} Nachdem eine Notizspalte deklariert wurde, können Notizen für diese Spalte erstellt werden. Diese Notizen werden allerdings nicht unmittelbar ausgegeben, sondern zunächst nur in eine Hilfsdatei mit Endung »\File{.slnc}« geschrieben.\footnote{Ganz genau werden die Notizen sogar zunächst in die \File{aux}-Datei geschrieben und erst beim Lesen der \File{aux}-Datei innerhalb von \Macro{end}\PParameter{document} in die \File{slnc}-Datei übertragen. Dabei wird gegebenenfalls auch die Einstellung \Macro{nofiles} beachtet.} % Beim nächsten \LaTeX-Lauf wird diese Hilfsdatei dann Stück für Stück je nach Fortschritt des Dokuments wieder eingelesen und am Ende der Seite die Notizen für die jeweilige Seite ausgegeben. Es ist jedoch zu beachten\textnote{Achtung!}, dass Notizspalten nur auf Seiten ausgegeben werden, deren Seitenstil auf dem Paket \Package{scrlayer}\IndexPackage{scrlayer} basiert. Das Paket \Package{scrlayer} wird von \Package{scrlayer-notecolumn} automatisch geladen und stellt in der Voreinstellung lediglich den Seitenstil \Pagestyle{empty}\IndexPagestyle{empty} bereit. Werden weitere Seitenstile benötigt, wird zusätzlich das Paket \Package{scrlayer-scrpage}\IndexPackage{scrlayer-scrpage} empfohlen. \begin{Declaration} \Macro{makenote}\OParameter{Name der Notizspalte}\Parameter{Notiz} \end{Declaration} \BeginIndex{Cmd}{makenote}% Mit Hilfe dieser Anweisung kann eine \PName{Notiz} erstellt werden. Dabei wird die aktuelle vertikale Position als vertikale Position für den Anfang der \PName{Notiz} verwendet. Die horizontale Position für die Notiz ergibt sich aus der definierten Position der Notizspalte. Für die korrekte Funktion ist das Paket dabei auf \Macro{pdfsavepos}, \Macro{pdflastypos} und \Macro{pdfpageheight} angewiesen. Ohne diese Befehle funktioniert \Package{scrlayer-notecolumn} nicht. Dabei wird außerdem davon ausgegangen, dass die genannten Primitiven exakt die Ergebnisse von PDF\TeX{} liefern. Wird allerdings bei der Ausgabe der \PName{Notiz} eine Kollision mit einer früheren Notiz in derselben Notizspalte erkannt, so wird die \PName{Notiz} bis unter diese frühere Notiz verschoben. Passt die \PName{Notiz} nicht mehr auf die Seite, so wird sie ganz oder teilweise auf die nächste Seite umbrochen. Für welche Notizspalte die \PName{Notiz} erstellt werden soll, wird über das optionale Argument \PName{Name der Notizspalte} bestimmt. Ist kein optionales Argument angegeben, so wird die vordefinierte Notizspalte \PValue{marginpar} verwendet.% \begin{Example} Fügen wir nun dem Beispiel aus dem vorherigen Abschnitt einen kommentierten Paragraphen hinzu, wobei der Paragraph selbst in der neu definierten Notizspalte gesetzt werden soll. \begin{lstcode} \section{Analyse} \begin{addmargin}[0pt]{.333\textwidth} \makenote[paragraphs]{% \protect\begin{contract} \protect\Paragraph{title={Kein Witz ohne Publikum}} Ein Witz kann nur dort witzig sein, wo er auf ein Publikum trifft. \protect\end{contract} } Dies ist eine der zentralsten Aussagen des Gesetzes. Sie ist derart elementar, dass es durchaus angebracht ist, sich vor der Weisheit der Verfasser zu verbeugen. \end{lstcode} Die in \autoref{sec:maincls.lists}, \autopageref{desc:maincls.env.addmargin} dokumentierte Umgebung wird genutzt, um den Haupttext in der Breite um die Spalte für die Paragraphen zu vermindern. Hier ist auch eines der wenigen Probleme bei Verwendung von \Macro{makenote} zu erkennen. Da das obligatorische Argument in Dateien geschrieben wird, können Befehle innerhalb des Arguments leider \emph{zerbrechen}. Um das zu verhindern, wird empfohlen, vor alle Befehle ein \Macro{protect} zu setzen. Anderenfalls kann die Verwendung von Befehlen innerhalb dieses Arguments zu Fehlermeldungen führen. Prinzipiell könnten Sie das Beispiel nun bereits mit \begin{lstcode} \end{addmargin} \end{document} \end{lstcode} beenden, wenn Sie ein Ergebnis sehen wollen. \end{Example}% Wenn Sie das Beispiel testen, werden Sie feststellen, dass die Gesetzes-Spalte tiefer hinunter reicht als der Kommentartext. Wenn Sie zwecks Übung einen weiteren Abschnitt mit einem weiteren Paragraphen hinzufügen, ergibt sich eventuell das Problem, dass der Kommentar nicht unterhalb des Gesetzestextes, sondern direkt im Anschluss an den bisherigen Kommentar fortgesetzt wird. Eine Lösung für dieses Problem, werden Sie gleich kennenlernen.% \EndIndex{Cmd}{makenote}% \begin{Declaration} \Macro{syncwithnotecolumn}\OParameter{Name der Notizspalte} \end{Declaration} \BeginIndex{Cmd}{syncwithnotecolumn}% Mit Hilfe dieser Anweisung wird in einer Notizspalte und im Haupttext des Dokumente je ein Synchronisierungspunkt erstellt. Wann immer bei der Ausgabe einer Notizspalte oder des Haupttextes ein solcher Synchronisierungspunkt erreicht wird, wird eine Marke angelegt, deren Inhalt die aktuelle Seite und die aktuelle vertikale Position ist. Parallel zum Erstellen der Synchronisierungspunkte, wird ermittelt, ob in der Notizspalte und im Haupttext beim letzten \LaTeX-Lauf eine Marke angelegt wurde. Falls das der Fall ist, werden deren Werte miteinander verglichen. Liegt die Marke der Notizspalte tiefer auf der Seite oder auf einer späteren Seite, so wird im Haupttext bis zu der Stelle der Notizspalte vorgerückt. In der Regel sollten Synchronisierungspunkte nicht innerhalb eines Absatzes des Haupttextes, sondern nur zwischen diesen gesetzt werden. Wird \Macro{syncwithnotecolumn} dennoch innerhalb eines Absatzes verwendet, so wird der Synchronisierungspunkt im Haupttext tatsächlich erst nach der aktuellen Zeile eingefügt. In dieser Hinsicht ähnelt \Macro{syncwithnotecolumn} also beispielsweise \Macro{vspace}. Dadurch, dass Synchronisierungspunkte in den Notizspalten erst beim nächsten \LaTeX-Lauf erkannt werden, benötigt der Mechanismus mindestens drei \LaTeX-Läufe. Aus jeder neuen Synchronisierung können sich außerdem Verschiebungen für spätere Synchronisierungspunkte ergeben, was wiederum die Notwendigkeit weiterer \LaTeX-Läufe nach sich zieht. Zu erkennen sind solche Verschiebungen in der Regel an der Meldung: »\LaTeX{} Warning: Label(s) may have changed. Rerun to get cross-references right.« Aber auch Meldungen über undefinierte \emph{Labels} können auf die Notwendigkeit eines weiteren \LaTeX-Laufs hinweisen. Wird das optionale Argument nicht angegeben\footnote{Es sei an dieser Stelle darauf hingewiesen, dass ein leeres optionales Argument nicht gleichbedeutend mit dem Weglassen eines optionalen Arguments ist!}, so wird an seiner Stelle \PValue{marginpar}, also die vordefinierte Notizspalte verwendet. Es ist nicht erlaubt \Macro{syncwithnotecolumn} innerhalb einer Notiz selbst, also im obligatorischen Argument von \Macro{makenote}\IndexCmd{makenote} zu verwenden! Dieser Fehler kann derzeit nicht abgefangen werden und führt dazu, dass mit jedem \LaTeX-Lauf neue Verschiebungen auftreten, so dass nie ein endgültiger Zustand erreicht wird. Um zwei oder mehrere Notizspalten miteinander zu synchronisieren, sind diese stattdessen mit dem Haupttext zu synchronisieren, da dabei auch die Spalten miteinander synchronisiert werden. Die hierzu empfohlene Anweisung wird nachfolgend beschrieben.% % \begin{Example} Führen wir nun das obige Beispiel fort, indem wir zunächst einen Synchronisationspunkt und dann einen weiteren Paragraphen mit Kommentar hinzufügen: \begin{lstcode} \syncwithnotecolumn[paragraphs]\bigskip \makenote[paragraphs]{% \protect\begin{contract} \protect\Paragraph{title={Komik der Kultur}} \setcounter{par}{0}% Die Komik eines Witzes kann durch das kulturelle Umfeld, in dem er erzählt wird, bestimmt sein. Die Komik eines Witzes kann durch das kulturelle Umfeld, in dem er spielt, bestimmt sein. \protect\end{contract} } Die kulturelle Komponente eines Witzes ist tatsächlich nicht zu vernachlässigen. Über die politische Korrektheit der Nutzung des kulturellen Umfeldes kann zwar trefflich gestritten werden, nichtsdestotrotz ist die Treffsicherheit einer solchen Komik im entsprechendem Umfeld frappierend. Auf der anderen Seite kann ein vermeintlicher Witz im falschen kulturellen Umfeld auch zu einer echten Gefahr für den Witzeerzähler werden. \end{lstcode} Außer dem Synchronisationspunkt wurde hier auch noch ein vertikaler Abstand mit \Macro{bigskip} eingefügt, um die einzelnen Paragraphen und ihre Kommentare besser voneinander abzusetzen. Außerdem wird hier ein weiterer Punkt, der zu einem Problem werden kann, sichtbar. Da die Notizspalten mit Boxen arbeiten, die zusammengebaut und zerlegt werden, kann es bei Zählern innerhalb der Notizspalten teilweise zu Verschiebungen kommen. Im Beispiel würde daher der erste Absatz nicht mit 1, sondern mit 2 nummeriert. Dies kann jedoch mit einem beherzten Zurücksetzen des entsprechenden Zählers leicht korrigiert werden. Das Beispiel ist damit fast fertig, was noch fehlt, ist das Ende der Umgebungen: \begin{lstcode} \end{addmargin} \end{document} \end{lstcode} Tatsächlich wären natürlich auch noch die restlichen Paragraphen des Gesetztes zu kommentieren. Dies sei mir hier jedoch erlassen. \end{Example}% Doch halt! Was wäre, wenn in diesem Beispiel der Paragraph nicht mehr auf die Seiten passen würde? Würde er dann auf der nächsten Seite ausgegeben? Diese Frage wird im nächsten Abschnitt beantwortet werden. \EndIndex{Cmd}{syncwithnotecolumn}% \begin{Declaration} \Macro{syncwithnotecolumns}\OParameter{Liste von Notizspalte-Namen} \end{Declaration} \BeginIndex{Cmd}{syncwithnotecolumns}% Diese Anweisung führt eine Synchronisierung des Haupttextes mit allen in der mit Komma separierten \PName{Liste von Notizspalten-Namen} durch. Dabei wird der Haupttext mit der Notizspalte synchronisiert, deren Marke am weitesten hinten im Dokument steht. Somit werden als Nebeneffekt auch die Notizspalten untereinander synchronisiert. Wird das optionale Argument nicht angegeben oder ist es leer (oder beginnt es mit \Macro{relax}), so wird mit allen deklarierten Notizspalten synchronisiert.% \EndIndex{Cmd}{syncwithnotecolumns}% \section{Erzwungene Ausgabe von Notizspalten} \label{sec:scrlayer-notecolumn.clearnotes} Neben der normalen Ausgabe der Notizspalten, wie sie in \autoref{sec:scrlayer-notecolumn.makenote} beschrieben ist, ist es manchmal auch erforderlich alle aufgesammelten Notizen, die noch nicht ausgegeben wurden, auszugeben. Das ist insbesondere dann sinnvoll, wenn längere Notizen dazu führen, dass immer mehr Notizen nach unten und auf neue Seiten verschoben werden. Ein guter Zeitpunkt für eine solche erzwungene Ausgabe ist beispielsweise das Ende eines Kapitels oder das Ende des Dokuments. \begin{Declaration} \Macro{clearnotecolum}\OParameter{Name der Notizspalte} \end{Declaration} \BeginIndex{Cmd}{clearnotecolumn}% Mit dieser Anweisung werden alle Notizen einer bestimmen Notizspalte ausgegeben, die bis zum Ende der aktuellen Seite noch nicht ausgegeben sind, aber auf dieser oder einer vorherigen Seite erstellt wurden. Zur Ausgabe dieser noch anhängigen Notizen werden nach Bedarf Leerseiten erstellt. Während der Ausgabe der anhängigen Notizen dieser Notizspalte werden gegebenenfalls auch anhängige Notizen anderer Notizspalten ausgegeben, jedoch nur so lange, wie dies zu Ausgabe der anhängigen Notizen der angegebenen Notizspalte notwendig ist. Während der Ausgabe der anhängigen Notizen kann es auch geschehen, dass irrtümlich Notizen ausgegeben werden, die im vorherigen \LaTeX-Lauf auf den Seiten erstellt wurden, die nun durch die eingefügten Leerseiten ersetzt werden. Dies normalisiert sich in einem der nächsten \LaTeX-Läufe. Zu erkennen sind solche Verschiebungen in der Regel an der Meldung: »\LaTeX{} Warning: Label(s) may have changed. Rerun to get cross-references right.« Die Notizspalte, deren anhängige Notizen ausgegeben werden soll, ist über das optionale Argument, \PName{Name der Notizspalte}, angegeben. Ist kein solches Argument angegeben, so wird die vordefinierte Notizspalte \PValue{marginpar} verwendet. Dem aufmerksamen Leser wird nicht entgangen sein, dass die erzwungene Ausgabe einer Notizspalte der Synchronisierung nicht unähnlich ist. Allerdings befindet man sich nach der erzwungenen Ausgabe im Fall, dass tatsächlich eine Ausgabe stattfindet, am Anfang der Seite nach der letzten Ausgabe und nicht unmittelbar unterhalb der letzten Ausgabe. Dafür terminiert die erzwungene Ausgabe in der Regel mit weniger \LaTeX-Läufen.% \EndIndex{Cmd}{clearnotecolumn}% \begin{Declaration} \Macro{clearnotecolumns}\OParameter{Liste von Notizspalten-Namen} \end{Declaration} \BeginIndex{Cmd}{clearnotecolumns}% Diese Anweisung arbeitet vergleichbar mit \Macro{clearnotecolumn}. Allerdings kann hier als optionales Argument nicht nur eine Notizspalte angegeben werden, sondern es ist eine durch Komma getrennte Liste mehrere Namen von Notizspalten erlaubt. Es werden dann die anhängigen Notizen all dieser Spalten ausgegeben. Wurde das optionale Argument nicht angegeben oder ist es leer, so werden die anhängigen Notizen aller Notizspalten ausgegeben.% \EndIndex{Cmd}{clearnotecolumns}% \begin{Declaration} \KOption{autoclearnotecolumns}\PName{Ein-Aus-Schalter} \end{Declaration} \BeginIndex{Option}{autoclearnotecolumns}% In der Regel wird man anhängige Notizen immer dann ausgeben lassen, wenn im Dokument explizit oder implizit -- beispielsweise in Folge von \Macro{chapter} -- die Anweisung \Macro{clearpage} ausgeführt wird. Dies ist auch am Ende eines Dokuments innerhalb von \Macro{end}\PParameter{document} der Fall. Über Option \Option{autoclearnotecolumns} kann daher gesteuert werden, ob bei Ausführung von \Macro{clearpage} automatisch auch \Macro{clearnotecolumns} ohne Argument ausgeführt werden soll. Da davon ausgegangen wird, dass dies in der Regel erwünscht ist, ist die Option in der Voreinstellung aktiv. Man kann sie jedoch über die entsprechenden Werte für einfache Schalter (siehe \autoref{tab:truefalseswitch} auf \autopageref{tab:truefalseswitch}) jederzeit aus- und auch wieder einschalten. Es ist zu beachten, dass im Falle der Deaktivierung der automatischen Ausgabe anhängiger Notizen am Ende des Dokument Notizen ganz oder teilweise verloren gehen können. Daher sollte man in diesem Fall vor \Macro{end}\PParameter{document} sicherheitshalber ein \Macro{clearnotecolumns} einfügen. Damit ist nun auch die Frage nach dem Beispiel im letzten Abschnitt beantwortet, ob der Paragraph auch komplett ausgegeben würde, wenn er auf die nächste Seite umbrochen werden müsste. Dies ist in der Voreinstellung selbstverständlich der Fall. Da es jedoch nach dem Ende der \Environment{addmargin}-Umgebung geschehen würde, könnte es eventuell noch zu Überlappungen durch nachfolgenden Text kommen. Daher wäre es im Beispiel durchaus sinnvoll nach der \Environment{addmargin}-Umgebung einen weiteren Synchronisationspunkt einzufügen. Das Ergebnis des Beispiels ist übrigens in \autoref{fig:scrlayer-notecolumn.example} zu sehen. \begin{figure} \KOMAoptions{captions=bottombeside}% \setcapindent{0pt}% \begin{captionbeside}[{Eine Ergebnisseite zu dem Beispiel in \autoref{cha:scrlayer-notecolumn}}]{Eine Ergebnisseite zu dem Beispiel aus diesem Kapitel\label{fig:scrlayer-notecolumn.example}}[l] \frame{\includegraphics[width=.5\textwidth,keepaspectratio]% {scrlayer-notecolumn-example}} \end{captionbeside} \end{figure} \EndIndex{Option}{autoclearnotecolumns}% % \EndIndex{Package}{scrlayer-notecolumn}% %%% Local Variables: %%% mode: latex %%% mode: flyspell %%% coding: iso-latin-1 %%% ispell-local-dictionary: "de_DE" %%% TeX-master: "scrlayer-de.tex" %%% TeX-PDF-mode: t %%% End: % LocalWords: Randnotizen Entwicklungsstadium Notizspalte Notizspalten % LocalWords: Neukonfigurierung Synchronisierungspunkt