From ed8702df3768e21a3ef87a2eec9ca8341aad9b7a Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sun, 13 Oct 2019 21:40:52 +0000 Subject: koma-script (13oct19) git-svn-id: svn://tug.org/texlive/trunk@52369 c570f23f-e606-0410-a88d-b1316a301751 --- .../latex/koma-script/scrlayer-notecolumn.dtx | 252 ++++++++++++++++----- 1 file changed, 190 insertions(+), 62 deletions(-) (limited to 'Master/texmf-dist/source/latex/koma-script/scrlayer-notecolumn.dtx') diff --git a/Master/texmf-dist/source/latex/koma-script/scrlayer-notecolumn.dtx b/Master/texmf-dist/source/latex/koma-script/scrlayer-notecolumn.dtx index 324a5e83303..8a0c160a231 100644 --- a/Master/texmf-dist/source/latex/koma-script/scrlayer-notecolumn.dtx +++ b/Master/texmf-dist/source/latex/koma-script/scrlayer-notecolumn.dtx @@ -1,8 +1,8 @@ -% \CheckSum{1747} +% \CheckSum{1866} % \iffalse^^A meta-comment % ====================================================================== % scrlayer-notecolumn.dtx -% Copyright (c) Markus Kohm, 2013-2018 +% Copyright (c) Markus Kohm, 2013-2019 % % This file is part of the LaTeX2e KOMA-Script bundle. % @@ -20,7 +20,7 @@ % This work consists of all files listed in manifest.txt. % ---------------------------------------------------------------------- % scrlayer-notecolumn.dtx -% Copyright (c) Markus Kohm, 2013-2018 +% Copyright (c) Markus Kohm, 2013-2019 % % Diese Datei ist Teil der LaTeX2e KOMA-Script-Sammlung. % @@ -57,7 +57,7 @@ % Right brace \} Tilde \~} % % \iffalse^^A meta-comment -%%% From File: $Id: scrlayer-notecolumn.dtx 3011 2018-08-29 07:35:17Z kohm $ +%%% From File: $Id: scrlayer-notecolumn.dtx 3161 2019-06-27 06:41:04Z kohm $ %%%% (run: identify) %%%% (run: init) %%%% (run: options) @@ -67,9 +67,9 @@ \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 $ + \filedate$Date: 2019-06-27 08:41:04 +0200 (Thu, 27 Jun 2019) $ + \def\filerevision$#1: #2 ${\gdef\filerevision{v0.3.#2}} + \filerevision$Revision: 3161 $ \edef\reserved@a{% \noexpand\endgroup \noexpand\ProvidesFile{scrlayer-notecolumn.dtx}% @@ -229,8 +229,8 @@ % % 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 +% \cs{pdflastypos} in luaTeX}%^^A +% \changes{v0.1.2483}{2016/06/28}{grouping fixed}%^^A % \begin{macrocode} \@tempswatrue \scr@ifundefinedorrelax{pdfsavepos}{% @@ -328,6 +328,29 @@ }% }{}% % \end{macrocode} +% \changes{3.27}{2019/02/14}{initialization of one colour stack per note +% column}%^^A +% For colour support we also need one colour stack per note column. A colour +% 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}% + \scrlayerOnAutoRemoveInterface[scrlayer-notecolumn.sty]{% + \expandafter\let\csname slnc@#2@colorstack\endcsname\relax + }% + }% + }{% + \expandafter\chardef\csname slnc@#2@colorstack\endcsname= + \pdfcolorstackinit direct {\slnc@initial@black}% + \scrlayerOnAutoRemoveInterface[scrlayer-notecolumn.sty]{% + \expandafter\let\csname slnc@#2@colorstack\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} @@ -398,6 +421,27 @@ }% } % \end{macrocode} +% \begin{macro}{\slnc@initial@black} +% \changes{v0.2.3085}{2019/02/14}{new internal}%^^A +% The initial black is the colour used to initialize the colour stacks. As long +% as only pdf\TeX{} and lua\TeX{} provide colour 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 colour package. Using \cs{default@color} would +% be even better, but this is not available until \cs{begin\{document\}}. +% \begin{macrocode} +\scrlayerAddToInterface\slnc@initial@black{% + \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 % \Macro{@cons} and \Macro{@elt} etc.). @@ -406,7 +450,7 @@ \newcommand*{\slnc@processnotecolumns}{}% } % \end{macrocode} -% \end{macro}^^A \slnc@processnotecolumns +% \end{macro}%^^A \slnc@processnotecolumns % \begin{macrocode} % % \end{macrocode} @@ -687,11 +731,11 @@ % % \begin{macro}{\tf@slnc} % \changes{v0.1.2395}{2016/03/25}{write to \texttt{aux}-file with -% \cs{if@filesw}}^^A +% \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 +% 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 @@ -727,9 +771,9 @@ % 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 +% \texttt{slncmdfivesum}}%^^A % \changes{v0.1.2972}{2018/04/01}{usage of not yet documented Xe\TeX{} -% primitive \cs{mdfivesum}}^^A +% primitive \cs{mdfivesum}}%^^A % \begin{macrocode} \AfterReadingMainAux{% \immediate\closeout\tf@slnc @@ -781,9 +825,9 @@ } % % \end{macrocode} -% \end{macro}^^A \slnc@openwrite -% \end{macro}^^A \slnc@initwrite -% \end{macro}^^A \tf@slnc +% \end{macro}%^^A \slnc@openwrite +% \end{macro}%^^A \slnc@initwrite +% \end{macro}%^^A \tf@slnc % % \begin{macro}{\makenote} % \begin{description} @@ -798,9 +842,9 @@ % 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 +% \changes{0.1.2583}{2017/02/08}{new (internal)}%^^A % \begin{macro}{\slnc@makenote} -% \changes{0.1.2583}{2017/02/08}{new (internal)}^^A +% \changes{0.1.2583}{2017/02/08}{new (internal)}%^^A % \begin{macrocode} %<*body> \scrlayerAddToInterface\slnc@unexpanded{% @@ -840,10 +884,10 @@ }{} % % \end{macrocode} -%^^A \end{counter}^^A slncpage -% \end{macro}^^A \slnc@unexpanded -% \end{macro}^^A \slnc@makenote -% \end{macro}^^A \makenote +%^^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} @@ -902,11 +946,15 @@ \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? +% \changes{v0.2.3085}{2019/02/14}{using colour stack if available}%^^A +% 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} - \let\color\@gobble + \slnc@switchcolorstack{#1}% + {% \usekomafont{notecolumn.#1}{% \slnc@notesyncfonttest{#1}% \expandafter\ifvoid\csname slnc@#1@box\endcsname @@ -916,7 +964,7 @@ \fi % \end{macrocode} % \changes{v0.1}{2015/10/07}{ready for renaming \cs{pdfpageheight} in -% luaTeX}^^A +% 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} @@ -972,7 +1020,7 @@ \ifdim\@tempdima>\z@ \kern\@tempdima\fi \fi % \end{macrocode} -% \changes{v0.1.2582}{2017/02/08}{restore several commands}^^A +% \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 @@ -1019,6 +1067,7 @@ \splitmaxdepth\baselineskip % \end{macrocode} % Bring back the colours: +% \changes{v0.2.3085}{2019/02/14}{\cs{slnc@switchcolorstack} added}%^^A % \begin{macrocode} \usekomafont{notecolumn.#1}{% \expandafter\vsplit\csname slnc@#1@box\endcsname to @@ -1027,7 +1076,8 @@ \expandafter\ifvoid\csname slnc@#1@box\endcsname \else \expandafter\setbox\csname slnc@#1@box\endcsname\vbox{% - \expandafter\unvbox\csname slnc@#1@box\endcsname + \slnc@switchcolorstack{#1}% + \expandafter\unvbox\csname slnc@#1@box\endcsname }% \fi \else @@ -1036,8 +1086,10 @@ % % \end{macrocode} % Bring back the colours: +% \changes{v0.2.3085}{2019/02/14}{\cs{slnc@switchcolorstack} added}%^^A % \begin{macrocode} \usekomafont{notecolumn.#1}{% + \slnc@switchcolorstack{#1}% \expandafter\box\csname slnc@#1@box\endcsname% }% \fi @@ -1049,10 +1101,61 @@ } } % \end{macrocode} +% \begin{macro}{\slnc@switchcolorstack} +% \changes{v0.2.3085}{2019/02/14}{new internal}%^^A +% This either redefines \cs{set@color} or switches to the colour stack of the +% note column given by the argument. +% \begin{macrocode} +\scrlayerAddToInterface{\slnc@switchcolorstack}{% + \newcommand*{\slnc@switchcolorstack}[1]{% + \scr@ifundefinedorrelax{slnc@#1@colorstack}{% + \def\set@color{% + \PackageWarningNoLine{scrlayer-notecolumn}{% + unsupported change of colour!\MessageBreak + It seems you are using a TeX engine,\MessageBreak + that does not support switching the\MessageBreak + colour 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}{% + colour 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{macro}{\restoreinnote} -% \changes{0.1.2582}{2017/02/08}{new command}^^A +% \changes{0.1.2582}{2017/02/08}{new command}%^^A % \begin{macro}{\slnc@restoreinnote} -% \changes{0.1.2582}{2017/02/08}{new (internal)}^^A +% \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}. @@ -1077,12 +1180,34 @@ \restoreinnote\glossary } % \end{macrocode} -% \end{macro}^^A \slnc@restoreinnote -% \end{macro}^^A \restoreinnote +% \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{macro}{\slnc@catcodes} +% \changes{v0.3}{2019/03/02}{new internal}%^^A +% We need a helper macro \cs{slnc@catcodes} to restore (some of) the catcodes +% before reading from file. +% \begin{macrocode} +\scrlayerAddToInterface\slnc@catcodes{% + \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} \scrlayerAddToInterface\slnc@readnotes{% \newcommand*\slnc@readnotes[1]{% @@ -1093,13 +1218,16 @@ \@tempswatrue \fi \@whilesw\if@tempswa\fi{% - \edef\reserved@a{% - \noexpand\makeatletter + \begingroup + \slnc@catcodes \endlinechar\m@ne - \read\noexpand\slnc@file to\noexpand\reserved@a - \endlinechar\the\endlinechar\relax - \catcode`\noexpand\@=\the\catcode`\@\relax - }% + \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 @@ -1155,7 +1283,7 @@ }% } % \end{macrocode} -% \end{macro}^^A \slnc@readnotes +% \end{macro}%^^A \slnc@readnotes % \begin{macro}{\slnc@iofv} % \begin{macro}{\slnc@iiofv} % \begin{macro}{\slnc@iiiofv} @@ -1170,9 +1298,9 @@ \newcommand\slnc@iiiofv[6]{\def#1{#4}}% } % \end{macrocode} -% \end{macro}^^A \slnc@iiiofv -% \end{macro}^^A \slnc@iiofv -% \end{macro}^^A \slnc@iofv +% \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} @@ -1184,12 +1312,12 @@ % \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 +% 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 +% \texttt{slncmdfivesum}}%^^A % \changes{v0.1.2972}{2018/04/01}{usage of not yet documented Xe\TeX{} -% primitive \cs{mdfivesum}}^^A +% primitive \cs{mdfivesum}}%^^A % The MD5 sum of the file before opening it for reading. % \begin{macrocode} %<*body> @@ -1231,10 +1359,10 @@ } % % \end{macrocode} -% \end{macro}^^A \slnc@mdfivesum -% \end{macro}^^A \slnc@file -% \end{macro}^^A \slnc@unprocessed -% \end{macro}^^A \slnc@processnotes +% \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} @@ -1393,8 +1521,8 @@ \def\slnc@secondof#1#2#3\@nil{#2}% } % \end{macrocode} -% \end{macro}^^A \slnc@firstof -% \end{macro}^^A \slnc@secondof +% \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 @@ -1410,12 +1538,12 @@ } % % \end{macrocode} -% \end{macro}^^A \slnc@voidtest -% \end{macro}^^A \clearnotecolumn +% \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 +% \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, @@ -1565,7 +1693,7 @@ } % % \end{macrocode} -% \end{macro}^^A \clearnotecolumns +% \end{macro}%^^A \clearnotecolumns % % % \section{Syncronisation of Text and Note} @@ -1578,8 +1706,8 @@ % 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 +% \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 @@ -1707,7 +1835,7 @@ }% % \end{macrocode} % \changes{v0.1}{2015/10/07}{ready for renaming \cs{pdfpageheight} in -% luaTeX}^^A +% 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} @@ -1765,8 +1893,8 @@ } % % \end{macrocode} -% \end{macro}^^A \slnc@vadjust -% \end{macro}^^A \syncwithnotecolumn +% \end{macro}%^^A \slnc@vadjust +% \end{macro}%^^A \syncwithnotecolumn % % % \iffalse^^A meta-comment -- cgit v1.2.3