summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/koma-script/source/scrlayer-notecolumn.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/koma-script/source/scrlayer-notecolumn.dtx
Initial commit
Diffstat (limited to 'macros/latex/contrib/koma-script/source/scrlayer-notecolumn.dtx')
-rw-r--r--macros/latex/contrib/koma-script/source/scrlayer-notecolumn.dtx1787
1 files changed, 1787 insertions, 0 deletions
diff --git a/macros/latex/contrib/koma-script/source/scrlayer-notecolumn.dtx b/macros/latex/contrib/koma-script/source/scrlayer-notecolumn.dtx
new file mode 100644
index 0000000000..324a5e8330
--- /dev/null
+++ b/macros/latex/contrib/koma-script/source/scrlayer-notecolumn.dtx
@@ -0,0 +1,1787 @@
+% \CheckSum{1747}
+% \iffalse^^A meta-comment
+% ======================================================================
+% scrlayer-notecolumn.dtx
+% Copyright (c) Markus Kohm, 2013-2018
+%
+% 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 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.dtx
+% Copyright (c) Markus Kohm, 2013-2018
+%
+% Diese Datei ist Teil der LaTeX2e KOMA-Script-Sammlung.
+%
+% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz,
+% Version 1.3c.
+% 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 und dieses Werks.
+%
+% Dieses Werk hat den LPPL-Verwaltungs-Status "author-maintained"
+% (allein durch den Autor verwaltet).
+%
+% Der Aktuelle Verwalter und Autor dieses Werkes ist Markus Kohm.
+%
+% Dieses Werk besteht aus den in manifest.txt aufgefuehrten Dateien.
+% ======================================================================
+% \fi^^A meta-comment
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \iffalse^^A meta-comment
+%%% From File: $Id: scrlayer-notecolumn.dtx 3011 2018-08-29 07:35:17Z kohm $
+%<identify>%%% (run: identify)
+%<init>%%% (run: init)
+%<options>%%% (run: options)
+%<body>%%% (run: body)
+%<final>%%% (run: final)
+%<*dtx>
+\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
+\begingroup
+ \def\filedate$#1: #2-#3-#4 #5${\gdef\filedate{#2/#3/#4}}
+ \filedate$Date: 2018-08-29 09:35:17 +0200 (Wed, 29 Aug 2018) $
+ \def\filerevision$#1: #2 ${\gdef\filerevision{v0.1.#2}}
+ \filerevision$Revision: 3011 $
+ \edef\reserved@a{%
+ \noexpand\endgroup
+ \noexpand\ProvidesFile{scrlayer-notecolumn.dtx}%
+ [\filedate\space\filerevision\space
+ KOMA-Script package source
+ }%
+\reserved@a
+%</dtx>
+%<*identify|doc>
+%<interface>\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+%<interface>\ProvidesPackage{scrlayer-notecolumn}[%
+%<doc>\ProvidesFile{scrlayer-notecolumn.tex}[%
+% Sometimes following will be replaced by !KOMASCRIPTVERSION:
+%!SCRLAYERVERSION
+%<interface> package
+%</identify|doc>
+%<*dtx|identify|doc>
+ (end user interface for scrlayer)]
+%</dtx|identify|doc>
+%<*dtx>
+\ifx\documentclass\undefined
+ \input scrdocstrip.tex
+ \@@input scrkernel-version.dtx
+ \@@input scrstrip.inc
+ \KOMAdefVariable{COPYRIGHTFROM}{2013}
+ \KOMAdefVariable{SCRLAYERVERSION}{%
+ \space\space\filedate\space\filerevision\space KOMA-Script
+ }%
+ \expandafter\let\csname ifbetawas\expandafter\endcsname
+ \csname ifbeta\endcsname
+ \expandafter\let\csname ifbeta\expandafter\endcsname
+ \csname iftrue\endcsname
+ \generate{\usepreamble\defaultpreamble
+ \file{scrlayer-notecolumn.sty}{%
+ \from{scrlayer-notecolumn.dtx}{interface,trace,notecolumn,identify}%
+ \from{scrlayer.dtx}{interface,trace,notecolumn,init}%
+ \from{scrlayer-notecolumn.dtx}{interface,trace,notecolumn,init}%
+ \from{scrlayer.dtx}{interface,trace,notecolumn,options}%
+ \from{scrlayer-notecolumn.dtx}{interface,trace,notecolumn,options}%
+ \from{scrlayer.dtx}{interface,trace,notecolumn,body}%
+ \from{scrlayer-notecolumn.dtx}{interface,trace,notecolumn,body}%
+ \from{scrlayer-notecolumn.dtx}{interface,trace,notecolumn,final}%
+ \from{scrlogo.dtx}{logo}%
+ }%
+ }
+ \expandafter\let\csname ifbeta\expandafter\endcsname
+ \csname ifbetawas\endcsname
+ \@@input scrstrop.inc
+\else
+ \let\endbatchfile\relax
+\fi
+\endbatchfile
+ \documentclass{scrdoc}
+ \addtolength{\textwidth}{-1em}
+ \addtolength{\marginparwidth}{2em}
+ \addtolength{\oddsidemargin}{2em}
+ \usepackage[ngerman,english]{babel}
+ \usepackage{url,babelbib}\bibliographystyle{babalpha-fl}
+ \usepackage{listings}
+ \usepackage{scrhack}
+ \usepackage{etoolbox}
+ \pretocmd\DescribeMacro{\ifhmode\else\bigskip\noindent\fi}{}{}
+ \pretocmd\DescribeEnv{\ifhmode\else\bigskip\noindent\fi}{}{}
+ \pretocmd\DescribeOption{\ifhmode\else\bigskip\noindent\fi}{}{}
+
+ \CodelineIndex
+ \RecordChanges
+ \GetFileInfo{scrlayer-notecolumn.dtx}
+ \title{The \texttt{scrlayer} interface \texttt{scrlayer-notecolumn}%
+ \footnote{This is version \fileversion\ of file \texttt{\filename}.}}
+ \date{\filedate}
+ \author{Markus Kohm}
+
+ \newenvironment{Explain}{\par}{\par}
+ \newcommand*{\length}{}
+ \let\length\Length
+ \let\endlength\endLength
+ \let\Macro\cs
+ \let\Length\Macro
+ \let\Package\textsf
+ \let\Class\Package
+ \let\File\texttt
+ \let\Option\texttt
+ \newcommand*{\KOption}[1]{\Option{#1}\texttt{=}}
+ \newcommand*{\OptionValue}[2]{\Option{#1}\texttt{=}\PValue{#2}}
+ \let\Counter\texttt
+ \let\Environment\texttt
+ \let\ShowOutput\quote
+ \let\endShowOutput\endquote
+ \let\Pagestyle\texttt
+ \newcommand*{\Parameter}[1]{\texttt{\marg{#1}}\linebreak[1]}
+ \newcommand*{\OParameter}[1]{\texttt{\oarg{#1}}\linebreak[1]}
+ \newcommand*{\MParameter}[2]{\texttt{(\meta{#1},\meta{#2})}\linebreak[1]}
+ \providecommand\PParameter[1]{\mbox{\texttt{\{#1\}}}\linebreak[1]}
+ \let\PName\meta
+ \let\PValue\texttt
+ \providecommand*{\autoref}[1]{\expandafter\AUTOREF#1:}
+ \providecommand*{\AUTOREF}{}
+ \makeatletter
+ \def\AUTOREF#1:#2:{%
+ \edef\@tempa{#1}%
+ \edef\@tempb{tab}\ifx\@tempa\@tempb table~\fi
+ \edef\@tempb{sec}\ifx\@tempa\@tempb section~\fi
+ \ref{#1:#2}%
+ }
+ \providecommand*{\IndexCmd}[2][]{}
+ \providecommand*{\textnote}[2][]{}
+ \providecommand*\eTeX{\leavevmode\hbox{$\varepsilon$}-\TeX}
+ \providecommand*\NTS{%
+ \leavevmode\hbox{$\cal N\kern-0.35em\lower0.5ex\hbox{$\cal T$}%
+ \kern-0.2emS$}}
+
+ \lstnewenvironment{lstcode}{\lstset{language=[LaTeX]TeX}}{}
+ \makeatother
+ \sloppy% YOU SHOULD NOT DO THIS!!!
+
+ \begin{document}
+ \maketitle
+ \begin{abstract}
+ This is only the implementation documentation of package
+ \Package{scrlayer-notecolumn}. See the English or German \KOMAScript{}
+ manual for more information about usage of the package!
+ \end{abstract}
+ \tableofcontents
+ \DocInput{\filename}
+ \PrintChanges
+ \PrintIndex
+ \end{document}
+%</dtx>
+% \fi^^A meta-comment
+%
+% \selectlanguage{english}
+%
+% \changes{v0.0}{2013/04/26}{start of interface}
+%
+% \StopEventually{}
+%
+%
+% \iffalse
+%<*interface>
+%<*identify>
+% \fi
+%
+%\iffalse
+%</identify>
+%\fi
+%
+%
+% \section{Initialising some Values before the Options}
+%
+% \iffalse^^A meta-comment
+%<*init>
+% \fi^^A meta-comment
+%
+% Initialisation before all options (even the options from
+% \File{scrlayer.dtx}).
+%
+% Here we test the used pdf\TeX{} primitives.
+% \changes{v0.1}{2015/10/07}{ready for renaming \cs{pdfsavepos} and
+% \cs{pdflastypos} in luaTeX}^^A
+% \changes{v0.1.2483}{2016/06/28}{grouping fixed}^^A
+% \begin{macrocode}
+\@tempswatrue
+\scr@ifundefinedorrelax{pdfsavepos}{%
+ \scr@ifundefinedorrelax{savepos}{%
+ \expandafter\@tempswafalse
+ }{%
+ \let\scr@savepos\savepos
+ }%
+}{%
+ \let\scr@savepos\pdfsavepos
+}
+\scr@ifundefinedorrelax{pdflastypos}{%
+ \scr@ifundefinedorrelax{lastypos}{%
+ \expandafter\@tempswafalse
+ }{%
+ \let\scr@lastypos\lastypos
+ }%
+}{%
+ \let\scr@lastypos\pdflastypos
+}%
+\if@tempswa\else
+ \PackageError{scrlayer-notecolumn}{missing pdfTeX/luaTeX features}{%
+ This package needs \string\pdfsavepos\space or \string\savepos\space
+ and\MessageBreak
+ \string\pdflastypos\space or \string\lastypos.\MessageBreak
+ This error is fatal, because usage of the package without these
+ features\MessageBreak
+ cannot work!\MessageBreak
+ You shouldn't continue, but if you'd try, I'll try to abort the LaTeX run
+ }%
+ \batchmode\csname @@end\endcsname\end
+\fi
+% \end{macrocode}
+%
+% \iffalse^^A meta-comment
+%</init>
+% \fi^^A meta-comment
+%
+% \section{Making a Note Column}
+%
+% The package supports a various number of note columns. Each is referenced by
+% a unique name.
+%
+% \begin{macro}{\DeclareNoteColumn}
+% \begin{description}
+% \item[\OParameter{option list}:] a comma-separated list of
+% \texttt{\meta{key}=\meta{value}} pairs.
+% \item[\Parameter{string}:] the name of the note column (must be fully
+% expandable and expand to a string only).
+% \end{description}
+% That's the primary command for note columns. It defines everything, the note
+% column needs.
+% \begin{macrocode}
+%<*body>
+\scrlayerAddToInterface\DeclareNoteColumn{%
+ \newcommand*{\DeclareNoteColumn}[2][]{%
+% \end{macrocode}
+% First of all we need a box register. The contents of the note column will be
+% build inside of this register. Since \eTeX{} registers shouldn't be a
+% problem. User should use package \Package{etex}, if he or she runs out of
+% registers. Note, that the registers will stay allocated, if the interface
+% will be removed! Nevertheless, the name will be destroyed!
+% \begin{macrocode}
+ \@ifundefined{slnc@#2@box}{%
+ \expandafter\newsavebox\csname slnc@#2@box\endcsname
+ \scrlayerOnAutoRemoveInterface[scrlayer-notecolumn.sty]{%
+ \expandafter\let\csname slnc@#2@box\endcsname\relax
+ }%
+ }{}%
+% \end{macrocode}
+% There's also a kind of item stack of unprocessed notes for each note column.
+% \begin{macrocode}
+ \@ifundefined{slnc@#2@unprocessed}{%
+ \@namedef{slnc@#2@unprocessed}{}%
+ \scrlayerOnAutoRemoveInterface[scrlayer-notecolumn.sty]{%
+ \expandafter\let\csname slnc@#2@unprocessed\endcsname\relax
+ }%
+ }{}%
+% \end{macrocode}
+% Next we need a horizontal positions and a width for the note column. Neither
+% the horizontal position nor the width are stretchable or shrinkable. The
+% position should be variable depending on the page. So it's better to use a
+% macro instead of a length. The width isn't more variable than, e.g., the
+% text width. So we can use a macro too. Both will be initialised to the
+% normal marginal note column.
+% \begin{macrocode}
+ \@ifundefined{slnc@#2@pos}{%
+ \scrlayerOnAutoRemoveInterface[scrlayer-notecolumn.sty]{%
+ \expandafter\let\csname slnc@#2@pos\endcsname\relax
+ }%
+ }{}%
+ \@ifundefined{slnc@#2@width}{%
+ \scrlayerOnAutoRemoveInterface[scrlayer-notecolumn.sty]{%
+ \expandafter\let\csname slnc@#2@width\endcsname\relax
+ }%
+ }{}%
+% \end{macrocode}
+% If there isn't a font element for the (new) note column, we define a new one
+% and add it to the auto-remove code:
+% \begin{macrocode}
+ \@ifundefined{scr@fnt@notecolumn.#2}{%
+ \@ifundefined{@notecolumn.#2font}{%
+ \scrlayerOnAutoRemoveInterface[scrlayer-notecolumn.sty]{%
+ \expandafter\let\csname @notecolumn.#2font\endcsname\relax
+ }%
+ }{%
+ \PackageInfo{scrlayer-notecolumn}{using already defined
+ macro\MessageBreak
+ `\expandafter\string\csname @notecolumn.#2font\endcsname' for font
+ element\MessageBreak
+ `notecolumn.#2'%
+ }%
+ }%
+ \newkomafont{notecolumn.#2}{}%
+ \scrlayerOnAutoRemoveInterface[scrlayer-notecolumn.sty]{%
+ \expandafter\let\csname scr@fnt@notecolumn.#2\endcsname\relax
+ }%
+ }{%
+ \PackageInfo{scrlayer-notecolumn}{using already defined font
+ element\MessageBreak
+ `notecolumn.#2'%
+ }%
+ }%
+% \end{macrocode}
+% After the initialisation we process the options, that may change the initial
+% values.
+% \begin{macrocode}
+ \newcommand*{\slnc@name}{}%
+ \edef\slnc@name{#2}%
+ \FamilyExecuteOptions[.definenotecolumn]{KOMAarg}{marginpar,#1}%
+ \let\slnc@name\relax
+% \end{macrocode}
+% The values are set up, so they may be used to declare a layer.
+% \begin{macrocode}
+ \DeclareLayer[%
+ foreground,%
+ align=tl,%
+ voffset=1in+\topmargin+\headheight+\headsep,%
+ height=\dimexpr\textheight+\topskip\relax,%
+ hoffset=\csname slnc@#2@pos\endcsname,%
+ width=\csname slnc@#2@width\endcsname,%
+ contents=\slnc@processnotes{#2}%
+ ]{notecolumn.#2}
+% \end{macrocode}
+% We need to add the layer to every page style. The easiest way to do this is
+% to add it to the pseudo layer page style \Pagestyle{@everystyle@}.
+% \changes{v0.1.1681}{2014/02/05}{add the layer only once}
+% \begin{macrocode}
+ \IfLayerAtPageStyle{@everystyle@}{notecolumn.#2}{}{%
+ \AddLayersToPageStyle{@everystyle@}{notecolumn.#2}%
+% \end{macrocode}
+% On auto-removing the interface, the layer should be removed from
+% \Pagestyle{@everystyle@} and should be destroyed.
+% \begin{macrocode}
+ }%
+ \scrlayerOnAutoRemoveInterface[scrlayer-notecolumn.sty]{%
+ \RemoveLayersFromPageStyle{@everystyle@}{notecolumn.#2}%
+ \DestroyLayer{notecolumn.#2}%
+ }%
+% \end{macrocode}
+% Last but not least, we add the new note column to the note column procession
+% list.
+% \begin{macrocode}
+ \@cons\slnc@processnotecolumns{{#2}}%
+ }%
+}
+% \end{macrocode}
+% \begin{macro}{\slnc@processnotecolumns}
+% This is a list of all declared note columns in \LaTeX{} syntax (using
+% \Macro{@cons} and \Macro{@elt} etc.).
+% \begin{macrocode}
+\scrlayerAddToInterface\slnc@processnotecolumns{%
+ \newcommand*{\slnc@processnotecolumns}{}%
+}
+% \end{macrocode}
+% \end{macro}^^A \slnc@processnotecolumns
+% \begin{macrocode}
+%</body>
+% \end{macrocode}
+% One note column will be declared by default:
+% \begin{macrocode}
+%<*final>
+\DeclareNoteColumn{marginpar}
+%</final>
+%<*body>
+% \end{macrocode}
+% \begin{macro}{\slnc@testforpagestylewarning}
+% Not all page styles are layer page styles, but only layer page styles can be
+% extended by the note column layers. So we warn, if another page style has
+% been selected.
+% \begin{macrocode}
+\scrlayerAddToInterface\slnc@testforpagestylewarning{%
+ \newcommand*{\slnc@testforpagestylewarning}{%
+ \IfLayerPageStyleExists{\currentpagestyle}{}{%
+ \PackageWarning{scrlayer-notecolumn}{%
+ output of note columns delayed,\MessageBreak
+ because with `\currentpagestyle'\MessageBreak
+ a page style has been selected, that\MessageBreak
+ isn't a layer page style,%
+ }%
+ }%
+ }%
+}
+\AfterSelectAnyPageStyle{\slnc@testforpagestylewarning}
+% \end{macrocode}
+% \end{macro}%^^A \slnc@testforpagestylewarning
+% \begin{option}{position}
+% \begin{option}{width}
+% \begin{option}{font}
+% \begin{option}{marginpar}
+% \begin{option}{normalmarginpar}
+% \begin{option}{reversemarginpar}
+% Last but not least we have to define the options for the \PName{option
+% list}.
+% \begin{macrocode}
+\DefineFamilyMember[.definenotecolumn]{KOMAarg}
+\DefineFamilyKey[.definenotecolumn]{KOMAarg}{position}{%
+ \@namedef{slnc@\slnc@name @pos}{\dimexpr #1\relax}%
+ \FamilyKeyStateProcessed
+}
+\scrlayer@AddCsToInterface{KV@KOMAarg.definenotecolumn@position}
+\scrlayer@AddCsToInterface{KV@KOMAarg.definenotecolumn@position@default}
+\DefineFamilyKey[.definenotecolumn]{KOMAarg}{width}{%
+ \@namedef{slnc@\slnc@name @width}{\dimexpr #1\relax}%
+ \FamilyKeyStateProcessed
+}
+\scrlayer@AddCsToInterface{KV@KOMAarg.definenotecolumn@width}
+\scrlayer@AddCsToInterface{KV@KOMAarg.definenotecolumn@width@default}
+\DefineFamilyKey[.definenotecolumn]{KOMAarg}{font}{%
+ \setkomafont{notecolumn.\slnc@name}{#1}%
+ \FamilyKeyStateProcessed
+}
+\scrlayer@AddCsToInterface{KV@KOMAarg.definenotecolumn@font}
+\scrlayer@AddCsToInterface{KV@KOMAarg.definenotecolumn@font@default}
+\DefineFamilyKey[.definenotecolumn]{KOMAarg}{marginpar}[\relax]{%
+ \FamilyKeyStateProcessed
+ \scrlayer@testunexpectedarg{marginpar}{#1}%
+ \edef\reserved@a{\noexpand\slnc@defpos{\slnc@name}}\reserved@a
+ \@namedef{slnc@\slnc@name @width}{\marginparwidth}%
+}
+\scrlayer@AddCsToInterface{KV@KOMAarg.definenotecolumn@marginpar}
+\scrlayer@AddCsToInterface{KV@KOMAarg.definenotecolumn@marginpar@default}
+% \end{macrocode}
+% \begin{macro}{\slnc@defpos}
+% Little helper for option \Option{marginpar}. The argument is the expanded
+% name of the note column.
+% \begin{macrocode}
+\scrlayerAddToInterface\slnc@defpos{%
+ \newcommand*\slnc@defpos[1]{%
+ \@namedef{slnc@#1@pos}{%
+ \ifodd\value{page}
+ \if@reversemargin
+% \end{macrocode}
+% The reverse marginal note column on odd pages is at the left margin.
+% \begin{macrocode}
+ \dimexpr \oddsidemargin+1in
+ -\marginparsep-\csname slnc@#1@width\endcsname\relax
+ \else
+% \end{macrocode}
+% The normal marginal note column on odd pages is the right margin.
+% \begin{macrocode}
+ \dimexpr \oddsidemargin+1in
+ +\textwidth+\marginparsep\relax
+ \fi
+ \else
+ \if@twoside
+ \if@reversemargin
+% \end{macrocode}
+% The reverse marginal note column on even pages is the right margin.
+% \begin{macrocode}
+ \dimexpr \evensidemargin+1in
+ +\textwidth+\marginparsep\relax
+ \else
+% \end{macrocode}
+% The normal marginal note column on even pages is at the left margin.
+% \begin{macrocode}
+ \dimexpr \evensidemargin+1in
+ -\marginparsep-\csname slnc@#1@width\endcsname\relax
+ \fi
+ \else
+% \end{macrocode}
+% \begin{macrocode}
+% If not in two-side mode, do the same already done for odd pages.
+ \if@reversemargin
+ \dimexpr \oddsidemargin+1in
+ -\marginparsep-\csname slnc@#1@width\endcsname\relax
+ \else
+ \dimexpr \oddsidemargin+1in
+ +\textwidth+\marginparsep\relax
+ \fi
+ \fi
+ \fi
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}%^^A \slnc@defpos
+% \begin{macrocode}
+\DefineFamilyKey[.definenotecolumn]{KOMAarg}{normalmarginpar}[\relax]{%
+ \FamilyKeyStateProcessed
+ \scrlayer@testunexpectedarg{normalmarginpar}{#1}%
+ \edef\reserved@a{\noexpand\slnc@defnormalpos{\slnc@name}}\reserved@a
+ \@namedef{slnc@\slnc@name @width}{\marginparwidth}%
+}
+\scrlayer@AddCsToInterface{KV@KOMAarg.definenotecolumn@normalmarginpar}
+\scrlayer@AddCsToInterface{KV@KOMAarg.definenotecolumn@normalmarginpar@default}
+% \end{macrocode}
+% \begin{macro}{\slnc@defnormalpos}
+% Little helper for option \Option{normalmarginpar}. The argument is the
+% expanded name of the note column.
+% \begin{macrocode}
+\scrlayerAddToInterface\slnc@defnormalpos{%
+ \newcommand*\slnc@defnormalpos[1]{%
+ \@namedef{slnc@#1@pos}{%
+ \ifodd\value{page}
+% \end{macrocode}
+% The normal marginal note column on odd pages is the right margin.
+% \begin{macrocode}
+ \dimexpr \oddsidemargin+1in
+ +\textwidth+\marginparsep\relax
+ \else
+ \if@twoside
+% \end{macrocode}
+% The normal marginal note column on even pages is at the left margin.
+% \begin{macrocode}
+ \dimexpr \evensidemargin+1in
+ -\marginparsep-\csname slnc@#1@width\endcsname\relax
+ \else
+% \end{macrocode}
+% \begin{macrocode}
+% If not in two-side mode, do the same already done for odd pages.
+ \dimexpr \oddsidemargin+1in
+ +\textwidth+\marginparsep\relax
+ \fi
+ \fi
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}%^^A \slnc@defnormalpos
+% \begin{macrocode}
+\DefineFamilyKey[.definenotecolumn]{KOMAarg}{reversemarginpar}[\relax]{%
+ \FamilyKeyStateProcessed
+ \scrlayer@testunexpectedarg{reversemarginpar}{#1}%
+ \edef\reserved@a{\noexpand\slnc@defreversepos{\slnc@name}}\reserved@a
+ \@namedef{slnc@\slnc@name @width}{\marginparwidth}%
+}
+\scrlayer@AddCsToInterface{KV@KOMAarg.definenotecolumn@reversemarginpar}
+\scrlayer@AddCsToInterface{KV@KOMAarg.definenotecolumn@reversemarginpar@default}
+% \end{macrocode}
+% \begin{macro}{\slnc@defreversepos}
+% Little helper for option \Option{reversemarginpar}. The argument is the
+% expanded name of the note column.
+% \begin{macrocode}
+\scrlayerAddToInterface\slnc@defreversepos{%
+ \newcommand*\slnc@defreversepos[1]{%
+ \@namedef{slnc@#1@pos}{%
+ \ifodd\value{page}
+% \end{macrocode}
+% The reverse marginal note column on odd pages is at the left margin.
+% \begin{macrocode}
+ \dimexpr \oddsidemargin+1in
+ -\marginparsep-\csname slnc@#1@width\endcsname\relax
+ \else
+ \if@twoside
+% \end{macrocode}
+% The reverse marginal note column on even pages is the right margin.
+% \begin{macrocode}
+ \dimexpr \evensidemargin+1in
+ +\textwidth+\marginparsep\relax
+ \else
+% \end{macrocode}
+% \begin{macrocode}
+% If not in two-side mode, do the same already done for odd pages.
+ \dimexpr \oddsidemargin+1in
+ -\marginparsep-\csname slnc@#1@width\endcsname\relax
+ \fi
+ \fi
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}%^^A \slnc@defreversepos
+% \begin{macrocode}
+%</body>
+% \end{macrocode}
+% \end{option}%^^A reversemarginpar
+% \end{option}%^^A normalmarginpar
+% \end{option}%^^A marginpar
+% \end{option}%^^A font
+% \end{option}%^^A width
+% \end{option}%^^A position
+% \end{macro}%^^A \DeclareNoteColumn
+%
+% \begin{macro}{\DeclareNewNoteColumn}
+% \begin{macro}{\ProvideNoteColumn}
+% \begin{macro}{\RedeclareNoteColumn}
+% Like \Macro{DeclareNoteColumn} but with restrictions, if the note column has
+% (not) been declared already.
+% \begin{macrocode}
+%<*body>
+\scrlayerAddToInterface\DeclareNewNoteColumn{%
+ \newcommand*{\DeclareNewNoteColumn}[2][]{%
+ \scr@ifundefinedorrelax{slnc@#2@box}{}{%
+ \PackageError{scrlayer-notecolumn}{note column `#2' already defined}{%
+ You may declare only note columns, that haven't been declared
+ previously using\MessageBreak
+ \string\DeclareNewNoteColumn. See also the alternatives
+ \string\RedeclareNoteColumn,\MessageBreak
+ \string\ProvideNoteColumn, and \string\DeclareNoteColumn.\MessageBreak
+ Nevertheless, if you'll continue, declaration will be done.%
+ }%
+ }%
+ \DeclareNoteColumn[{#1}]{#2}%
+ }%
+}
+\scrlayerAddToInterface\ProvideNoteColumn{%
+ \newcommand*{\ProvideNoteColumn}[2][]{%
+ \scr@ifundefinedorrelax{slnc@#2@box}{}{%
+ \PackageInfo{scrlayer-notecolumn}{\string\ProvideNoteColumn{#2}
+ ignored,\MessageBreak
+ because of already defined\MessageBreak
+ not column}%
+ }{%
+ \DeclareNoteColumn[{#1}]{#2}%
+ }%
+ }%
+}
+\scrlayerAddToInterface\RedeclareNoteColumn{%
+ \newcommand*{\RedeclareNoteColumn}[2][]{%
+ \scr@ifundefinedorrelax{slnc@#2@box}{%
+ \PackageError{scrlayer-notecolumn}{note column `#2' undefined}{%
+ You may declare only note columns, that have been declared
+ previously using\MessageBreak
+ \string\RedeclareNoteColumn. See also the alternatives
+ \string\DeclareNewNoteColumn,\MessageBreak
+ \string\ProvideNoteColumn, and \string\DeclareNoteColumn.\MessageBreak
+ Nevertheless, if you'll continue, declaration will be done.%
+ }%
+ }{}%
+ \DeclareNoteColumn[{#1}]{#2}%
+ }%
+}
+%</body>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \section{Setting a Note Column}
+%
+% We already have commands to declare note columns. But we also need a command
+% to put contents into the note columns and to output the note columns.
+%
+% \begin{macro}{\tf@slnc}
+% \changes{v0.1.2395}{2016/03/25}{write to \texttt{aux}-file with
+% \cs{if@filesw}}^^A
+% \begin{macro}{\slnc@initwrite}
+% \begin{macro}{\slnc@openwrite}
+% \changes{v0.1.2928}{2018/02/02}{use \cs{closein} instead of \cs{closeout}
+% to close \cs{slnc@file}}^^A
+% First of all we need a file to write the notes to. We use the
+% \File{aux}-file to write into the file, because we need to read the file
+% while the document will be typeset and the same time we need to write into
+% the file. Note, that the file will be still reserved on auto-removing the
+% interface!
+% \begin{macrocode}
+%<*body>
+\scrlayerAddToInterface\tf@slnc{%
+ \newwrite\tf@slnc
+ \AtBeginDocument{%
+ \if@filesw
+ \immediate\write\@auxout{%
+ \noexpand\csname slnc@initwrite\noexpand\endcsname
+ }%
+ \fi
+ }%
+ \AtEndDocument{\let\slnc@initwrite\slnc@openwrite}%
+}
+\scrlayerAddToInterface\slnc@initwrite{}%
+\scrlayerAddToInterface\slnc@openwrite{%
+ \newcommand*{\slnc@openwrite}{%
+ \immediate\closein\slnc@file
+%<*trace>
+ \PackageInfo{scrlayer-notecolumn}{%
+ Opening `\jobname.slnc'\MessageBreak
+ for writing}%
+%</trace>
+ \immediate\openout\tf@slnc\jobname.slnc
+ }%
+}
+% \end{macrocode}
+% After reading the main \File{aux}-file at |\end{document}|, we again
+% calculate the md5 checksum of the \File{slnc}-file. If it has been changed
+% we set |\if@tempswa| to |\iftrue| to provocate a rerun message.
+% \changes{v0.1.2872}{2018/01/17}{usage of Lua function
+% \texttt{slncmdfivesum}}^^A
+% \changes{v0.1.2972}{2018/04/01}{usage of not yet documented Xe\TeX{}
+% primitive \cs{mdfivesum}}^^A
+% \begin{macrocode}
+\AfterReadingMainAux{%
+ \immediate\closeout\tf@slnc
+ \begingroup
+ \scr@ifundefinedorrelax{pdfmdfivesum}{%
+ \scr@ifundefinedorrelax{mdfivesum}{%
+ \ifdefined\directlua
+ \edef\reserved@a{\directlua{slncmdfivesum("\jobname.slnc")}}%
+ \else
+ \let\reserved@a\relax
+ \fi
+ }{%
+ \edef\reserved@a{\mdfivesum file {\jobname.slnc}}%
+ }%
+ }{%
+ \edef\reserved@a{\pdfmdfivesum file {\jobname.slnc}}%
+ }%
+ \ifx\reserved@a\relax
+ \PackageWarningNoLine{scrlayer-notecolumn}{%
+ \string\pdfmdfivesum\space unavailable.\MessageBreak
+ The package needs \string\pdfmdfivesum,\MessageBreak
+ \string\mdfivesum, or LuaTeX to test whether\MessageBreak
+ or not one more LaTeX run is needed to place the\MessageBreak
+ note columns correctly. If these are unavailable\MessageBreak
+ you have to do the decision without the help\MessageBreak
+ of the package%
+ }%
+ \else
+ \ifx \slnc@mdfivesum\reserved@a
+%<*trace>
+ \PackageInfo{scrlayer-notecolumn}{%
+ MD5 of current `\jobname.slnc':\MessageBreak
+ \reserved@a}%
+%</trace>
+ \else
+%<*trace>
+ \PackageWarningNoLine{scrlayer-notecolumn}{%
+ MD5 of slnc-file changed.\MessageBreak
+ Last: \slnc@mdfivesum\MessageBreak
+ New: \space \reserved@a\MessageBreak
+ At least one more LaTeX rerun needed to\MessageBreak
+ make note columns right%
+ }%
+%</trace>
+ \aftergroup\@tempswatrue
+ \fi
+ \fi
+ \endgroup
+}
+%</body>
+% \end{macrocode}
+% \end{macro}^^A \slnc@openwrite
+% \end{macro}^^A \slnc@initwrite
+% \end{macro}^^A \tf@slnc
+%
+% \begin{macro}{\makenote}
+% \begin{description}
+% \item[\OParameter{string}:] the name of the note column the note should be
+% added to (must be fully expandable and expand to a string only). The
+% default value is \PValue{marginpar}.
+% \item[\Parameter{code}:] the code, that should become par of the note
+% column. Note, that this will be written protected to a file. So you have
+% to use \Macro{protect} if a macro shouldn't be expanded while writing or
+% may break while writing.
+% \end{description}
+% There is a star variant with the same parameters, that writes the
+% \meta{code} un-expanded. To do so, we need some internal commands.
+% \begin{macro}{\slnc@unexpanded}
+% \changes{0.1.2583}{2017/02/08}{new (internal)}^^A
+% \begin{macro}{\slnc@makenote}
+% \changes{0.1.2583}{2017/02/08}{new (internal)}^^A
+% \begin{macrocode}
+%<*body>
+\scrlayerAddToInterface\slnc@unexpanded{%
+ \let\slnc@unexpanded\detokenize
+}
+\scrlayerAddToInterface\makenote{%
+ \newcommand*{\makenote}{%
+ \kernel@ifstar{\let\slnc@unexpanded\detokenize\slnc@makenote}%
+ {\let\slnc@unexpanded\@firstofone\slnc@makenote}%
+ }%
+}
+\scrlayerAddToInterface\slnc@makenote{%
+ \newcommand{\slnc@makenote}[2][marginpar]{%
+ \@bsphack
+ \scr@savepos
+ \addtocontents{slnc}{%
+ \string\slnc@note{#1}%
+ {\noexpand\number\value{slncpage}}%
+ {\noexpand\number\scr@lastypos}%
+ {\slnc@unexpanded{#2}}%
+ }%
+ \@esphack
+ }%
+}
+% \end{macrocode}
+%^^A \begin{counter}{slncpage}
+% This counter should be increased once per page with note column. This may
+% be done simply at a once per page executed hook of
+% \Pagestyle{@everystyle@}. You should note, that auto-remove wouldn't
+% remove the counter.
+% \begin{macrocode}
+\@ifundefined{c@slncpage}{%
+ \newcounter{slncpage}%
+ \AddToLayerPageStyleOptions{@everystyle@}{%
+ onbackground=\stepcounter{slncpage}%
+ }%
+}{}
+%</body>
+% \end{macrocode}
+%^^A \end{counter}^^A slncpage
+% \end{macro}^^A \slnc@unexpanded
+% \end{macro}^^A \slnc@makenote
+% \end{macro}^^A \makenote
+%
+% \begin{macro}{\slnc@processnotes}
+% \begin{description}
+% \item[\Parameter{string}:] the name of the note column (must be fully
+% expandable an expand to a string only).
+% \end{description}
+% Each note column typesets the notes with this command. It works in following
+% steps:
+% \begin{macrocode}
+%<*body>
+\scrlayerAddToInterface\slnc@processnotes{%
+ \newcommand*{\slnc@processnotes}[1]{%
+% \end{macrocode}
+% Read as long notes from the notes file until the number at \#2 of
+% \Macro{slnc@note} in the file is greater than \Counter{slncpage}. Put all
+% these to the corresponding unprocessed list.
+% \begin{macrocode}
+ \begingroup
+ \slnc@readnotes{\value{slncpage}}%
+% \end{macrocode}
+% Process the unprocessed list of the current note column
+% \begin{macrocode}
+ \expandafter\let\expandafter\reserved@a
+ \csname slnc@#1@unprocessed\endcsname
+ \expandafter\global
+ \expandafter\let\csname slnc@#1@unprocessed\endcsname\@empty
+ \def\slnc@notesyncfonttest##1{%
+ \ifhmode
+ \PackageError{scrlayer-notecolumn}{%
+ illegal font setting for `notecolumn.##1'%
+ }{%
+ Current setting of font for `notecolumn.##1' switches
+ from\MessageBreak
+ vertical mode to horizontal mode. This is
+ illegal!\MessageBreak
+ You have to change the font setting to fix
+ this.\MessageBreak
+ If you'll continue vertical alignment of notes may fail%
+ }%
+ \par\vskip-\dimexpr \baselineskip+\parskip\relax
+ \fi
+ }%
+ \long\def\slnc@note##1##2##3##4{%
+ \let\PackageInfo\PackageWarning
+%<trace> \typeout{TRACE (slnc): ##2<=\theslncpage?}%
+ \ifnum ##2>\value{slncpage}\relax
+%<trace> \typeout{TRACE (slnc): no: unprocess note}%
+ \expandafter\g@addto@macro\csname slnc@#1@unprocessed\endcsname{%
+ \slnc@note{##1}{##2}{##3}{##4}%
+ }%
+ \else
+ \ifnum ##2<\value{slncpage}\relax
+ \PackageWarning{scrlayer-notecolumn}{note of type `#1' delayed}%
+ \fi
+ \boxmaxdepth\maxdepth
+ \expandafter\setbox\csname slnc@#1@box\endcsname\vbox{%
+ \expandafter\hsize\csname slnc@#1@width\endcsname
+ \normalfont\normalsize
+ {%
+% \end{macrocode}
+% Question: Why is it not allowed to set a colour here?
+% \begin{macrocode}
+ \let\color\@gobble
+ \usekomafont{notecolumn.#1}{%
+ \slnc@notesyncfonttest{#1}%
+ \expandafter\ifvoid\csname slnc@#1@box\endcsname
+ \expandafter\setbox\csname slnc@#1@box\endcsname\vbox{%
+ \kern\dimexpr\topskip-\baselineskip\relax
+ }%
+ \fi
+% \end{macrocode}
+% \changes{v0.1}{2015/10/07}{ready for renaming \cs{pdfpageheight} in
+% luaTeX}^^A
+% From lua\TeX~0.80.1 \cs{pdfpageheight} will be renamed into
+% \cs{pageheight}. So we have to do an extra test for the new primitive.
+% \begin{macrocode}
+ \scr@ifundefinedorrelax{pdfpageheight}{%
+ \scr@ifundefinedorrelax{pageheight}{%
+ \@tempdima=\paperheight
+ }{%
+ \@tempdima=\pageheight
+ }%
+ }{%
+ \@tempdima=\pdfpageheight
+ }%
+ \@tempdima=\dimexpr \@tempdima-##3sp
+ -1in-\topmargin
+ -\headheight-\headsep
+ -\baselineskip
+ \relax
+ \@tempdimb=\dimexpr \expandafter\ht\csname slnc@#1@box\endcsname
+ +\expandafter\dp\csname slnc@#1@box\endcsname
+ \relax
+ \typeout{Soll: \the\@tempdima^^JIst: \space\the\@tempdimb}%
+ \ifdim\@tempdima<\@tempdimb
+%<*trace>
+ \PackageInfo{scrlayer-notecolumn}{%
+ Note moved down from\MessageBreak
+ \the\@tempdima\space to \the\@tempdimb\MessageBreak
+ at note box `#1'
+ }%
+%</trace>
+ \else
+ \ifdim\@tempdima>\@tempdimb
+%<*trace>
+ \PackageInfo{scrlayer-notecolumn}{%
+ Adding vertical white space from\MessageBreak
+ \the\@tempdimb\space to \the\@tempdima\MessageBreak
+ into note box `#1'
+ }%
+%</trace>
+ \expandafter\setbox\csname slnc@#1@box\endcsname
+ \vbox {%
+ \expandafter\unvbox\csname slnc@#1@box\endcsname
+ \kern\dimexpr\@tempdima-\@tempdimb\relax
+ }%
+ \fi
+ \fi
+ \expandafter\ifvoid\expandafter\csname slnc@#1@box\endcsname
+ \else
+ \@tempdima\dimexpr
+ \dp\strutbox
+ -\dp\csname slnc@#1@box\endcsname
+ \relax
+ \expandafter\unvbox\csname slnc@#1@box\endcsname
+ \ifdim\@tempdima>\z@ \kern\@tempdima\fi
+ \fi
+% \end{macrocode}
+% \changes{v0.1.2582}{2017/02/08}{restore several commands}^^A
+% Some commands have to be restored when processing the note.
+% \begin{macrocode}
+ \slnc@restoreinnote
+ \strut\ignorespaces ##4\par
+ }%
+ }%
+ }%
+ \fi
+ }%
+ \def\slnc@sync##1##2##3##4{%
+ \ifnum ##2>\value{slncpage}\relax
+ \expandafter\g@addto@macro\csname slnc@#1@unprocessed\endcsname{%
+ \slnc@sync{##1}{##2}{##3}{}%
+ }%
+ \else
+ \if@filesw
+ \expandafter\setbox\csname slnc@#1@box\endcsname\vbox{%
+ \expandafter\unvbox\csname slnc@#1@box\endcsname
+ \scr@savepos
+ \protected@write\@auxout{}{%
+ \string\newlabel{notecolumn.##1.##3.syncnote.label}{%
+ {%
+ \noexpand\number\scr@lastypos
+ }{\thepage}%
+ }%
+ }%
+ }%
+ \fi
+ \fi
+ }%
+ \reserved@a
+ \expandafter\ifvoid\csname slnc@#1@box\endcsname
+%<*trace>
+ \PackageInfo{scrlayer-notecolumn}{Note box `#1' empty}%
+%</trace>
+ \else
+ \ifdim \dimexpr \expandafter\ht\csname slnc@#1@box\endcsname
+ +\expandafter\dp\csname slnc@#1@box\endcsname
+ \relax >\textheight\relax
+%<*trace>
+ \PackageInfo{scrlayer-notecolumn}{Split note box `#1'}%
+%</trace>
+ \splittopskip\topskip
+ \splitmaxdepth\baselineskip
+% \end{macrocode}
+% Bring back the colours:
+% \begin{macrocode}
+ \usekomafont{notecolumn.#1}{%
+ \expandafter\vsplit\csname slnc@#1@box\endcsname to
+ \textheight\relax
+ }%
+ \expandafter\ifvoid\csname slnc@#1@box\endcsname
+ \else
+ \expandafter\setbox\csname slnc@#1@box\endcsname\vbox{%
+ \expandafter\unvbox\csname slnc@#1@box\endcsname
+ }%
+ \fi
+ \else
+%<*trace>
+ \PackageInfo{scrlayer-notecolumn}{Flush note box `#1'}%
+%</trace>
+% \end{macrocode}
+% Bring back the colours:
+% \begin{macrocode}
+ \usekomafont{notecolumn.#1}{%
+ \expandafter\box\csname slnc@#1@box\endcsname%
+ }%
+ \fi
+ \fi
+ \expandafter\global
+ \expandafter\setbox\csname slnc@#1@box\expandafter\endcsname
+ \expandafter\box\csname slnc@#1@box\endcsname
+ \endgroup
+ }
+}
+% \end{macrocode}
+% \begin{macro}{\restoreinnote}
+% \changes{0.1.2582}{2017/02/08}{new command}^^A
+% \begin{macro}{\slnc@restoreinnote}
+% \changes{0.1.2582}{2017/02/08}{new (internal)}^^A
+% Some commands have to be restored while processing the notes. By default
+% these are \cs{label}, \cs{index}, \cs{glossary}. More can be added using
+% \cs{restoreinnote}. The storage is \cs{slnc@restoreinnote}.
+% \begin{macrocode}
+\scrlayerAddToInterface\slnc@restoreinnote{%
+ \let\slnc@restoreinnote\@empty
+}
+\scrlayerAddToInterface\restoreinnote{%
+ \newcommand*\restoreinnote[1]{%
+ \AtBeginDocument{%
+ \expandafter\scrlayerAddCsToInterface[scrlayer-notecolumn.sty]{slnc\string#1}{%
+ \expandafter\let\csname slnc\string#1\endcsname#1%
+ \g@addto@macro\slnc@restoreinnote{%
+ \expandafter\let\expandafter#1\csname slnc\string#1\endcsname
+ }%
+ }%
+ }%
+ }%
+ \@onlypreamble\restoreinnote
+ \restoreinnote\label
+ \restoreinnote\index
+ \restoreinnote\glossary
+}
+% \end{macrocode}
+% \end{macro}^^A \slnc@restoreinnote
+% \end{macro}^^A \restoreinnote
+% \begin{macro}{\slnc@readnotes}
+% Read as long notes from the notes file until the number at \#2 of
+% \Macro{slnc@note} or \Macro{slnc@sync} in the file is greater than
+% \Counter{slncpage}. Put all these to the corresponding unprocessed list.
+% \begin{macrocode}
+\scrlayerAddToInterface\slnc@readnotes{%
+ \newcommand*\slnc@readnotes[1]{%
+ \ifeof\slnc@file\else
+ \ifnum \number #1<\slnc@unprocessed\relax
+ \@tempswafalse
+ \else
+ \@tempswatrue
+ \fi
+ \@whilesw\if@tempswa\fi{%
+ \edef\reserved@a{%
+ \noexpand\makeatletter
+ \endlinechar\m@ne
+ \read\noexpand\slnc@file to\noexpand\reserved@a
+ \endlinechar\the\endlinechar\relax
+ \catcode`\noexpand\@=\the\catcode`\@\relax
+ }%
+ \reserved@a
+ \expandafter\slnc@iofv\expandafter\reserved@b\reserved@a
+ \@empty\@empty\@empty\@empty\@empty
+ \@tempswafalse
+ \@for\reserved@c :={\slnc@note },{\slnc@sync }\do{%
+ \ifx\reserved@b\reserved@c \@tempswatrue\fi
+ }%
+ \if@tempswa
+ \@tempswafalse
+ \expandafter\slnc@iiiofv\expandafter\reserved@b\reserved@a
+ \@empty\@empty\@empty\@empty\@empty
+ \ifx\reserved@b\@empty
+ \PackageError{scrlayer-notecolumn}{internal syntax error}{%
+ Unexpected syntax of file `\jobname.slnc'.\MessageBreak
+ Second argument should be a number.\MessageBreak
+ I don't know what to do with\MessageBreak
+ \expandafter\detokenize\expandafter{\reserved@a}%
+ }%
+ \@tempswatrue
+ \else
+ \global\let\slnc@unprocessed\reserved@b
+ \expandafter\slnc@iiofv\expandafter\reserved@b\reserved@a
+ \@empty\@empty\@empty\@empty\@empty
+ \@ifundefined{slnc@\reserved@b @unprocessed}{%
+ \PackageWarning{scrlayer-notecolumn}{%
+ column `\reserved@b' undefined.\MessageBreak
+ You should declare the column before the usage.\MessageBreak
+ Notes will be lost%
+ }%
+ }{%
+ \expandafter\g@addto@macro
+ \csname slnc@\reserved@b @unprocessed\expandafter\endcsname
+ \expandafter{%
+ \reserved@a
+ }%
+ }%
+ \ifnum \number #1<\slnc@unprocessed\relax
+ \@tempswafalse
+ \else
+ \@tempswatrue
+ \fi
+ \fi
+ \else
+%<*trace>
+ \PackageInfo{scrlayer-notecolumn}{%
+ Ignoring `\expandafter\detokenize\expandafter{\reserved@a}'}%
+%</trace>
+ \@tempswatrue
+ \fi
+ \ifeof\slnc@file\@tempswafalse\fi
+ }%
+ \fi
+ }%
+}
+% \end{macrocode}
+% \end{macro}^^A \slnc@readnotes
+% \begin{macro}{\slnc@iofv}
+% \begin{macro}{\slnc@iiofv}
+% \begin{macro}{\slnc@iiiofv}
+% \begin{macrocode}
+\scrlayerAddToInterface\slnc@iofv{%
+ \newcommand\slnc@iofv[6]{\def#1{#2}}%
+}
+\scrlayerAddToInterface\slnc@iiofiv{%
+ \newcommand\slnc@iiofv[6]{\def#1{#3}}%
+}
+\scrlayerAddToInterface\slnc@iiiofiv{%
+ \newcommand\slnc@iiiofv[6]{\def#1{#4}}%
+}
+% \end{macrocode}
+% \end{macro}^^A \slnc@iiiofv
+% \end{macro}^^A \slnc@iiofv
+% \end{macro}^^A \slnc@iofv
+% \begin{macro}{\slnc@unprocessed}
+% The \#2 of the last read note column from notes file.
+% \begin{macrocode}
+\scrlayerAddToInterface\slnc@unprocessed{%
+ \newcommand*{\slnc@unprocessed}{0}%
+}
+%</body>
+% \end{macrocode}
+% \begin{macro}{\slnc@file}
+% The input file with the unprocessed notes.
+% \changes{v0.1.2928}{2018/02/02}{use \cs{closein} instead of \cs{closeout}
+% to close \cs{slnc@file}}^^A
+% \begin{macro}{\slnc@mdfivesum}
+% \changes{v0.1.2872}{2018/01/17}{definition and usage of Lua function
+% \texttt{slncmdfivesum}}^^A
+% \changes{v0.1.2972}{2018/04/01}{usage of not yet documented Xe\TeX{}
+% primitive \cs{mdfivesum}}^^A
+% The MD5 sum of the file before opening it for reading.
+% \begin{macrocode}
+%<*body>
+\scrlayerAddToInterface\slnc@mdfivesum{%
+ \let\slnc@mdfivesum\@empty
+}
+\scrlayerAddToInterface\slnc@file{%
+ \scr@ifundefinedorrelax{pdfmdfivesum}{%
+ \scr@ifundefinedorrelax{mdfivesum}{%
+ \ifdefined\directlua
+ \directlua{%
+ function slncmdfivesum(filename)
+ local fh = io.open(filename,"rb")
+ if fh then
+ local sum=md5.sumhexa(fh:read("*a"))
+ tex.sprint(sum)
+ fh:close()
+ end
+ end
+ }%
+ \xdef\slnc@mdfivesum{\directlua{slncmdfivesum("\jobname.slnc")}}%
+ \fi
+ }{%
+ \xdef\slnc@mdfivesum{\mdfivesum file {\jobname.slnc}}%
+ }%
+ }{%
+ \xdef\slnc@mdfivesum{\pdfmdfivesum file {\jobname.slnc}}%
+ }%
+%<*trace>
+ \scr@ifundefinedorrelax{slnc@mdfivesum}{}{%
+ \PackageInfo{scrlayer-notecolumn}{%
+ MD5 of last `\jobname.slnc':\MessageBreak
+ \slnc@mdfivesum}%
+ }%
+%</trace>
+ \newread\slnc@file
+ \immediate\openin\slnc@file \jobname.slnc
+ \scrlayerOnAutoRemoveInterface{\immediate\closein\slnc@file}%
+}
+%</body>
+% \end{macrocode}
+% \end{macro}^^A \slnc@mdfivesum
+% \end{macro}^^A \slnc@file
+% \end{macro}^^A \slnc@unprocessed
+% \end{macro}^^A \slnc@processnotes
+%
+% \begin{option}{autoclearnotecolumns}
+% \begin{macrocode}
+%<*options>
+\KOMA@ifkey{autoclearnotecolumns}{slnc@autoclearnotecolumns}\slnc@autoclearnotecolumnstrue
+\scrlayer@AddCsToInterface{KV@KOMA.\@currname.\@currext @autoclearnotecolumns}
+\scrlayer@AddCsToInterface{KV@KOMA.\@currname.\@currext @autoclearnotecolumns@default}
+%</options>
+%<*final>
+\let\reserved@a\clearpage
+\def\clearpage{%
+ \ifslnc@autoclearnotecolumns\clearnotecolumns\relax\fi
+}%
+\expandafter\g@addto@macro\expandafter\clearpage\expandafter{\reserved@a}
+%</final>
+% \end{macrocode}
+% \end{option}
+%
+% \begin{macro}{\clearnotecolumn}
+% \begin{description}
+% \item[\OParameter{string}:] the name of the note column (must be fully
+% expandable and expand to a string only). Default is \PValue{marginpar}.
+% \end{description}
+% Output as many (empty) pages as needed to output all unprocessed notes of
+% one note column. Note, that the output of the first page may result in more
+% unprocessed notes. But the output of the following (empty) pages shouldn't.
+% \begin{macrocode}
+%<*body>
+\scrlayerAddToInterface\c@slnc@clearnote@label{%
+ \newcounter{slnc@clearnote@label}%
+}
+\scrlayerAddToInterface\clearnotecolumn{%
+ \newcommand*\clearnotecolumn[1][marginpar]{%
+ \begingroup
+ \slnc@autoclearnotecolumnsfalse
+% \end{macrocode}
+% First of all we need to know the note column page of this page.
+% \begin{macrocode}
+ \stepcounter{slnc@clearnote@label}%
+ \if@filesw
+ \protected@write\@auxout{%
+ \let\theslncpage\relax
+ \let\slnc@voidtest\relax
+ }{%
+ \string\newlabel{notecolumn.\theslnc@clearnote@label}%
+ {{\theslncpage}{\slnc@voidtest{#1}}}%
+ }%
+ \fi
+ \scr@ifundefinedorrelax{r@notecolumn.\theslnc@clearnote@label}{%
+ \PackageInfo{scrlayer-notecolumn}{%
+ Using estimated to low value for clearing\MessageBreak
+ note colum `#1'%
+ }
+ \edef\slnc@cmp@value{\the\value{slncpage}}%
+ \let\reserved@a\z@
+ }{%
+ \edef\reserved@a{%
+ \@nameuse{r@notecolumn.\theslnc@clearnote@label}\@empty\@empty
+ }%
+ \edef\slnc@cmp@value{\expandafter\slnc@firstof\reserved@a\@nil}%
+ \edef\reserved@a{\expandafter\slnc@secondof\reserved@a\@nil}%
+ }%
+%<*trace>
+ \typeout{TRACE (slnc): clearnote=\@nameuse{theslnc@clearnote@label},
+ abspage=\the\value{slncpage}, until page=\slnc@cmp@value,
+ process=\reserved@a, pagetotal=\the\pagetotal, topskip=\the\topskip}%
+%</trace>
+ \ifvmode\ifdim \pagetotal<\topskip
+% \end{macrocode}
+% \Macro{clearpage} wouldn't result in a new page, so we do not have to output
+% the notes of this page but only until the previous.
+% \begin{macrocode}
+ \edef\slnc@cmp@value{\the\numexpr\slnc@cmp@value-1}%
+%<trace> \typeout{TRACE (slnc): until page=\slnc@cmp@value}%
+ \fi\fi
+ \ifnum \reserved@a=\z@
+% \end{macrocode}
+% Next we read all notes until the end of the current page, but only
+% if a \Macro{clearpage} wouldn't result in a new page.
+% \begin{macrocode}
+ \ifvmode
+ \ifdim \pagetotal<\topskip
+ \else
+ \slnc@readnotes{\slnc@cmp@value}%
+ \fi
+ \else
+ \slnc@readnotes{\slnc@cmp@value}%
+ \fi
+ \begingroup
+ \aftergroup\@tempswafalse
+ \long\def\slnc@note##1##2##3##4{%
+ \ifnum ##2>\slnc@cmp@value\relax \else \aftergroup\@tempswatrue\fi
+ }%
+ \let\slnc@sync\slnc@note
+ \csname slnc@#1@unprocessed\endcsname
+ \endgroup
+ \else
+ \PackageInfo{scrlayer-notecolumn}{%
+ box of note column `#1'\MessageBreak
+ not empty after page of \string\clearnotecolumn}%
+ \@tempswatrue
+ \fi
+ \if@tempswa
+% \end{macrocode}
+% Yes, we have!
+% \begin{macrocode}
+ \IfLayerPageStyleExists{\currentpagestyle}{}{%
+ \PackageWarning{scrlayer-notecolumn}{%
+ \string\clearnotecolumn\space while active non-layer page
+ style.\MessageBreak
+ Activate empty page style until note column\MessageBreak
+ has been cleared%
+ }%
+ \pagestyle{empty}%
+ }%
+ \@tempswatrue
+ \fi
+ \@whilesw\if@tempswa\fi{%
+%<trace> \typeout{TRACE (slnc): add \string\clearpage}%
+% \end{macrocode}
+% Yes, we have (maybe again)!
+% \begin{macrocode}
+ \clearpage
+ \expandafter\ifcase \slnc@voidtest{#1}%
+ \begingroup
+ \aftergroup\@tempswafalse
+ \long\def\slnc@note##1##2##3##4{%
+ \ifnum ##2>\slnc@cmp@value\relax \else \aftergroup\@tempswatrue\fi
+ }%
+ \let\slnc@sync\slnc@note
+ \csname slnc@#1@unprocessed\endcsname
+ \endgroup
+ \else
+ \@tempswatrue
+ \fi
+ \if@tempswa
+% \end{macrocode}
+% And we still have: So we have to output one more page.
+% \begin{macrocode}
+ \null
+ \fi
+ }%
+ \endgroup
+ }%
+}
+% \end{macrocode}
+% \begin{macro}{\slnc@firstof}
+% \begin{macro}{\slnc@secondof}
+% We need these little helpers, because some packages like
+% \Package{hyperref} extend the label mechanism by additional arguments.
+% \begin{macrocode}
+\scrlayerAddToInterface{\slnc@firstof}{%
+ \def\slnc@firstof#1#2\@nil{#1}%
+}
+\scrlayerAddToInterface{slnc@secondof}{%
+ \def\slnc@secondof#1#2#3\@nil{#2}%
+}
+% \end{macrocode}
+% \end{macro}^^A \slnc@firstof
+% \end{macro}^^A \slnc@secondof
+% \begin{macro}{\slnc@voidtest}
+% \begin{description}
+% \item[\Parameter{string}:] the name of a note column (must be fully
+% expandable and expand to a string only).
+% \end{description}
+% If the box of the note column is empty/void it returns \Macro{z@} otherwise
+% \Macro{@ne}.
+% \begin{macrocode}
+\scrlayerAddToInterface\slnc@voidtest{%
+ \newcommand*{\slnc@voidtest}[1]{%
+ \expandafter\ifvoid \csname slnc@#1@box\endcsname \z@\else \@ne\fi
+ }%
+}
+%</body>
+% \end{macrocode}
+% \end{macro}^^A \slnc@voidtest
+% \end{macro}^^A \clearnotecolumn
+%
+% \begin{macro}{\clearnotecolumns}
+% \changes{v3.26}{2018/08/29}{\cs{scr@trim@spaces} added}^^A
+% \changes{v3.26}{2018/08/29}{removed spurious \cs{expandafter}}^^A
+% \begin{description}
+% \item[\OParameter{string list}:] comma separated list of note column names
+% (must be fully expandable and each element must expand to a string only,
+% that is the name of a note column); if omitted or empty all note columns
+% will be used.
+% \end{description}
+% Output as many (empty) pages as needed to output all unprocessed notes of
+% all (given) note columns. Note, that the output of the first page may
+% result in more unprocessed notes. But the output of the following (empty)
+% pages shouldn't.
+% \begin{macrocode}
+%<*body>
+\scrlayerAddToInterface\clearnotecolumns{%
+ \newcommand*\clearnotecolumns[1][\relax]{%
+ \begingroup
+ \slnc@autoclearnotecolumnsfalse
+ \ifx\relax#1\relax\else
+ \let\slnc@processnotecolumns\@empty
+ \edef\reserved@a{#1}%
+ \@for\reserved@a:=\reserved@a\do {%
+ \scr@trim@spaces\reserved@a
+ \ifx\reserved@a\@empty\else
+ \expandafter\l@addto@macro\expandafter\slnc@processnotecolumns
+ \expandafter{\expandafter\@elt\expandafter{\reserved@a}}%
+ \fi
+ }%
+ \fi
+% \end{macrocode}
+% First of all we need to know the note column page of this page.
+% \begin{macrocode}
+ \stepcounter{slnc@clearnote@label}%
+ \if@filesw
+ \begingroup
+ \def\@elt##1{+\slnc@voidtest{##1}}%
+ \protected@write\@auxout{%
+ \let\theslncpage\relax
+ \let\slnc@voidtest\relax
+ }{%
+ \string\newlabel{notecolumn.\theslnc@clearnote@label}%
+ {{\theslncpage}{\numexpr \slnc@processnotecolumns\relax}}%
+ }%
+ \endgroup
+ \fi
+ \scr@ifundefinedorrelax{r@notecolumn.\theslnc@clearnote@label}{%
+ \begingroup
+ \def\@elt##1{, `##1'}%
+ \PackageInfo{scrlayer-notecolumn}{%
+ Using estimated to low value for\MessageBreak
+ clearing note colums\MessageBreak
+ \expandafter\@gobble\slnc@processnotecolumns
+ }%
+ \endgroup
+ \edef\slnc@cmp@value{\the\value{slncpage}}%
+ \let\reserved@a\z@
+ }{%
+ \edef\reserved@a{%
+ \@nameuse{r@notecolumn.\theslnc@clearnote@label}\@empty\@empty
+ }%
+ \edef\slnc@cmp@value{\expandafter\slnc@firstof\reserved@a\@nil}%
+ \edef\reserved@a{\expandafter\slnc@secondof\reserved@a\@nil}%
+ }%
+%<*trace>
+ \typeout{TRACE (slnc): clearnote=\@nameuse{theslnc@clearnote@label},
+ abspage=\theslncpage, until page=\slnc@cmp@value,
+ process=\reserved@a, pagetotal=\the\pagetotal, topskip=\the\topskip}%
+%</trace>
+ \ifvmode\ifdim \pagetotal<\topskip
+% \end{macrocode}
+% \Macro{clearpage} wouldn't result in a new page, so we do not have to output
+% the notes of this page but only until the previous.
+% \begin{macrocode}
+ \edef\slnc@cmp@value{\the\numexpr\slnc@cmp@value-1}%
+%<trace> \typeout{TRACE (slnc): until page=\slnc@cmp@value}%
+ \fi\fi
+ \ifnum \reserved@a=\z@
+% \end{macrocode}
+% Next we read all notes until the end of the current page, but only
+% if a \Macro{clearpage} wouldn't result in a new page.
+% \begin{macrocode}
+ \ifvmode
+ \ifdim \pagetotal<\topskip
+ \else
+ \slnc@readnotes{\slnc@cmp@value}%
+ \fi
+ \else
+ \slnc@readnotes{\slnc@cmp@value}%
+ \fi
+ \begingroup
+ \aftergroup\@tempswafalse
+ \long\def\slnc@note##1##2##3##4{%
+ \ifnum ##2>\slnc@cmp@value\relax \else \aftergroup\@tempswatrue\fi
+ }%
+ \let\slnc@sync\slnc@note
+ \def\@elt##1{\csname slnc@##1@unprocessed\endcsname}%
+ \slnc@processnotecolumns
+ \endgroup
+ \else
+ \PackageInfo{scrlayer-notecolumn}{%
+ box of at least one note column\MessageBreak
+ not empty after page of \string\clearnotecolumns}%
+ \@tempswatrue
+ \fi
+ \if@tempswa
+% \end{macrocode}
+% Yes, we have!
+% \begin{macrocode}
+ \IfLayerPageStyleExists{\currentpagestyle}{}{%
+ \PackageWarning{scrlayer-notecolumn}{%
+ \string\clearnotecolumns\space while active non-layer page
+ style.\MessageBreak
+ Activate empty page style until note column\MessageBreak
+ has been cleared%
+ }%
+ \pagestyle{empty}%
+ }%
+ \@tempswatrue
+ \fi
+ \@whilesw\if@tempswa\fi{%
+%<trace> \typeout{TRACE (slnc): add \string\clearpage}%
+% \end{macrocode}
+% Yes, we have (maybe again)!
+% \begin{macrocode}
+ \clearpage
+ \begingroup
+ \def\@elt##1{+\slnc@voidtest{##1}}%
+ \ifcase \numexpr \slnc@processnotecolumns\relax
+ \aftergroup\@tempswafalse
+ \long\def\slnc@note##1##2##3##4{%
+ \ifnum ##2>\slnc@cmp@value\relax \else \aftergroup\@tempswatrue\fi
+ }%
+ \let\slnc@sync\slnc@note
+ \def\@elt##1{\csname slnc@##1@unprocessed\endcsname}%
+ \slnc@processnotecolumns
+ \else
+ \aftergroup\@tempswatrue
+ \fi
+ \endgroup
+ \if@tempswa
+% \end{macrocode}
+% And we still have: So we have to output one more page.
+% \begin{macrocode}
+ \null
+ \fi
+ }%
+ \endgroup
+ }%
+}
+%</body>
+% \end{macrocode}
+% \end{macro}^^A \clearnotecolumns
+%
+%
+% \section{Syncronisation of Text and Note}
+% \label{sec:scrlayer-notecolumn.sync}
+%
+% Until yet we have the text and we have note columns. Normally note entries
+% to a note column are in sync with the text position, that makes the
+% note. But if there are collisions the sync may be lost. In this case the
+% note may be later (but never earlier), so we need a mechanism to force
+% synchronisation of the text with the note.
+%
+% \begin{macro}{\syncwithnotecolumn}
+% \changes{v3.26}{2018/08/29}{\cs{scr@trim@spaces} added}^^A
+% \changes{v3.26}{2018/08/29}{removed spurious \cs{expandafter}}^^A
+% \begin{description}
+% \item[\OParameter{string}:] the name of the note column to sync with (this
+% must be fully expandable and expand to the name of a note column). By
+% default sync with note column \PValue{marginpar}.
+% \end{description}
+% Add at the \LaTeX{} run after the next \LaTeX{} run as much space to the
+% text (not the note column!) as needed to reach the next position at the
+% note column. This is not the same like \Macro{clearnotecolumn}, because it
+% doesn't need to go to the next page, but it needs at least three \LaTeX{}
+% runs to terminate.
+% \begin{macrocode}
+%<*body>
+\scrlayerAddToInterface{\c@slnc@syncpoint}{%
+ \newcounter{slnc@syncpoint}%
+}
+\scrlayerAddToInterface{\syncwithnotecolumn}{%
+ \newcommand*{\syncwithnotecolumn}[1][marginpar]{%
+ \begingroup
+ \edef\reserved@a{\endgroup\noexpand\syncwithnotecolumns[{#1}]}%
+ \reserved@a
+ }%
+}
+\scrlayerAddToInterface{\syncwithnotecolumns}{%
+ \newcommand*{\syncwithnotecolumns}[1][\relax]{%
+ \begingroup
+ \ifx\relax#1\relax\else
+ \let\slnc@processnotecolumns\@empty
+ \edef\reserved@a{#1}%
+ \@for\reserved@a:=\reserved@a\do {%
+ \scr@trim@spaces\reserved@a
+ \ifx\reserved@a\@empty\else
+ \expandafter\l@addto@macro\expandafter\slnc@processnotecolumns
+ \expandafter{\expandafter\@elt\expandafter{\reserved@a}}%
+ \fi
+ }%
+ \fi
+ \stepcounter{slnc@syncpoint}%
+ \def\@elt##1{%
+ \addtocontents{slnc}{%
+ \string\slnc@sync{##1}%
+ {\noexpand\number\value{slncpage}}%
+ {\theslnc@syncpoint}%
+ {}%
+ }%
+ }%
+ \slnc@processnotecolumns
+ \ifvmode
+ \let\slnc@voffset\@empty%
+ \expandafter\@firstofone
+ \else
+ \PackageWarning{scrlayer-notecolumn}{%
+ \string\syncwithnotecolumn\space in hmode.\MessageBreak
+ Using \string\syncwithnotecolumn\space in horizontal\MessageBreak
+ mode may result in unwanted vertical\MessageBreak
+ space inside paragraphs and may lost\MessageBreak
+ colours of text of notes. \space So perhaps you\MessageBreak
+ should move \string\syncwithnotecolumn\space before\MessageBreak
+ or after the paragraph%
+ }%
+ \let\slnc@voffset\@empty%\def\slnc@voffset{-\number\baselineskip}%
+ \expandafter\slnc@vadjust
+ \fi
+ {%
+ \if@filesw
+ \scr@savepos
+ \protected@write\@auxout{}{%
+ \string\newlabel{notecolumn.\theslnc@syncpoint.synctext.label}{%
+ {%
+ \noexpand\number
+ \numexpr \scr@lastypos\slnc@voffset\relax
+ }{\thepage}%
+ }%
+ }%
+ \fi
+ \@ifundefined{r@notecolumn.\theslnc@syncpoint.synctext.label}{%
+ \PackageInfo{scrlayer-notecolumn}{%
+ No text label for \string\syncwithnotecolumn.\MessageBreak
+ Need rerun to sync position}%
+ }{%
+ \edef\reserved@a{%
+ \@nameuse{r@notecolumn.\theslnc@syncpoint.synctext.label}%
+ \@empty\@empty
+ }%
+ \edef\slnc@textpos{\expandafter\slnc@firstof\reserved@a\@nil}%
+ \edef\slnc@textpage{\expandafter\slnc@secondof\reserved@a\@nil}%
+ \let\slnc@notepos\slnc@textpos
+ \let\slnc@notepage\slnc@textpage
+ \def\@elt##1{%
+ \@ifundefined{r@notecolumn.##1.\theslnc@syncpoint.syncnote.label}{%
+ \PackageInfo{scrlayer-notecolumn}{%
+ No note label for sync with note column\MessageBreak
+ `##1'.\MessageBreak
+ Need rerun to sync position}%
+ \G@refundefinedtrue
+ }{%
+ \edef\reserved@a{%
+ \@nameuse{r@notecolumn.##1.\theslnc@syncpoint.syncnote.label}%
+ \@empty\@empty
+ }%
+ \edef\reserved@b{\expandafter\slnc@firstof\reserved@a\@nil}%
+ \edef\reserved@c{\expandafter\slnc@secondof\reserved@a\@nil}%
+ \ifnum \slnc@notepage<\reserved@c\relax
+ \let\slnc@notepos=\reserved@b
+ \let\slnc@notepage=\reserved@c
+ \else
+ \ifnum \slnc@notepage=\reserved@c\relax
+ \ifnum \slnc@notepos>\reserved@b
+ \let\slnc@notepos=\reserved@b
+ \let\slnc@notepage=\reserved@c
+ \fi
+ \fi
+ \fi
+ }%
+ }%
+ \slnc@processnotecolumns
+ \ifnum\slnc@textpage>\slnc@notepage\relax
+ \PackageInfo{scrlayer-notecolumn}{%
+ Last note page before last text page.\MessageBreak
+ Need rerun to sync position}%
+ \else
+ \ifnum\slnc@textpage<\slnc@notepage\relax
+ \@whilenum \slnc@textpage<\slnc@notepage\do {%
+ \newpage\null\vskip-\dimexpr \baselineskip+\parskip\relax
+ \edef\slnc@textpage{\the\numexpr\slnc@textpage+1\relax}%
+ }%
+% \end{macrocode}
+% \changes{v0.1}{2015/10/07}{ready for renaming \cs{pdfpageheight} in
+% luaTeX}^^A
+% From lua\TeX~0.80.1 \cs{pdfpageheight} will be renamed into
+% \cs{pageheight}. So we have to do an extra test for the new primitive.
+% \begin{macrocode}
+ \scr@ifundefinedorrelax{pdfpageheight}{%
+ \scr@ifundefinedorrelax{pageheight}{%
+ \@tempdima=\paperheight
+ }{%
+ \@tempdima=\pageheight
+ }%
+ }{%
+ \@tempdima=\pdfpageheight
+ }%
+ \@tempdima=\dimexpr \@tempdima
+ -\topmargin-1in
+ -\headheight-\headsep
+ -\topskip+\baselineskip
+ \relax
+ \edef\slnc@textpos{\number\@tempdima}%
+%<*trace>
+ \PackageInfo{scrlayer-notecolumn}{%
+ Top position is \slnc@textpos%
+ }%
+%</trace>
+ \fi
+ \ifnum\slnc@notepos>\slnc@textpos\relax
+ \PackageInfo{scrlayer-notecolumn}{%
+ Last note position before last text\MessageBreak
+ position.\MessageBreak
+ Need rerun to sync position%
+ }%
+ \else
+ \ifnum\slnc@notepos<\slnc@textpos\relax
+ \@tempdima=\numexpr \slnc@textpos-\slnc@notepos\relax sp
+ \PackageInfo{scrlayer-notecolumn}{%
+ skipping \the\@tempdima\space to sync%
+ }%
+ \vskip\@tempdima
+ \fi
+ \fi
+ \fi
+ }%
+ }%
+ \endgroup
+ }%
+}
+% \end{macrocode}
+% \begin{macro}{\slnc@vadjust}
+% \begin{macrocode}
+\scrlayerAddToInterface\slnc@vadjust{%
+ \newcommand{\slnc@vadjust}[1]{%
+ \@bsphack
+ \vadjust{#1}%
+ \@esphack
+ }%
+}
+%</body>
+% \end{macrocode}
+% \end{macro}^^A \slnc@vadjust
+% \end{macro}^^A \syncwithnotecolumn
+%
+%
+% \iffalse^^A meta-comment
+%</interface>
+% \fi^^A meta-comment
+%
+% \Finale
+%
+\endinput
+%
+% end of file `scrlayer-notecolumn.dtx'
+
+%%% Local Variables:
+%%% mode: doctex
+%%% mode: flyspell
+%%% ispell-local-dictionary: "en_GB"
+%%% TeX-master: t
+%%% End: