% ======================================================================
% scrlayer-notecolumn.tex
% Copyright (c) Markus Kohm, 2013-2019
%
% 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-2019
%
% 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: 2019-10-09 15:19:04 +0200 (Wed, 09 Oct 2019) $
                  KOMA-Script guide (chapter:scrlayer-notecolumn)]

\chapter{Notizspalten mit \Package{scrlayer-notecolumn}}
\labelbase{scrlayer-notecolumn}

\BeginIndexGroup
\BeginIndex{Package}{scrlayer-notecolumn}%
Bis einschließlich Version~3.11b unterstützte \KOMAScript{} Notizspalten nur
in Form der Marginalienspalte, die mit \DescRef{maincls.cmd.marginpar} und
\DescRef{maincls.cmd.marginline} (siehe \autoref{sec:maincls.marginNotes},
\DescPageRef{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\textnote{Seitenumbruch} innerhalb von Randnotizen
  sind nicht möglich. Dies führt teilweise dazu, dass die Randnotizen bis in
  den unteren Rand hineinragen.
\item Randnotizen in der Nähe des Seitenumbruchs können auf die nächste Seite
  rutschen und dort im Falle des doppelseitigen Layouts mit alternierenden
  Marginalienspalten im falschen Rand\textnote{Zuordnung zum richtigen 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} (siehe
  \cite{package:marginnote}) lösbar.
\item Randnotizen innerhalb von Gleitumgebungen\textnote{Gleitumgebungen} oder
  Fußnoten\textnote{Fußnoten} sind nicht möglich. Auch dieses Problem ist mit
  \Package{marginnote} lösbar.
\item Es gibt nur eine Marginalienspalte\textnote{mehrere Notizspalten} oder
  allenfalls zwei, wenn mit \Macro{reversemarginpar} und
  \Macro{normalmarginpar} gearbeitet wird, wobei \Macro{reversemarginpar} bei
  doppelseitigen Dokumenten kaum zu gebrauchen ist.
\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
\hyperref[cha:scrlayer]{\Package{scrlayer}}\IndexPackage{scrlayer}%
\important{\hyperref[cha:scrlayer]{\Package{scrlayer}}}. Damit einher geht
jedoch auch ein Nachteil:\textnote{Achtung!} Notizen können nur auf den Seiten
ausgegeben werden, die einen auf \hyperref[cha:scrlayer]{\Package{scrlayer}}
basierenden Seitenstil besitzen. Dieser Nachteil lässt sich mit Hilfe von
\hyperref[cha:scrlayer-scrpage]{\Package{scrlayer-scrpage}}%
\important{\hyperref[cha:scrlayer-scrpage]{\Package{scrlayer-scrpage}}}%
\IndexPackage{scrlayer-scrpage} jedoch leicht
auf"|lösen oder sogar in einen Vorteil verwandeln.


\section{Hinweise zum Entwicklungsstand}
\seclabel{draft}

Das Paket wurde ausschließlich zur Demonstration des Potentials von
\hyperref[cha:scrlayer]{\Package{scrlayer}}\important{\hyperref[cha:scrlayer]{\Package{scrlayer}}}
als sogenannter\textnote{Proof of Concept} \emph{Proof of Concept}
entwickelt. Obwohl es sich 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
\hyperref[cha:scrlayer]{\Package{scrlayer}}. Dennoch ist davon auszugehen,
dass sich auch in \Package{scrlayer-notecolumn} noch Fehler befinden. Es wird
darum gebeten, diese bei Auf"|finden 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 eher als experimentell\textnote{experimentell} gilt, findet sich
die Anleitung hier im zweiten Teil \iffree{der \KOMAScript-Anleitung}{dieses
  Buches}. 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\textnote{für \LaTeX-Experten} befinden, mag daher einiges
in den nachfolgenden Erklärungen unklar oder gar unverständlich
sein. \iffree{Ich bitte um Nachsicht, dass ich bei experimentellen Paketen den
  Aufwand für die Anleitung halbwegs erträglich halten will.}{Sie sollten
  jedoch genügen, um einfache Aufgaben mit \Package{scrlayer-notecolumn} lösen
  zu können. Gleichzeitig finden Entwickler hoffentlich nützliche Anregungen
  für eigene Ideen.}

\iffalse% Umbruchoptimierung
Es sei auch darauf\textnote{Achtung!} hingewiesen, dass der \KOMAScript-Autor
nicht für die Weiterentwicklung des Pakets garantiert und nur eingeschränkten
Support dafür bietet. Das liegt in der Natur eines Pakets, das nur zu
Demonstrationszwecken geschrieben wurde.%
\fi

\LoadCommonFile{options}% \section{Frühe oder späte Optionenwahl}

\LoadCommonFile{textmarkup}% \section{Textauszeichnungen}

\section{Deklaration neuer Notizspalten}
\seclabel{declaration}

Beim Laden des Pakets wird bereits automatisch eine Notizspalte namens
\PValue{marginpar} deklariert. Wie der Name andeutet, liegt diese Notizspalte
im Bereich der normalen Marginalienspalte von \DescRef{maincls.cmd.marginpar}
und \DescRef{maincls.cmd.marginline}. Dabei werden auch die Einstellungen
\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. Will man hingegen innerhalb einer Seite
sowohl Notizen links als auch rechts neben dem Haupttext haben, so sollte man
sich eine zweite Notizspalte definieren.

Die Voreinstellungen für alle neu deklarierten Notizspalten entsprechen im
Übrigen den erwähnten Einstellungen für die vordefinierte
\PValue{marginpar}. %
\iftrue% Umbruchoptimierung
Diese können bei der Deklaration jedoch leicht geändert werden.%
\fi

Es ist zu beachten\textnote{Achtung!}, dass Notizspalten nur auf Seiten
ausgegeben werden, deren Seitenstil auf dem Paket
\hyperref[cha:scrlayer]{\Package{scrlayer}}\IndexPackage{scrlayer}%
\important{\hyperref[cha:scrlayer]{\Package{scrlayer}}} basiert. Das Paket
\hyperref[cha:scrlayer]{\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
\hyperref[cha:scrlayer-scrpage]{\Package{scrlayer-scrpage}}%
\IndexPackage{scrlayer-scrpage}%
\important{\hyperref[cha:scrlayer-scrpage]{\Package{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}
Mit Hilfe dieser Anweisungen können Notizspalten angelegt werden. Dabei
erzeugt \Macro{DeclareNoteColumn} die Notizspalte ungeachtet der Tatsache, ob
sie bereits existiert, 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 \DescRef{\LabelBase.cmd.setkomafont} und \DescRef{\LabelBase.cmd.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\textnote{Name des Elements} \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},
\autopageref{tab:scrlayer-notecolumn.note.column.options} zu
finden. Als\textnote{Voreinstellung: Option \Option{marginpar}} Voreinstellung
ist \Option{marginpar} immer gesetzt, kann aber durch individuelle
Einstellungen überschrieben werden.

Da die Notizspalten mit Hilfe von \hyperref[cha:scrlayer]{\Package{scrlayer}}%
\important{\hyperref[cha:scrlayer]{\Package{scrlayer}}} definiert werden, wird
auch für jede Notizspalte eine Ebene\Index{Ebenen} angelegt. Als
Name\textnote{Name der Ebene} für diese Ebene wird ebenfalls
\PValue{notecolumn.}\PName{Name der Notizspalte} verwendet. Näheres zu Ebenen
ist \autoref{sec:scrlayer.layers}, ab \autopageref{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.Clause}{\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\textnote{Sprache mit \Package{babel}} 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\textnote{Gesetz mit
    \hyperref[cha:scrjura]{\Package{scrjura}}} mit
  \hyperref[cha:scrjura]{\Package{scrjura}}\IndexPackage{scrjura} sei auf
  \iffree{dessen Anleitung}{\autoref{cha:scrjura}} verwiesen.

  Da ein Seitenstil\textnote{Seitenstil mit
    \hyperref[cha:scrlayer-scrpage]{\Package{scrlayer-scrpage}}} mit
  Seitenzahl verwendet werden soll, wird das Paket
  \hyperref[cha:scrlayer-scrpage]{\Package{scrlayer-scrpage}}%
  \IndexPackage{scrlayer-scrpage} geladen. Somit können Notizspalten auf allen
  Seiten ausgegeben werden.

  Dann wird das Paket \Package{scrlayer-notecolumn}\textnote{Notizspalte mit
    \Package{scrlayer-notecolumn}} für die Notizspalten geladen. Die
  gewünschte Breite der Notizspalte wird über
  \DescRef{typearea-experts.cmd.AfterCalculatingTypearea}%
  \IndexPackage{typearea}%
  \IndexCmd{AfterCalculatingTypearea} nach jeder etwaigen Neuberechnung des
  Satzspiegels\textnote{Satzspiegel mit
    \hyperref[cha:typearea]{\Package{typearea}}}%
  \IndexPackage{typearea} neu berechnet. Sie soll jeweils ein Drittel der
  Satzspiegelbreite betragen, wobei der Abstand zwischen Text und Notizspalte
  zu Lasten der Notizspalte geht. %
  \iftrue% Umbruchoptimierung
  Diese ist also effektiv um \Length{marginparsep}\IndexLength{marginparsep}
  schmaler.%
  \fi

  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 damaligen 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,\textnote{Achtung!} 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 dem Beispiel die Frage, wie der Text für den Kommentar schmaler
gesetzt werden kann. Dies werden Sie bei der Fortsetzung des Beispiels
erfahren.%
%
%\begin{table}% Umbruchoptimierung: Tabelle hinter das Beispiel verschoben
\begin{desclist}
  \desccaption{%
%  \caption[Mögliche Einstellungen für die Deklaration von Notizspalten]{%
    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})%
  }%
%  \begin{desctabular}
    \entry{\OptionVName{font}{Schriftattribute}}{%
      Einstellung der \PName{Schriftattribute} der Notizspalte mit Hilfe von
      \DescRef{\LabelBase.cmd.setkomafont}. Für erlaubte Werte sei auf
      \autoref{sec:\LabelBase.textmarkup},
      \DescPageRef{\LabelBase.cmd.setkomafont} verwiesen.\par%
      Voreinstellung: \emph{leer}%
    }%
    \entry{\Option{marginpar}}{%
      Position und Breite der Notizspalte werden so eingestellt, dass sie der
      Marginalienspalte von \DescRef{maincls.cmd.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 \DescRef{maincls.cmd.marginpar} bei Einstellung
      \Macro{normalmarginpar} entsprechen. Es wird darauf hingewiesen, dass
      diese Option kein Argument erwartet oder erlaubt.\par%
      Voreinstellung: \emph{nein}%
    }%
    \entry{\OptionVName{position}{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{\Option{reversemarginpar}}{%
      Position und Breite der Notizspalte werden so eingestellt, dass sie der
      Marginalienspalte von \DescRef{maincls.cmd.marginpar} bei Einstellung
      \Macro{reversemarginpar} entsprechen. Es wird darauf hingewiesen, dass
      diese Option kein Argument erwartet oder erlaubt.\par%
      Voreinstellung: \emph{nein}%
    }%
    \entry{\OptionVName{width}{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ängenausdrücken.\par%
      Voreinstellung: \emph{durch Option \Option{marginpar}}%
    }%
%  \end{desctabular}
%\end{table}
\end{desclist}
\EndIndexGroup


\section{Erstellen einer Notiz}
\seclabel{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. 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}\IndexCmd{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 werden die Notizen für die jeweilige Seite
ausgegeben.

\iffree{}{\pagebreak}% Umbruchoptimierung
Es ist jedoch zu beachten\textnote{Achtung!}, dass Notizspalten nur auf Seiten
ausgegeben werden, deren Seitenstil auf dem Paket
\hyperref[cha:scrlayer]{\Package{scrlayer}}\IndexPackage{scrlayer}%
\important{\hyperref[cha:scrlayer]{\Package{scrlayer}}} basiert. Das Paket
\hyperref[cha:scrlayer]{\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
\hyperref[cha:scrlayer-scrpage]{\Package{scrlayer-scrpage}}%
\IndexPackage{scrlayer-scrpage}%
\important{\hyperref[cha:scrlayer-scrpage]{\Package{scrlayer-scrpage}}}
empfohlen.


\begin{Declaration}
  \Macro{makenote}\OParameter{Name der Notizspalte}\Parameter{Notiz}\\
  \Macro{makenote*}\OParameter{Name der Notizspalte}\Parameter{Notiz}
\end{Declaration}
Mit Hilfe dieser Anweisungen 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}\IndexCmd{pdfsavepos},
\Macro{pdflastypos}\IndexCmd{pdflastypos} und
\Macro{pdfpageheight}\IndexLength{pdfpageheight} beziehungsweise deren
Entsprechungen bei neueren Lua\TeX-Versionen 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\textnote{Kollisionsauf"|lösung} 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\textnote{Seitenumbruch}\Index{Seiten>Umbruch}, 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\Clause{%
          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}, \DescPageRef{maincls.env.addmargin}
  dokumentierte Umgebung
  \DescRef{maincls.env.addmargin}\IndexEnv{addmargin}\textnote{Spaltenbreite
    mit \DescRef{maincls.env.addmargin}} 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\textnote{zerbrechliche 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}%
Beim Testen des Beispiels, werden Sie feststellen, dass die Gesetzes\-spalte
tiefer hinunter reicht als der Kommentartext. Wenn\textnote{Achtung!} 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.

Das\ChangedAt{v0.1.2583}{\Package{scrlayer-notecolumn}} im Beispiel erwähnte
Problem mit dem Zerbrechen von Befehlen tritt bei der
Sternvariante\important{\Macro{makenote*}} normalerweise nicht auf. Diese
verwendet \Macro{detokenize}, um die Expansion zu verhindern. Das bedeutet
aber auch, dass man in der \PName{Notiz} keine Befehle verwenden sollte, die
ihre Bedeutung innerhalb des Dokuments verändern.

Allerdings treten bei beiden Formen zwei andere Probleme\textnote{Achtung!}
auf. Das erste betrifft die Verwendung von Farbe mit Hilfe von
\Package{color}\IndexPackage{color} oder \Package{xcolor}\IndexPackage{xcolor}
innerhalb der Notizspalten. Um Farbumschaltungen innerhalb der Notizspalten zu
ermöglichen, wäre für jede Notizspalte eine eigene Farbverwaltung mit einem
sogenannten \emph{Color Stack} notwendig. Da das Paket lediglich als
Machbarkeitsstudie entworfen ist und \XeTeX{} nicht mehrere \emph{Color
  Stacks} unterstützt, sind mit \XeTeX{} Farbumschaltungen nur eingeschränkt
über die Schriftattribute des Elements \FontElement{notecolumn.\PName{Name der
    Notizspalte}} möglich, wodurch der Aufwand für die Implementierung einer
eigenen Farbverwaltung umgangen wurde.

Das zweite, eher konzeptionelle Problem\textnote{Achtung!} ist, dass die
Hilfsdatei mit den Informationen zum Inhalt der Notizspalte während der
Verarbeitung der Kopfzeile einer Seite eingelesen wird. Das hat vor allem dann
Auswirkungen, wenn dies geschieht, während eine Umgebung wie
\Environment{verbatim} aktiv ist. In diesem Fall wären während des Einlesens
der Hilfsdatei die \Macro{catcode}-Einstellungen dieser Umgebung aktiv. Dies
würde zwangsläufig zu Fehlern in der Verarbeitung und Ausgabe führen. Um dies
abzumildern, werden während \Macro{begin}\PParameter{document} die
\Macro{catcode}-Einstellungen der in \Macro{dospecials}\IndexCmd{dospecials}
gespeicherten Zeichen gespeichert und während dem Einlesen der Hilfsdatei
explizit wiederhergestellt.%
\EndIndexGroup


\begin{Declaration}
  \Macro{syncwithnotecolumn}\OParameter{Name der Notizspalte}
\end{Declaration}
Mit Hilfe dieser Anweisung wird in einer Notizspalte und im Haupttext des
Dokuments je ein
Synchronisierungspunkt\textnote{Synchronisation}\Index{Synchronisation}
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\textnote{Hinweis!} 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}\IndexCmd{vspace}.

Dadurch, dass Synchronisierungspunkte in den Notizspalten erst beim nächsten
\LaTeX-Lauf\textnote{mehrere \LaTeX-Läufe} 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, so wird an seiner Stelle
\PValue{marginpar}, also die vordefinierte Notizspalte
verwendet. Es\textnote{Achtung!} sei an dieser Stelle darauf hingewiesen, dass
ein leeres optionales Argument nicht gleichbedeutend mit dem Weglassen eines
optionalen Arguments ist!

Es ist nicht\textnote{Achtung!} 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 auf"|treten, 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\Clause{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
    entsprechenden 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\textnote{Achtung!} 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\textnote{Zähler in
    Notizspalten} 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
  Gesetzes 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.
\EndIndexGroup


\begin{Declaration}
  \Macro{syncwithnotecolumns}\OParameter{Liste von Notizspalte}
\end{Declaration}
Diese Anweisung führt eine Synchronisierung des Haupttextes mit allen in der
mit Komma separierten \PName{Liste von Notizspalten} 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.%
\EndIndexGroup


\section{Erzwungene Ausgabe von Notizspalten}
\seclabel{clearnotes}

Neben der normalen Ausgabe der Notizspalten, wie sie im vorherigen Abschnitt
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\Index{Ausgabe>erzwungene} ist beispielsweise das
Ende eines Kapitels oder das Ende des Dokuments.

\begin{Declaration}
  \Macro{clearnotecolumn}\OParameter{Name der Notizspalte}
\end{Declaration}
Mit dieser Anweisung werden alle Notizen einer bestimmen Notizspalte
ausgegeben, die\textnote{anhängige Notizen}\Index{Notiz>anhaengige=anhängige}
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 zur
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\textnote{irrtümliche
  Notizen}\Index{Notiz>irrtuemliche=irrtümliche} 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\textnote{erzwungene Ausgabe vs. Synchronisation} 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.%
\EndIndexGroup


\begin{Declaration}
  \Macro{clearnotecolumns}\OParameter{Liste von Notizspalten-Namen}
\end{Declaration}
Diese Anweisung arbeitet vergleichbar mit
\DescRef{\LabelBase.cmd.clearnotecolumn}. Allerdings kann hier als optionales
Argument nicht nur eine Notizspalte angegeben werden, sondern es ist eine
durch Komma getrennte Liste mehrerer 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.%
\EndIndexGroup


\begin{Declaration}
  \OptionVName{autoclearnotecolumns}{Ein-Aus-Wert}
\end{Declaration}
In der Regel wird man anhängige Notizen immer dann ausgeben lassen, wenn im
Dokument explizit oder implizit -- beispielsweise in Folge von
\DescRef{maincls.cmd.chapter} -- die Anweisung \DescRef{maincls.cmd.clearpage}
ausgeführt wird. Dies ist auch am Ende eines Dokuments innerhalb von
\Macro{end}\PParameter{document} der Fall. Über die Option
\Option{autoclearnotecolumns} kann daher gesteuert werden, ob bei Ausführung
von \DescRef{maincls.cmd.clearpage} automatisch auch
\DescRef{\LabelBase.cmd.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\textnote{Achtung!}, 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
\DescRef{\LabelBase.cmd.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
\DescRef{maincls.env.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 \DescRef{maincls.env.addmargin}-Umgebung
einen weiteren Synchronisationspunkt einzufügen.

Das Ergebnis des Beispiels ist übrigens in
\autoref{fig:scrlayer-notecolumn.example} zu sehen.\iffree{}{ Dabei wurde
  lediglich die Farbeinstellung für die \PValue{paragraphs}-Spalte von Blau in
  Grau geändert.}

\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=.667\textwidth,keepaspectratio]%
    {scrlayer-notecolumn-example}}
  \end{captionbeside}
\end{figure}
\EndIndexGroup
%
\EndIndexGroup


%%% Local Variables:
%%% mode: latex
%%% mode: flyspell
%%% coding: utf-8
%%% ispell-local-dictionary: "de_DE"
%%% TeX-master: "scrlayer-de.tex"
%%% TeX-PDF-mode: t
%%% End: 

%  LocalWords:  Randnotizen Entwicklungsstadium Notizspalte Notizspalten
%  LocalWords:  Neukonfigurierung Synchronisierungspunkt marginpar marginline
%  LocalWords:  Haupttext Demonstrationszwecken Längenausdruck Gesetzestexten
%  LocalWords:  Längenausdrücken Satzspiegels typearea scrlayer notecolumn
%  LocalWords:  AfterCalculatingTypearea scrjura scrpage Farbeinstellung
%  LocalWords:  Sternvariante
