% ======================================================================
% 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
