From f1e3d1ca3738aac0ba720e4c1d87795d5d0cdcd9 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Tue, 5 Jul 2022 03:01:03 +0000 Subject: CTAN sync 202207050301 --- .../koma-script/source/scrlayer-notecolumn.dtx | 1703 -------------------- 1 file changed, 1703 deletions(-) delete mode 100644 macros/latex/contrib/koma-script/source/scrlayer-notecolumn.dtx (limited to 'macros/latex/contrib/koma-script/source/scrlayer-notecolumn.dtx') diff --git a/macros/latex/contrib/koma-script/source/scrlayer-notecolumn.dtx b/macros/latex/contrib/koma-script/source/scrlayer-notecolumn.dtx deleted file mode 100644 index ec55e285ee..0000000000 --- a/macros/latex/contrib/koma-script/source/scrlayer-notecolumn.dtx +++ /dev/null @@ -1,1703 +0,0 @@ -% \iffalse^^A meta-comment -% ====================================================================== -% scrlayer-notecolumn.dtx -% Copyright (c) Markus Kohm, 2013-2022 -% -% 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. -% ---------------------------------------------------------------------- -% ====================================================================== -%%% From File: $Id: scrlayer-notecolumn.dtx 3694 2022-02-10 13:53:33Z kohm $ -%%%% (run: identify) -%%%% (run: init) -%%%% (run: options) -%%%% (run: body) -%%%% (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: 2022-02-10 14:53:33 +0100 (Do, 10. Feb 2022) $ - \def\filerevision$#1: #2 ${\gdef\filerevision{v0.3.#2}} - \filerevision$Revision: 3694 $ - \edef\reserved@a{% - \noexpand\endgroup - \noexpand\ProvidesFile{scrlayer-notecolumn.dtx}% - [\filedate\space\filerevision\space - KOMA-Script package source - }% -\reserved@a -% -%<*identify|doc> -%\NeedsTeXFormat{LaTeX2e}[1995/12/01] -%\ProvidesPackage{scrlayer-notecolumn}[% -%\ProvidesFile{scrlayer-notecolumn.tex}[% -% Sometimes following will be replaced by !KOMASCRIPTVERSION: -%!SCRLAYERVERSION -% package -% -%<*dtx|identify|doc> - (end user interface for scrlayer)] -% -%<*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,notecolumn,init}% - \from{scrlayer-notecolumn.dtx}{interface,trace,notecolumn,init}% - \from{scrlayer.dtx}{interface,notecolumn,options}% - \from{scrlayer-notecolumn.dtx}{interface,trace,notecolumn,options}% - \from{scrlayer.dtx}{interface,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[USenglish]{koma-script-source-doc} -\usepackage{babel} -\usepackage{hvlogos} -\setcounter{StandardModuleDepth}{2} -\begin{document} - \DocInput{scrlayer-notecolumn.dtx} -\end{document} -% -% \fi^^A meta-comment -% -% \changes{v0.0}{2013/04/26}{start of interface} -% \changes{v0.3.3532}{2020/09/11}{do not use deprecated interface commands} -% \changes{v3.36}{2022/02/10}{switch over from \cls*{scrdoc} to -% \cls*{koma-script-source-doc}} -% \changes{v3.36}{2022/02/10}{require package \pkg*{scrlogo} instead of -% defining \cs{KOMAScript}} -% -% \GetFileInfo{scrlayer-notecolumn.dtx} -% \title{Providing Note Columns Similar to \cs{marginpar} with -% \href{https://komascript.de}{\KOMAScript} Package -% \pkg*{scrlayer-notecolumn} as Proof of Concept about Layers with -% \href{https://komascript.de}{\KOMAScript} Package \pkg*{scrlayer}} -% \author{\href{mailto:komascript@gmx.info}{Markus Kohm}} -% \date{Version \fileversion{} of \filedate} -% \maketitle -% \begin{abstract} -% This package is only a proof of concept. The main sense of the package is, -% to show the power of layers with \pkg{scrlayer}. It was never intended to -% be used as a productivity package. So there is no support for using -% it. Several features are only rudimentary. Several can be improved. Please -% feel free to fork this package. -% \end{abstract} -% \tableofcontents -% -% \section{User Manual} -% -% You can find the user manuals of \pkg*{scrlayer-notecolumn} in the \KOMAScript{} -% manual, either the German \file{scrguide} or the English \file{scrguien}. -% -% \MaybeStop{\PrintIndex} -% -% \section{Implementation of \pkg*{scrlayer-notecolumn}} -% -% \begin{macrocode} -%<*interface> -% \end{macrocode} -% -% -% \subsection{Initialising some values before the options} -% -% Initialization 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} -% \changes{v0.1.2483}{2016/06/28}{grouping fixed} -% \begin{macrocode} -%<*init> -\@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} -% -% -% \subsection{Making a note column} -% -% The package supports a various number of note columns. Each is referenced by -% a unique name. -% -% \begin{command}{\DeclareNoteColumn} -% \begin{description} -% \item[\oarg{option list}:] a comma-separated list of -% \texttt{\meta{key}=\meta{value}} pairs. -% \item[\marg{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> -\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 \pkg{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 - }{}% -% \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}{}% - }{}% -% \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 later. -% \changes{3.27}{2019/02/14}{initialization of one color stack per note column} -% For color support we also need one color stack per note column. A color -% stack is a feature only available for pdf\TeX{} and lua\TeX{}. -% \begin{macrocode} - \@ifundefined{slnc@#2@colorstack}{% - \scr@ifundefinedorrelax{pdfcolorstackinit}{% - \scr@ifundefinedorrelax{pdffeedback}{}{% - \expandafter\chardef\csname slnc@#2@colorstack\endcsname= - \pdffeedback colorstackinit direct {\slnc@initial@black}% - }% - }{% - \expandafter\chardef\csname slnc@#2@colorstack\endcsname= - \pdfcolorstackinit direct {\slnc@initial@black}% - }% - }{}% -% \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}{}{% - \PackageInfo{scrlayer-notecolumn}{using already defined - macro\MessageBreak - `\expandafter\string\csname @notecolumn.#2font\endcsname' for font - element\MessageBreak - `notecolumn.#2'% - }% - }% - \newkomafont{notecolumn.#2}{}% - }{% - \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 \pstyle{@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} -% 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@initial@black} -% \changes{v0.2.3085}{2019/02/14}{added} -% The initial black is the color used to initialize the color stacks. As long -% as only pdf\TeX{} and lua\TeX{} provide color stacks, we can initialize it -% with \texttt{0 g 0 G}. However it may be better to use the initial -% \cs{current@color} of the used color package. Using \cs{default@color} would -% be even better, but this is not available until \cs{begin\{document\}}. -% \begin{macrocode} -\newcommand*{\slnc@initial@black}{0 g 0 G}% -\AfterPackage*{color}{% - \let\slnc@initial@black\current@color - \AtBeginDocument{\let\slnc@initial@black\default@color}% -}% -\AfterPackage*{xcolor}{% - \let\slnc@initial@black\current@color - \AtBeginDocument{\let\slnc@initial@black\default@color}% -}% -% \end{macrocode} -% \end{macro}^^A \slnc@initial@black -% \begin{macro}{\slnc@processnotecolumns} -% This is a list of all declared note columns in \LaTeX{} syntax (using -% \cs{@cons} and \cs{@elt} etc.). -% \begin{macrocode} -\newcommand*{\slnc@processnotecolumns}{}% -% \end{macrocode} -% \end{macro}^^A \slnc@processnotecolumns -% \begin{macrocode} -% -% \end{macrocode} -% One note column will be declared by default: -% \begin{macrocode} -%<*final> -\DeclareNoteColumn{marginpar} -% -%<*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} -\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,width,font,marginpar,normalmarginpar,reversemarginpar} -% Last but not least we have to define the options for the \meta{option -% list}. -% \begin{macrocode} -\DefineFamilyMember[.definenotecolumn]{KOMAarg} -\DefineFamilyKey[.definenotecolumn]{KOMAarg}{position}{% - \@namedef{slnc@\slnc@name @pos}{\dimexpr #1\relax}% - \FamilyKeyStateProcessed -} -\DefineFamilyKey[.definenotecolumn]{KOMAarg}{width}{% - \@namedef{slnc@\slnc@name @width}{\dimexpr #1\relax}% - \FamilyKeyStateProcessed -} -\DefineFamilyKey[.definenotecolumn]{KOMAarg}{font}{% - \setkomafont{notecolumn.\slnc@name}{#1}% - \FamilyKeyStateProcessed -} -\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}% -} -% \end{macrocode} -% \begin{macro}{\slnc@defpos} -% Little helper for option \opt{marginpar}. The argument is the expanded -% name of the note column. -% \begin{macrocode} -\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}% -} -% \end{macrocode} -% \begin{macro}{\slnc@defnormalpos} -% Little helper for option \opt{normalmarginpar}. The argument is the -% expanded name of the note column. -% \begin{macrocode} -\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}% -} -% \end{macrocode} -% \begin{macro}{\slnc@defreversepos} -% Little helper for option \opt{reversemarginpar}. The argument is the -% expanded name of the note column. -% \begin{macrocode} -\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} -% -% \end{macrocode} -% \end{option}^^A position … reversemarginpar -% \end{command}^^A \DeclareNoteColumn -% -% \begin{command}{\DeclareNewNoteColumn,\ProvideNoteColumn,\RedeclareNoteColumn} -% Like \cs{DeclareNoteColumn} but with restrictions, if the note column has -% (not) been declared already. -% \begin{macrocode} -%<*body> -\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}% -}% -\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}% - }% -}% -\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}% -}% -% -% \end{macrocode} -% \end{command} -% -% -% \subsection{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 \file{aux}-file with -% \cs{if@filesw}} -% \begin{macro}{\slnc@initwrite,\slnc@openwrite} -% \changes{v0.1.2928}{2018/02/02}{use \cs{closein} instead of \cs{closeout} -% to close \cs{slnc@file}} -% 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> -\newwrite\tf@slnc -\AtBeginDocument{% - \if@filesw - \immediate\write\@auxout{% - \noexpand\csname slnc@initwrite\noexpand\endcsname - }% - \fi -}% -\AtEndDocument{\let\slnc@initwrite\slnc@openwrite}% -\newcommand*{\slnc@initwrite}{}% -\newcommand*{\slnc@openwrite}{% - \immediate\closein\slnc@file -%<*trace> - \PackageInfo{scrlayer-notecolumn}{% - Opening `\jobname.slnc'\MessageBreak - for writing}% -% - \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}} -% \changes{v0.1.2972}{2018/04/01}{usage of not yet documented Xe\TeX{} -% primitive \cs{mdfivesum}} -% \begin{macrocode} -\AfterReadingMainAux{% - \immediate\closeout\tf@slnc - \begingroup - \scr@ifundefinedorrelax{pdfmdfivesum}{% - \scr@ifundefinedorrelax{mdfivesum}{% - \ifdefined\directlua - \edef\reserved@a{\directlua{slnc.mdfivesum(slnc.slncfile)}}% - \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}% -% - \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% - }% -% - \aftergroup\@tempswatrue - \fi - \fi - \endgroup -} -% -% \end{macrocode} -% \changes{v0.3.3600}{2021/05/30}{use of \pkg*{scrwfile}'s never list}% -% The easiest way to make it compatible with \pkg*{scrwfile} is to put it -% on the \emph{never} list. -% \begin{macrocode} -%<*body> -\AfterPackage*{scrwfile}{% - \@ifundefined{scrwfile@never}{\def}{\g@addto@macro}% - \scrwfile@never{slnc}% -} -% -% \end{macrocode} -% \end{macro}^^A \slnc@initwrite,\slnc@openwrite -% \end{macro}^^A \tf@slnc -% -% \begin{command}{\makenote} -% \begin{description} -% \item[\oarg{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 |marginpar|. -% \item[\marg{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 \cs{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,\slnc@makenote} -% \changes{v0.1.2583}{2017/02/08}{added} -% \begin{macrocode} -%<*body> -\newcommand*{\slnc@unexpanded}{} -\let\slnc@unexpanded\detokenize -\newcommand*{\makenote}{% - \kernel@ifstar{\let\slnc@unexpanded\detokenize\slnc@makenote}% - {\let\slnc@unexpanded\@firstofone\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} -% \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 -% \pstyle{@everystyle@}. You should note, that auto-remove wouldn't -% remove the counter. -% \begin{macrocode} -\@ifundefined{c@slncpage}{% - \newcounter{slncpage}% - \AddToLayerPageStyleOptions{@everystyle@}{% - onbackground=\stepcounter{slncpage}% - }% -}{} -% -% \end{macrocode} -% \end{counter}^^A slncpage -% \end{macro}^^A \slnc@makenote,\slnc@unexpanded -% \end{command}^^A \makenote -% -% \begin{macro}{\slnc@processnotes} -% \begin{description} -% \item[\marg{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> -\newcommand*{\slnc@processnotes}[1]{% -% \end{macrocode} -% Read as long notes from the notes file until the number at \#2 of -% \cs{slnc@note} in the file is greater than \cnt{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{% -% \PackageInfo{scrlayer-notecolumn}{TRACE (slnc): ##2<=\theslncpage?}% - \ifnum ##2>\value{slncpage}\relax -% \PackageInfo{scrlayer-notecolumn}{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} -% \changes{v0.2.3085}{2019/02/14}{using color stack if available} -% If a color stack is available we switch to it before changing the font. So a -% color definition inside the font would overwrite every color change inside -% the column! But if we don't have a color stack, color switching is not -% permitted! -% \begin{macrocode} - \slnc@switchcolorstack{#1}% - {% - \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} -% 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 - \ifdim\@tempdima<\@tempdimb -%<*trace> - \PackageInfo{scrlayer-notecolumn}{% - Note moved down from\MessageBreak - \the\@tempdima\space to \the\@tempdimb\MessageBreak - at note box `#1' - }% -% - \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' - }% -% - \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} -% 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}% -% - \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'}% -% - \splittopskip\topskip - \splitmaxdepth\baselineskip -% \end{macrocode} -% Bring back the colors: -% \changes{v0.2.3085}{2019/02/14}{\cs{slnc@switchcolorstack} added} -% \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{% - \slnc@switchcolorstack{#1}% - \expandafter\unvbox\csname slnc@#1@box\endcsname - }% - \fi - \else -%<*trace> - \PackageInfo{scrlayer-notecolumn}{Flush note box `#1'}% -% -% \end{macrocode} -% Bring back the colors: -% \changes{v0.2.3085}{2019/02/14}{\cs{slnc@switchcolorstack} added} -% \begin{macrocode} - \usekomafont{notecolumn.#1}{% - \slnc@switchcolorstack{#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}{\slnc@switchcolorstack} -% \changes{v0.2.3085}{2019/02/14}{added} -% This either redefines \cs{set@color} or switches to the color stack of the -% note column given by the argument. -% \begin{macrocode} -\newcommand*{\slnc@switchcolorstack}[1]{% - \scr@ifundefinedorrelax{slnc@#1@colorstack}{% - \def\set@color{% - \PackageWarningNoLine{scrlayer-notecolumn}{% - unsupported change of color!\MessageBreak - It seems you are using a TeX engine,\MessageBreak - that does not support switching the\MessageBreak - color stack like pdfTeX or luaTeX do.\MessageBreak - Because of this, usage of \string\color,\MessageBreak - \string\textcolor\space etc. inside a note - column\MessageBreak - is not supported% - }% - }% - }{% - \scr@ifundefinedorrelax{@pdfcolorstack}{% - }{% - \expandafter\let\expandafter\@pdfcolorstack - \csname slnc@#1@colorstack\endcsname - }% - \scr@ifundefinedorrelax{pdfcolorstack}{% - \scr@ifundefinedorrelax{pdfextension}{% - \PackageError{scrlayer-notecolumm}{% - color stack defined but not usable% - }{% - \expandafter\string - \csname slnc@#1@colorstack\endcsname\space defined - \MessageBreak - but neither \string\pdfcolorstack\space nor - \string\pdfextension.\MessageBreak - This should never happen!% - }% - }{% - \pdfextension colorstack - \csname slnc@#1@colorstack\endcsname current\relax - }% - }{% - \pdfcolorstack - \csname slnc@#1@colorstack\endcsname current\relax - }% - }% -}% -% \end{macrocode} -% \end{macro}^^A \slnc@switchcolorstack -% \begin{command}{\restoreinnote} -% \changes{v0.1.2582}{2017/02/08}{added} -% \begin{macro}{\slnc@restoreinnote} -% \changes{v0.1.2582}{2017/02/08}{added} -% 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} -\newcommand*{\slnc@restoreinnote}{} -\let\slnc@restoreinnote\@empty -\newcommand*\restoreinnote[1]{% - \AtBeginDocument{% - \expandafter\newcommand\expandafter*\csname slnc\string#1\endcsname{}% - \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{command}^^A \restoreinnote -% \begin{macro}{\slnc@readnotes} -% Read as long notes from the notes file until the number at \#2 of -% \cs{slnc@note} or \cs{slnc@sync} in the file is greater than -% \cnt{slncpage}. Put all these to the corresponding unprocessed list. -% \begin{macro}{\slnc@catcodes} -% \changes{v0.3}{2019/03/02}{added} -% We need a helper macro \cs{slnc@catcodes} to restore (some of) the catcodes -% before reading from file. -% \begin{macrocode} -\newcommand*{\slnc@catcodes}{}% -\AtBeginDocument{% - \begingroup - \def\do#1{% - \protected@xdef\slnc@catcodes{\slnc@catcodes - \catcode`\protect#1=\the\catcode`#1\relax - }% - }% - \dospecials - \let\protect\noexpand - \xdef\slnc@catcodes{\slnc@catcodes\catcode`\protect\@=11\relax}% - \endgroup -} -% \end{macrocode} -% \end{macro}^^A \slnc@catcodes -% \begin{macrocode} -\newcommand*\slnc@readnotes[1]{% - \ifeof\slnc@file\else - \ifnum \number #1<\slnc@unprocessed\relax - \@tempswafalse - \else - \@tempswatrue - \fi - \@whilesw\if@tempswa\fi{% - \begingroup - \slnc@catcodes - \endlinechar\m@ne - \read\slnc@file to\reserved@a - \edef\reserved@a{% - \endgroup - \noexpand\def\noexpand\reserved@a{% - \unexpanded\expandafter{\reserved@a}% - }% - }% - \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}'}% -% - \@tempswatrue - \fi - \ifeof\slnc@file\@tempswafalse\fi - }% - \fi -}% -% \end{macrocode} -% \end{macro}^^A \slnc@readnotes -% \begin{macro}{\slnc@iofv,\slnc@iiofv,\slnc@iiiofv} -% \begin{macrocode} -\newcommand\slnc@iofv[6]{\def#1{#2}}% -\newcommand\slnc@iiofv[6]{\def#1{#3}}% -\newcommand\slnc@iiiofv[6]{\def#1{#4}}% -% \end{macrocode} -% \end{macro}^^A \slnc@iofv … \slnc@iiiofv -% \begin{macro}{\slnc@unprocessed} -% The \#2 of the last read note column from notes file. -% \begin{macrocode} -\newcommand*{\slnc@unprocessed}{0}% -% -% \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}} -% \begin{macro}{\slnc@mdfivesum} -% \changes{v0.1.2872}{2018/01/17}{definition and usage of Lua function -% \texttt{slncmdfivesum}} -% \changes{v0.1.2972}{2018/04/01}{usage of not yet documented \XeTeX{} -% primitive \cs{mdfivesum}} -% \changes{v0.3.3591}{2021/03/25}{Lua function name changed to -% \texttt{slnc.mdfivesum}} -% \changes{v0.3.3591}{2021/03/25}{new Lua variable \texttt{slnc.slncfile}} -% The MD5 sum of the file before opening it for reading. -% \begin{macrocode} -%<*body> -\newcommand*{\slnc@mdfivesum}{} -\let\slnc@mdfivesum\@empty -\scr@ifundefinedorrelax{pdfmdfivesum}{% - \scr@ifundefinedorrelax{mdfivesum}{% - \ifdefined\directlua - \directlua{% - slnc = slnc or {} - function slnc.mdfivesum(filename) - local fh = io.open(filename,"rb") - if fh then - local sum=md5.sumhexa(fh:read("*a")) - tex.sprint(sum) - fh:close() - end - end - if (string.sub(tex.jobname,1,1) == '"') - and (string.sub(tex.jobname,string.len(tex.jobname),-1) == '"') - then - slnc.slncfile = string.sub(tex.jobname,2,-2) - else - slnc.slncfile = tex.jobname - end - slnc.slncfile = slnc.slncfile .. '.slnc' - }% - \xdef\slnc@mdfivesum{\directlua{slnc.mdfivesum(slnc.slncfile)}}% - \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}% -}% -% -\newread\slnc@file -\immediate\openin\slnc@file \jobname.slnc -% -% \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{macro}{\ifslnc@autoclearnotecolumns,\slnc@autoclearnotecolumnstrue, -% \slnc@autoclearnotecolumnsfalse} -% \begin{macrocode} -%<*options> -\KOMA@ifkey{autoclearnotecolumns}{slnc@autoclearnotecolumns} -\slnc@autoclearnotecolumnstrue -% -%<*final> -\let\reserved@a\clearpage -\def\clearpage{% - \ifslnc@autoclearnotecolumns\clearnotecolumns\relax\fi -}% -\expandafter\g@addto@macro\expandafter\clearpage\expandafter{\reserved@a} -% -% \end{macrocode} -% \end{macro} -% \end{option} -% -% \begin{command}{\clearnotecolumn} -% \begin{description} -% \item[\oarg{string}:] the name of the note column (must be fully -% expandable and expand to a string only). Default is |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> -\newcounter{slnc@clearnote@label}% -\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> - \PackageInfo{scrlayer-notecolumn}{% - 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}% -% - \ifvmode\ifdim \pagetotal<\topskip -% \end{macrocode} -% \cs{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}% -% \PackageInfo{scrlayer-notecolumn}{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 \cs{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{% -% \PackageInfo{scrlayer-notecolumn}{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,\slnc@secondof} -% We need these little helpers, because some packages like -% \pkg{hyperref} extend the label mechanism by additional arguments. -% \begin{macrocode} -\newcommand*{\slnc@firstof}{} -\def\slnc@firstof#1#2\@nil{#1}% -\newcommand*{\slnc@secondof}{} -\def\slnc@secondof#1#2#3\@nil{#2}% -% \end{macrocode} -% \end{macro}^^A \slnc@firstof,\slnc@secondof -% \begin{macro}{\slnc@voidtest} -% \begin{description} -% \item[\marg{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 \cs{z@} otherwise -% \cs{@ne}. -% \begin{macrocode} -\newcommand*{\slnc@voidtest}[1]{% - \expandafter\ifvoid \csname slnc@#1@box\endcsname \z@\else \@ne\fi -} -% -% \end{macrocode} -% \end{macro}^^A \slnc@voidtest -% \end{command}^^A \clearnotecolumn -% -% \begin{command}{\clearnotecolumns} -% \changes{v3.26}{2018/08/29}{\cs{scr@trim@spaces} added} -% \changes{v3.26}{2018/08/29}{removed spurious \cs{expandafter}} -% \begin{description} -% \item[\oarg{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> -\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> - \PackageInfo{scrlayer-notecolumn}{% - TRACE (slnc): clearnote=\@nameuse{theslnc@clearnote@label}, - abspage=\theslncpage, until page=\slnc@cmp@value, - process=\reserved@a, pagetotal=\the\pagetotal, topskip=\the\topskip}% -% - \ifvmode\ifdim \pagetotal<\topskip -% \end{macrocode} -% \cs{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}% -% \PackageInfo{scrlayer-notecolumn}{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 \cs{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{% -% \PackageInfo{scrlayer-notecolumn}{TRACE (slnc): adding \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 -} -% -% \end{macrocode} -% \end{command}^^A \clearnotecolumns -% -% -% \subsection{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{command}{\syncwithnotecolumn,\syncwithnotecolumns} -% \changes{v3.26}{2018/08/29}{\cs{scr@trim@spaces} added} -% \changes{v3.26}{2018/08/29}{removed spurious \cs{expandafter}} -% \begin{description} -% \item[\oarg{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 |marginpar|. -% \end{description} -% \begin{counter}{slnc@syncpoint} -% 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 \cs{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> -\newcounter{slnc@syncpoint}% -\newcommand*{\syncwithnotecolumn}[1][marginpar]{% - \begingroup - \edef\reserved@a{\endgroup\noexpand\syncwithnotecolumns[{#1}]}% - \reserved@a -} -\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 - colors 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} -% 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% - }% -% - \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} -% \end{counter} -% \begin{macro}{\slnc@vadjust} -% \begin{macrocode} -\newcommand{\slnc@vadjust}[1]{% - \@bsphack - \vadjust{#1}% - \@esphack -} -% -% \end{macrocode} -% \end{macro}^^A \slnc@vadjust -% \end{command}^^A \syncwithnotecolumn,\syncwithnotecolumns -% -% -% \begin{macrocode} -% -% \end{macrocode} -% -% \Finale -% \PrintChanges -% -\endinput -% Local Variables: -% mode: doctex -% ispell-local-dictionary: "en_US" -% eval: (flyspell-mode 1) -% TeX-master: t -% TeX-engine: luatex-dev -% eval: (setcar (or (cl-member "Index" (setq-local TeX-command-list (copy-alist TeX-command-list)) :key #'car :test #'string-equal) (setq-local TeX-command-list (cons nil TeX-command-list))) '("Index" "mkindex %s" TeX-run-index nil t :help "makeindex for dtx")) -% End: -- cgit v1.2.3