From ed106ad4cb2e3cb0269bdc9f721ff75df77532cf Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Tue, 28 Feb 2023 03:02:32 +0000 Subject: CTAN sync 202302280302 --- macros/latex/contrib/listings/listings.dtx | 385 +++++++++++++++++++---------- 1 file changed, 260 insertions(+), 125 deletions(-) (limited to 'macros/latex/contrib/listings/listings.dtx') diff --git a/macros/latex/contrib/listings/listings.dtx b/macros/latex/contrib/listings/listings.dtx index 1874a17849..c507ab5fc1 100644 --- a/macros/latex/contrib/listings/listings.dtx +++ b/macros/latex/contrib/listings/listings.dtx @@ -133,7 +133,7 @@ % Hoffmann became the maintainer of the \packagename{listings} % package in 2013; see the Preface for details.}~ % % \textless\lstemail\textgreater} -% \date{2020/03/24\enspace\enspace Version 1.8d\ \box\abstractbox} +% \date{2023/02/27\enspace\enspace Version 1.9\ \box\abstractbox} % \def\lstemail{\href{mailto:j.hoffmann@fh-aachen.de}{\texttt{j.hoffmann(at)fh-aachen.de}}} % \ifhyper % \hypersetup{pdftitle=The Listings Package, @@ -921,8 +921,12 @@ % insensitive and that spaces have no effect. % % There is at least one language (VDM, Vienna Development Language, -% \url{http://www.vdmportal.org}) which is not directly supported by the -% \packagename{listings} package. It needs a package for its own: +% \url{https://en.wikipedia.org/wiki/Vienna_Development_Method}^^A +% \footnote{\lsthelper{Vladimir Nikishkin}{2019/11/15}% +% {bug report in the listings package documentation} informed that the +% previous mentioned URL \url{http://www.vdmportal.org} doesn't point +% to a VDM specific page anymore.}) which is not directly supported by +% the \packagename{listings} package. It needs a package for its own: % \packagename{vdmlisting}. On the other hand \packagename{vdmlisting} uses % the \packagename{listings} package and so it should be mentioned in this % context. @@ -938,7 +942,7 @@ % |listings-|\meta{language}|.prf|, \meta{language} is the name of the % supported programming language in lowercase letters. % -% So if an user of the \packagename{listings} package wants to use these +% So if a user of the \packagename{listings} package wants to use these % preferences, she/he can say for example when using Python % \begin{quote} % |\input{listings-python.prf}| @@ -1257,9 +1261,13 @@ % % \paragraph{Captions} % Now we come to \ikeyname{caption} and \ikeyname{label}. You might guess -% (correctly) that they can be used in the same manner as \LaTeX's |\caption| -% and |\label| commands, although here it is also possible to have a caption -% regardless of whether or not the listing is in a float: +% (correctly) that they can be used in the same manner as \LaTeX's +% |\caption| and |\label| commands, although here it is also possible to +% have a caption regardless of whether or not the listing is in a +% float:\footnote{You should keep in mind that according to +% \cite{Mittelbach:companion} \ldots{} if the caption's text fits on one +% line, the text is centered; if the text does not fit on a single line, it +% will be typeset as a paragraph with a width equal to the line width.} % \begin{lstsample}[caption,label]{\lstset{xleftmargin=.05\linewidth}}{} % \begin{lstlisting}[caption={Useless code},label=useless] % for i:=maxint to 0 do @@ -1788,7 +1796,7 @@ % \end{lstsample} % As you can see, you have the choice between specifying the style explicitly % by \LaTeX\ commands or implicitly by other style keys. But, you're right, -% some implicitly defined styles have no seperate keys, for example the second +% some implicitly defined styles have no separate keys, for example the second % order keyword style. Here---and never with the number 1---you just append % the order to the base key: \texttt{keywordstyle2}. % @@ -1985,7 +1993,7 @@ % \lstthanks{Chris~Edwards}{edwch00p@infoscience.otago.ac.nz}, % \lstthanks{David~John~Evans}{Matrix.Software@dial.pipex.com}, % \lstthanks{Tanguy~Fautr\'e}{tfautre@pandora.be}, -% \lstthanks{Ulrike~Fischer}{-}, +% \lstthanks{Ulrike~Fischer}{news3@nililand.de}, % \lstthanks{Robert~Frank}{rf7@ukc.ac.uk}, % \lstthanks{Michael~Franke}{-}, % \lstthanks{Ignacio~Fern\'andez~Galv\'an}{-}, @@ -2337,7 +2345,7 @@ % can be used on individual listings only. They determine the physical % input lines used to print displayed listings. % -% \item[1.2] +% \item[1.2;1.9] % \rkeyname{linerange}|={|\meta{first1}\texttt-\meta{last1}\texttt,^^A % \meta{first2}\texttt-\meta{last2}\texttt, and so % on|}|\label{uoption:linerange} @@ -2346,6 +2354,14 @@ % listing are displayed. The intervals must be sorted and must not % intersect. % +% In fact each part of the triplet \meta{first}\texttt-\meta{last} may +% be omitted. Omitting \meta{first} or \meta{last} means, that the +% range begins at line no. 1 and ends at \meta{last} or begins at +% \meta{first} ends at the last line of the file, a single number +% means, that the range begins and ends at the line given by the +% number, whereas omitting \meta{first} or \meta{last} means the range +% begins at line no. 1 and ends at the last line of the file. +% % \item[1.8, true] % \rkeyname{consecutivenumbers}|=|\meta{\alternative{true,false}}^^A % \syntaxor\rkeyname{consecutivenumbers}\label{uoption:consecutivenumbers} @@ -3590,7 +3606,7 @@ % example, but the examples apply to \keyname{comment} and % \keyname{deletecomment} as well. % -% \item[0.13] \keyname{morecomment}|=[l]|\meta{delimiter} +% \item[0.13] \rkeyname{morecomment}|=[l]|\meta{delimiter} % % The delimiter starts a comment line, which in general starts with the % delimiter and ends at end of line. If the character sequence |//| @@ -3598,7 +3614,7 @@ % |morecomment=[l]//| is the correct declaration. For Matlab it would % be |morecomment=[l]\%|---note the preceding backslash. % -% \item[0.13] \keyname{morecomment}|=[s]|\marg{delimiter}\marg{delimiter} +% \item[0.13] \rkeyname{morecomment}|=[s]|\marg{delimiter}\marg{delimiter} % % Here we have two delimiters. The second ends a comment starting with % the first delimiter. If you require two such comments you can use @@ -3607,14 +3623,14 @@ % |morecomment=[s]{\#}{\#}|, which means that the sharp delimits both % beginning and end of a single comment. % -% \item[0.13] \keyname{morecomment}|=[n]|\marg{delimiter}\marg{delimiter} +% \item[0.13] \rkeyname{morecomment}|=[n]|\marg{delimiter}\marg{delimiter} % % is similar to type |s|, but comments can be nested. Identical % arguments are not allowed---think a while about it! Modula-2 and % Oberon-2 use |morecomment=[n]{(*}{*)}|. % -% \item[0.18] \keyname{morecomment}|=[f]|\meta{delimiter} -% \item[0.18] \keyname{morecomment}|=[f][commentstyle]|\oarg{n=preceding +% \item[0.18] \rkeyname{morecomment}|=[f]|\meta{delimiter} +% \item[0.18] \rkeyname{morecomment}|=[f][commentstyle]|\oarg{n=preceding % columns}\meta{delimiter} % % The delimiter starts a comment line if and only if it appears on a @@ -4487,6 +4503,11 @@ % Robin Fairbairns. % \newblock{The \textsf{moreverb} package}, 2011. % +% \bibitem[Mi04]{Mittelbach:companion} +% Frank Mittelbach, Michel Goossens, Johannes Braams, +% David P. Carlisle, and Chris Rowley. +% \newblock{The \LaTeX-Companion}, 2004. +% % \bibitem[Som11]{Sommerfeldt:captions} % Axel Sommerfeldt. % \newblock{Customizing captions of floating environments}, 2011. @@ -5216,7 +5237,7 @@ % defines the specified character respectively assigns \meta{token}. % The catcode table if not affected. Be careful if your definition has % parameters: it is not safe to read more than one character ahead. -% Moreover, the argument can be \emph{arbitrary}; somtimes it's the next +% Moreover, the argument can be \emph{arbitrary}; sometimes it's the next % source code character, sometimes it's some code of the % \packagename{listings} package, e.g.~|\relax|, |\@empty|, |\else|, % |\fi|, and so on. Therefore don't use \TeX's ord-operator |`| on such @@ -5909,7 +5930,7 @@ % \part{Implementation} % % -% \CheckSum{12394} +% \CheckSum{12388} %^^A %^^A Don't index TeX-primitives. %^^A @@ -6053,8 +6074,8 @@ % All files will have same date and version. % \begin{macrocode} %<*kernel|misc|doc> -\def\filedate{2020/03/24} -\def\fileversion{1.8d} +\def\filedate{2023/02/27} +\def\fileversion{1.9} % % \end{macrocode} % What we need and who we are. @@ -8570,10 +8591,19 @@ % % \begin{macro}{\lst@outputspace} % \begin{macro}{\lst@visiblespace} -% The first macro is a default definition, \ldots +% \lsthelper{Denis Bitouz\'e}{2020/09/12}{`lst@visiblespace: +% `verbvisiblespace instead of `textvisiblespace} pointed out, that, +% with Lua\LaTeX{} and some monospaced font which doesn't have an +% appropriate glyph in slot 32, `showspaces' hasn't any effect by using +% |\textvisiblespace|. So now we're using |\verbvisiblespace| as a default +% definition for the first macro, the test for the fontfamily +% |\lst@ttfamily| is deleted, because in most of the cases it lead to +% the (wrong) output of |\char32|. The definition of |\verbvisible| +% from latex.ltx takes the different behaviour of the modern \TeX{} +% engines into account and defines a valid |\verbvisiblespace| % \begin{macrocode} \def\lst@outputspace{\ } -\def\lst@visiblespace{\lst@ttfamily{\char32}\textvisiblespace} +\def\lst@visiblespace{\verbvisiblespace} % \end{macrocode} % \end{macro} % \end{macro} @@ -11876,6 +11906,7 @@ \lst@procnamefalse \fi} % \end{macrocode} +% And these are the two implemented keys: % \begin{macrocode} \lst@Key{procnamestyle}{}{\def\lst@procnamestyle{#1}} \lst@Key{indexprocnames}{false}[t]{\lstKV@SetIf{#1}\lst@ifindexproc} @@ -12622,7 +12653,7 @@ }{\def\lst@firstnumber{#1\relax}}} \lst@AddToHook{PreSet}{\let\lst@advancenumber\z@} % \end{macrocode} -% |\lst@firstnumber| now set to |\lst@lineno| instead of |\lst@firstline|, +% |\lst@firstnumber| is now set to |\lst@lineno| instead of |\lst@firstline|, % as per changes in |lstpatch.sty| from 1.3b pertaining to linerange markers. % \begin{macrocode} \lst@AddToHook{PreInit} @@ -13690,8 +13721,7 @@ % \begin{lstkey}{print} % \begin{lstkey}{firstline} % \begin{lstkey}{lastline} -% \begin{lstkey}{linerange} -% The `current line' counter and three keys. +% The `current line' counter and three option keys. % \begin{macrocode} \newcount\lst@lineno % \global \lst@AddToHook{InitVars}{\global\lst@lineno\@ne} @@ -13701,12 +13731,19 @@ \lst@Key{firstline}\relax{\def\lst@firstline{#1\relax}} \lst@Key{lastline}\relax{\def\lst@lastline{#1\relax}} % \end{macrocode} +% Initialize the linerange with reasonable values % \begin{macrocode} \lst@AddToHook{PreSet} - {\let\lst@firstline\@ne \def\lst@lastline{9999999\relax}} +{% + \def\lst@firstline{1\relax} + \def\lst@lastline{9999999\relax} + \let\lst@linerange\@empty +} % \end{macrocode} % \end{lstkey} -% \end{lstkey}\end{lstkey}\end{lstkey}\end{macro} +% \end{lstkey} +% \end{lstkey} +% \end{macro} % The following code is just copied from the current development version, and % from the |lstpatch.sty| file that Carsten left in version 1.3b for doing % line ranges with numbers and range markers. It uses some more keys: @@ -13724,8 +13761,11 @@ % \begin{macrocode} \lst@Key{linerange}\relax{\lstKV@OptArg[]{#1}{% \def\lst@interrange{##1}\def\lst@linerange{##2,}}} +\lst@Key{consecutivenumbers}{true}[t]{% + \lstKV@SetIf{#1}\lst@ifconsecutivenumbers} % \end{macrocode} -% +% The next options are needed for an easy description of arbitrary linerange +% markers: % \begin{macrocode} \lst@Key{rangeprefix}\relax{\def\lst@rangebeginprefix{#1}% \def\lst@rangeendprefix{#1}} @@ -13735,67 +13775,127 @@ \lst@Key{rangebeginsuffix}{}{\def\lst@rangebeginsuffix{#1}} \lst@Key{rangeendprefix}{}{\def\lst@rangeendprefix{#1}} \lst@Key{rangeendsuffix}{}{\def\lst@rangeendsuffix{#1}} -\lst@Key{includerangemarker}{true}[t]{\lstKV@SetIf{#1}\lst@ifincluderangemarker} -\lst@AddToHook{PreSet}{\def\lst@firstline{1\relax}% - \let\lst@linerange\@empty} +\lst@Key{includerangemarker}{true}[t]{\lstKV@SetIf{#1}% + \lst@ifincluderangemarker} +% \end{macrocode} +% The line range is known---it is set either explicitly (by numbers or by +% arbitrary linerange markers) or implicitly from the default values (1 and +% 999999). |\lst@GetLineInterval| parses the known line range recursively, +% because there may be a comma separated list of pairs. +% \begin{macrocode} \lst@AddToHook{Init} - {\ifx\lst@linerange\@empty - \edef\lst@linerange{{\lst@firstline}-{\lst@lastline},}% - \fi% - \lst@GetLineInterval}% +{% + \ifx\lst@linerange\@empty + \edef\lst@linerange{{\lst@firstline}-{\lst@lastline},}% + \fi% + \lst@GetLineInterval% +}% \def\lst@GetLineInterval{\expandafter\lst@GLI\lst@linerange\@nil} -\def\lst@GLI#1,#2\@nil{\def\lst@linerange{#2}\lst@GLI@#1--\@nil} +% \end{macrocode} +% Splitting the comma separated list of pairs is done by +% \begin{macrocode} +\def\lst@GLI#1,#2\@nil{% +% \end{macrocode} +% The list is split into two parts: the first element (\#1) of the list and +% the rest of the list (\#2) which is stored in |\lst@linerange| to be +% processed later. +% \begin{macrocode} + \def\lst@linerange{#2}\lst@GLI@#1--\@nil% +} +% \end{macrocode} +% Further parsing is done by |lst@GLI@|, the argument is |#1--\@nil| that +% is the first element of the list augmented by a sentinel. This +% argument is parsed with the template |#1-#2-#3\@nil|. A linerange given +% as e.\,g. `|12-21|' leads to the argument |12-21--\@nil|, so it is parsed +% as \#1\(\leftarrow\) |12|, \#2\(\leftarrow\)|21|, and \#3\(\leftarrow\)|-|. +% \begin{macrocode} \def\lst@GLI@#1-#2-#3\@nil{% - \lst@IfNumber{#1}% - {\ifx\@empty#1\@empty - \let\lst@firstline\@ne - \else - \def\lst@firstline{#1\relax}% - \fi - \ifx\@empty#3\@empty - \def\lst@lastline{9999999\relax}% - \else - \ifx\@empty#2\@empty - \let\lst@lastline\lst@firstline - \else - \def\lst@lastline{#2\relax}% - \fi - \fi}% % \end{macrocode} -% If we've found a general marker, we set firstline and lastline to 9999999. -% This prevents (almost) anything from being printed for now. +% First we test, if the linerange starts with a number (consisting of -, 1, +% 2, 3, \ldots) or an arbitrary linerange marker. If a linerange starts +% erroneously with a `|-|' character, the argument \#1 isn't set and so the +% range starts with 1, so giving a perhaps expected result, but the +% definition of a linerange must always consist at least of the three parts +% \meta{first}, `|-|', and \meta{last}. +% \begin{macrocode} + \lst@IfNumber{#1}% + {% + \ifx\@empty#1\@empty + \let\lst@firstline\@ne + \else + \def\lst@firstline{#1\relax}% + \fi +% \end{macrocode} +% Now we know the starting number of the linerange. \#3 isn't set with a +% linerange consisting of a single number, in all other cases \#2 defines +% the last line (explicitly or implicitly). +% \begin{macrocode} + \ifx\@empty#3\@empty% + \def\lst@lastline{9999999\relax}% + \ifx\@empty#2\@empty + \let\lst@lastline\lst@firstline% + \fi + \else% + \ifx\@empty#2\@empty + \def\lst@lastline{9999999\relax} + \else % doesn't happen(?) + \def\lst@lastline{#2\relax}% + \fi + \fi + }% +% \end{macrocode} +% If we've found an arbitrary linerange marker, we set firstline and lastline to +% 9999999. This prevents (almost) anything from being printed for now. % \begin{macrocode} - {\def\lst@firstline{9999999\relax}% - \let\lst@lastline\lst@firstline + {% + \def\lst@firstline{9999999\relax}% + \let\lst@lastline\lst@firstline % \end{macrocode} % We add the prefixes and suffixes to the markers. % \begin{macrocode} - \let\lst@rangebegin\lst@rangebeginprefix - \lst@AddTo\lst@rangebegin{#1}\lst@Extend\lst@rangebegin\lst@rangebeginsuffix - \ifx\@empty#3\@empty - \let\lst@rangeend\lst@rangeendprefix - \lst@AddTo\lst@rangeend{#1}\lst@Extend\lst@rangeend\lst@rangeendsuffix - \else - \ifx\@empty#2\@empty - \let\lst@rangeend\@empty - \else - \let\lst@rangeend\lst@rangeendprefix - \lst@AddTo\lst@rangeend{#2}\lst@Extend\lst@rangeend\lst@rangeendsuffix - \fi - \fi + \let\lst@rangebegin\lst@rangebeginprefix + \lst@AddTo\lst@rangebegin{#1}% + \lst@Extend\lst@rangebegin\lst@rangebeginsuffix + \ifx\@empty#3\@empty + \let\lst@rangeend\lst@rangeendprefix + \lst@AddTo\lst@rangeend{#1} + \lst@Extend\lst@rangeend\lst@rangeendsuffix + \else + \ifx\@empty#2\@empty + \let\lst@rangeend\@empty + \else + \let\lst@rangeend\lst@rangeendprefix + \lst@AddTo\lst@rangeend{#2}% + \lst@Extend\lst@rangeend\lst@rangeendsuffix + \fi + \fi % \end{macrocode} % The following definition will be executed in the % \hookname{SelectCharTable} hook and here right now if we are already % processing a listing. % \begin{macrocode} - \global\def\lst@DefRange{\expandafter\lst@CArgX\lst@rangebegin\relax\lst@DefRangeB}% - \ifnum\lst@mode=\lst@Pmode \expandafter\lst@DefRange \fi}} + \global\def\lst@DefRange{% + \expandafter\lst@CArgX\lst@rangebegin\relax\lst@DefRangeB}% + \ifnum\lst@mode=\lst@Pmode \expandafter\lst@DefRange \fi% + }% +} % \end{macrocode} +% \end{lstkey} +% \end{lstkey} +% \end{lstkey} +% \end{lstkey} +% \end{lstkey} +% \end{lstkey} +% \end{lstkey} +% \end{lstkey} +% \end{lstkey} +% +% \begin{macro}{\lst@DefRange} % |\lst@DefRange| is not inserted via a hook anymore. Instead it is now called % directly from |\lst@SelectCharTable|. This was necessary to get rid of an % interference with the escape-to-LaTeX-feature. The bug was reported by % \lsthelper{Michael~Bachmann}{2004/07/21}{Keine label-Referenzierung -% m\"oglich...}. Another chance is due to the same bug: |\lst@DefRange| is +% m\"oglich...}. Another change is due to the same bug: |\lst@DefRange| is % redefined globally when the begin of code is found, see below. The bug was % reported by \lsthelper{Tobias~Rapp}{2004/04/06}{undetected end of range if % listing crosses page break} and \lsthelper{Markus~Luisser}{2004/08/13}{Bug mit @@ -13803,9 +13903,6 @@ % \begin{macrocode} \lst@AddToHookExe{DeInit}{\global\let\lst@DefRange\@empty} % \end{macrocode} -% \end{lstkey}\end{lstkey}\end{lstkey} -% \end{lstkey}\end{lstkey}\end{lstkey} -% \end{lstkey}\end{lstkey}\end{lstkey} % % Actually defining the marker (via |\lst@GLI@|, |\lst@DefRange|, % |\lst@CArgX| as seen above) is similar to |\lst@DefDelimB|---except that @@ -13830,6 +13927,7 @@ \lst@CArgEmpty}% \@empty} % \end{macrocode} +% \end{macro} % % Modify labels and define |\lst@InitLstNumber| used above according to an % error reported by @@ -13896,11 +13994,31 @@ \fi} % \end{macrocode} % +% Sometimes it is good to have two or more excerpts of one program numbered +% consecutively, i.\,e. 1--11 instead of 3--5, 12--17, 20--21. So we +% introduce |\lst@DisplayConsecutiveNumbersOrNot|, which corrects the +% displayed line numbers to be always equal to the input line numbers +% \begin{macrocode} +\def\lst@DisplayConsecutiveNumbersOrNot{% + \lst@ifconsecutivenumbers\else% + \c@lstnumber=\numexpr-1+\lst@lineno + \fi% +} +% \end{macrocode} +% % Eventually we shouldn't forget to install |\lst@OnceAtEOL|, which must % also be called in |\lst@MSkipToFirst|. % \begin{macrocode} \lst@AddToHook{EOL}{\lst@OnceAtEOL\global\let\lst@OnceAtEOL\@empty} \gdef\lst@OnceAtEOL{}% Init +% \end{macrocode} +% The following code was introduced in listings version 1.4. The code +% resembles the lines 14031--14061 of version 1.3c, but contains loops: +% \newline|\def\lst@next{...}\expandafter\lst@next|.\newline +% In fact that code will never be expanded, because there are two analoguous +% definitions in section \ref{iTheInputCommand} below, so they override +% these two commands. +% \begin{macrocode} \def\lst@MSkipToFirst{% \global\advance\lst@lineno\@ne \ifnum \lst@lineno=\lst@firstline @@ -13959,10 +14077,13 @@ % Some keys and \ldots % \begin{macrocode} \lst@Key{captionpos}{t}{\def\lst@captionpos{#1}} -\lst@Key{abovecaptionskip}\smallskipamount{\def\lst@abovecaption{#1}} -\lst@Key{belowcaptionskip}\smallskipamount{\def\lst@belowcaption{#1}} +\lst@Key{abovecaptionskip}\smallskipamount{% + \def\lst@abovecaption{#1}} +\lst@Key{belowcaptionskip}\smallskipamount{% + \def\lst@belowcaption{#1}} % \end{macrocode} -% \lsthelper{Rolf~Niepraschk}{2000/01/10}{key: title} proposed \keyname{title}. +% \lsthelper{Rolf~Niepraschk}{2000/01/10}{key: title} proposed +% \keyname{title}. % \begin{macrocode} \lst@Key{label}\relax{\def\lst@label{#1}} \lst@Key{title}\relax{\def\lst@title{#1}\let\lst@caption\relax} @@ -14009,7 +14130,8 @@ \lst@UserCommand\lstlistingnamestyle{} % \end{macrocode} % \begin{macrocode} -\lst@Key{numberbychapter}{true}[t]{\lstKV@SetIf{#1}\lst@ifnumberbychapter} +\lst@Key{numberbychapter}{true}[t]{% + \lstKV@SetIf{#1}\lst@ifnumberbychapter} % \end{macrocode} % \end{lstkey} % \end{macro} @@ -14030,19 +14152,20 @@ % titles. The first is to separate the definitions of the skip registers and % |\@makecaption|. % \begin{macrocode} -\@ifundefined{abovecaptionskip} -{\newskip\abovecaptionskip - \newskip\belowcaptionskip}{} -\@ifundefined{@makecaption} -{\long\def\@makecaption#1#2{% - \vskip\abovecaptionskip - \sbox\@tempboxa{#1: #2}% - \ifdim \wd\@tempboxa >\hsize - #1: #2\par - \else - \global \@minipagefalse - \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% - \fi +\@ifundefined{abovecaptionskip}{% + \newskip\abovecaptionskip% + \newskip\belowcaptionskip% +}{} +\@ifundefined{@makecaption}{% + \long\def\@makecaption#1#2{% + \vskip\abovecaptionskip% + \sbox\@tempboxa{#1: #2}% + \ifdim \wd\@tempboxa >\hsize% + #1: #2\par% + \else% + \global \@minipagefalse% + \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% + \fi% \vskip\belowcaptionskip}% }{} % \end{macrocode} @@ -14050,13 +14173,14 @@ % replacement text was used directly in |\lst@MakeCaption|. A |\noindent| has % been moved elsewhere and became |\@parboxrestore| after a bug report from % \lsthelper{Frank~Mittelbach}{2004/02/13}{Re: Info: Inkompatibilit\"at -% zwischen caption und listings}. \lsthelper{Karl Berry}{bold "listings -% 1"?} asked for the ability of customizing the label. So +% zwischen caption und listings}. \lsthelper{Karl Berry}{2019/08/18}{bold +% "listings 1"?} asked for the ability of customizing the label. So % |\lstlistingnamestyle| was introduced in front of |\lstlistingname|. % \begin{macrocode} \def\fnum@lstlisting{% {\lstlistingnamestyle\lstlistingname - \ifx\lst@@caption\@empty\else~\thelstlisting\fi}}% + \ifx\lst@@caption\@empty\else~\thelstlisting\fi}% +} % \end{macrocode} % Captions are set only for display style listings -- thanks to % \lsthelper{Peter~L\"offler}{2004/04/24}{pdfTeX warning (dest): name{figure.1} @@ -14070,7 +14194,7 @@ % \begin{macrocode} \def\lst@MakeCaption#1{% \lst@ifdisplaystyle - \ifx #1t% + \ifx #1t \allowbreak% \ifx\lst@@caption\@empty\expandafter\lst@HRefStepCounter \else \expandafter\refstepcounter \fi {lstlisting}% @@ -14098,8 +14222,8 @@ \addcontentsline{lol}{lstlisting}% {\protect\numberline{\thelstlisting}\lst@@caption}% \fi - \fi - \fi + \fi + \fi % \end{macrocode} % We make a caption if and only if the caption is not empty and the user % requested a caption at |#1| $\in\{\mathtt t,\mathtt b\}$. To disallow @@ -14121,9 +14245,10 @@ \def\vskip{\afterassignment\lst@vskip \@tempskipa}% \def\lst@vskip{\nobreak\@@vskip\@tempskipa\nobreak}% \par\@parboxrestore\normalsize\normalfont % \noindent (AS) - \ifx #1t\allowbreak \fi + %%\ifx #1t\allowbreak \fi \ifx\lst@title\@empty - \lst@makecaption\fnum@lstlisting{\ignorespaces \lst@caption} + \lst@makecaption\fnum@lstlisting{% + \ignorespaces \lst@caption} \else \lst@maketitle\lst@title % (AS) \fi @@ -14836,7 +14961,8 @@ % |\lst@ShortInlineOldCatcode\|\meta{c}. % \begin{macrocode} \expandafter - \xdef\csname lst@ShortInlineOldCatcode\string#1\endcsname{\the\catcode`#1}% + \xdef\csname lst@ShortInlineOldCatcode\string#1\endcsname{% + \the\catcode`#1}% % \end{macrocode} % The character is spliced into the definition using the same trick as % used in |\verb| (for instance), having activated |~| in a group. @@ -14850,7 +14976,8 @@ % \begin{macrocode} \global\expandafter\let \csname lst@ShortInlineOldMeaning\string#1\endcsname~% - \expandafter\gdef\expandafter~\expandafter{\lst@shortinlinedef#1}}% + \expandafter\gdef\expandafter~\expandafter{% + \lst@shortinlinedef#1}}% \endgroup % \end{macrocode} % Finally the character is made active. @@ -14873,7 +15000,8 @@ % \begin{macro}{\lstDeleteShortInline} % \begin{macrocode} \def\lstDeleteShortInline#1{% - \expandafter\ifx\csname lst@ShortInlineOldCatcode\string#1\endcsname\relax + \expandafter\ifx% + \csname lst@ShortInlineOldCatcode\string#1\endcsname\relax% \PackageError{Listings}% {#1 is not a short reference for \string\lstinline}% {Use \string\lstMakeShortInline first.}% @@ -15103,15 +15231,6 @@ % We just look whether to drop more lines or to leave the mode which restores % the definition of chr(13) and chr(10). % \begin{macrocode} - \lst@Key{consecutivenumbers}{true}[t]{\lstKV@SetIf{#1}\lst@ifconsecutivenumbers} - \def\lst@DisplayConsecutiveNumbersOrNot{% - \lst@ifconsecutivenumbers\typeout{consecutive:}\else% - \typeout{non-consecutive:} - \c@lstnumber=\numexpr-1+\lst@lineno %\relax % this enforces the - %displayed line numbers to always be the - %input line numbers - \fi% -} \def\lst@MSkipToFirst{% \global\advance\lst@lineno\@ne \ifnum \lst@lineno=\lst@firstline @@ -15875,23 +15994,22 @@ % \end{macrocode} % % \paragraph{Indexing} -% The `user' commands. |\rstyle| is defined below. +% The `user' commands. There are two different ways to mark up a +% key. |\ikeyname| is the commmand for keys which are used \textit{i}nline, +% |\rkeyname| defines the \textit{r}eference of a key---displayed green---, +% |\rstyle| is defined below. % \begin{macrocode} \newcommand\ikeyname[1]{% \lstkeyindex{#1}{}% \lstaspectindex{#1}{}% \keyname{#1}} -\newcommand\ekeyname[1]{% - \@bsphack - \lstkeyindex{#1}{}% - \lstaspectindex{#1}{}% - \@esphack} \newcommand\rkeyname[1]{% \@bsphack \lstkeyindex{#1}{}% \lstaspectindex{#1}{}% \@esphack{\rstyle\keyname{#1}}} % \end{macrocode} +% The same rules apply to |\icmdname| and |\rcmdname|: % \begin{macrocode} \newcommand\icmdname[1]{% \@bsphack @@ -15950,6 +16068,7 @@ \fi}} % \end{macrocode} % +% % \paragraph{Unique styles} % \begin{macrocode} \newcommand*\lst{\texttt{lst}} @@ -15972,7 +16091,8 @@ \else\fontfamily#1\fi \selectfont} % \end{macrocode} -% The color mainly for keys and commands in the reference guide. +% The color mainly for keys and commands in the reference +% guide---\textit{r} means reference. % \begin{macrocode} \ifcolor \definecolor{darkgreen}{rgb}{0,0.5,0} @@ -16948,8 +17068,13 @@ \lst@UseHook{SetStyle}\lst@UseHook{EmptyStyle} \lst@UseHook{SetLanguage}\lst@UseHook{EmptyLanguage} % \end{macrocode} -% Finally we load the configuration files. +% Finally we load the configuration files. \lsthelper{Ulrike~Fischer}{2020/11/13} +% {.cfg-file is read with wrong catcode} pointed out that this must happen +% with the correct catcode. At the moment the catcode of |^^M| is 9, which +% is wrong. So we reset the catcodes to the correct values before loading +% the files: % \begin{macrocode} +\lst@RestoreCatcodes% \InputIfFileExists{listings.cfg}{}{} \InputIfFileExists{lstlocal.cfg}{}{} %\lst@ReportAllocs @@ -17059,16 +17184,26 @@ % \item[1.5] 2013/06/27 % \item new maintainership % \item[1.6] 2015/05/05 -% \item add discussion about using |\lstinline|\oarg{key=value list}\marg{source code}. +% \item add discussion about using |\lstinline|\oarg{key=value list}\marg{source code} % \item add section ``Bugs and workarounds''. % \item[1.7] 2018/09/02 -% \item some new or updated language definitions. -% \item several error corrections. +% \item some new or updated language definitions +% \item several error corrections % \item[1.8] from 2019/02/27 on -% \item corrected and activated the option |inputpath|. -% \item some new or updated language definitions. -% \item several error corrections. -% \item introduced |\lstlistingnamestyle|. +% \item corrected and activated the option |inputpath| +% \item some new or updated language definitions +% \item several error corrections +% \item introduced |\lstlistingnamestyle| +% \item[1.9] from 2023/02/27 on +% \item hopefully corrected the long outstanding wrong behaviour of +% displaying visible spaces +% \item generalized the use of |linerange| +% \item introduced key |consecutivenumbers| +% \item a pagebreak between a (top) caption and source code isn't allowed +% anymore +% \item the configuration files |listings.cfg| and |lstlocal.cfg| are read +% with the correct catcode +% \item some documentation and layout enhancements. % \end{itemize} % \endgroup % -- cgit v1.2.3