From f13b318e9141d8f73521ec9e249647ebb38c6510 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Wed, 11 May 2022 03:00:53 +0000 Subject: CTAN sync 202205110300 --- macros/latex/contrib/fancyhdr/fancyhdr.dtx | 208 +++++++++++++++++++---------- 1 file changed, 141 insertions(+), 67 deletions(-) (limited to 'macros/latex/contrib/fancyhdr/fancyhdr.dtx') diff --git a/macros/latex/contrib/fancyhdr/fancyhdr.dtx b/macros/latex/contrib/fancyhdr/fancyhdr.dtx index d2a6dc9611..41e7ebb598 100644 --- a/macros/latex/contrib/fancyhdr/fancyhdr.dtx +++ b/macros/latex/contrib/fancyhdr/fancyhdr.dtx @@ -1,6 +1,6 @@ % \iffalse meta-comment % -% Copyright (C) 1994-2021 by Pieter van Oostrum +% Copyright (C) 1994-2022 by Pieter van Oostrum % ------------------------------------------------------- % % This file may be distributed and/or modified under the @@ -26,11 +26,11 @@ %\ProvidesPackage{fancyhdr}% %\ProvidesPackage{fancyheadings} %\ProvidesPackage{extramarks} -% [2021/01/28 v4.0.1 +% [2022/05/10 v4.0.2 % Extensive control of page headers and footers]% % Legacy package to call fancyhdr] % Extra marks for LaTeX] -%% Copyright (C) 1994-2021 by Pieter van Oostrum +%% Copyright (C) 1994-2022 by Pieter van Oostrum %% Public domain %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \end{macrocode} @@ -46,8 +46,8 @@ \usepackage{boxedminipage} \usepackage{fourier-orns} \usepackage[T1]{fontenc} -\usepackage{url} \usepackage[fit]{truncate} +\usepackage[hyphens]{url} \usepackage[colorlinks,linktocpage]{hyperref} \usepackage{ifthen} \usepackage{fancyhdr} @@ -674,57 +674,68 @@ % and later\footnote{This comes from the \Package{nccfancyhdr} % package by Alexander I. Rozhenko.}. % -% The marks in a fancy header and footer are prepared using \cs{parbox} -% command. So, you can use multiline marks. In the header, they are +% The fields in a fancy header and footer are prepared using \cs{parbox} +% command. So, you can use multiline fields. In the header, they are % aligned to the bottom line, but, in the footer, they are aligned to -% the top line. The maximum width of every mark is equal to the -% \cs{headwidth}. This can lead to overlapping of neighbouring marks. +% the top line. The maximum width of every field is equal to the +% \cs{headwidth}. This can lead to overlapping of neighbouring fields. % -% \DescribeMacro{\fancycenter} -% If you want to prepare marks in more traditional way in a line +% \CmdIndex{fancycenter} +% If you want to prepare headers/footers in more traditional way in a line % not exceeding the \cs{headwidth}, you can use -% the following command in any mark command: +% the following command in any header/footer command: % \begin{quote} % \cs{fancycenter}\oarg{distance}\oarg{stretch}\\ -% \verb| |\marg{left-mark}\marg{center-mark}\marg{right-mark} +% \verb| |\marg{left-field}\marg{center-field}\marg{right-field} % \end{quote} % \CmdIndex{fancycenter} % This command works like % \begin{center} -% \verb|\hbox to\linewidth{|\marg{left-mark}\cs{hfil}\marg{center-mark}\cs{hfil}\marg{right-mark}\verb|}| +% \verb|\hbox to\linewidth{|\marg{left-field}\cs{hfil}\marg{center-field}\cs{hfil}\marg{right-field}\verb|}| % \end{center} % but does this more carefully trying to exactly center the central part of % the text if possible. The solution for exact centering -% is applied if the width of \meta{center-mark} is less than +% is applied if the width of \meta{center-field} is less than % \begin{quote} % \verb|\linewidth - 2*(|\meta{stretch}\verb|*|\meta{distance}\verb| +|\\ -% \verb| max(width(|\meta{left-mark}\verb|), width(|\meta{right-mark}\verb|)))|. +% \verb| max(width(|\meta{left-field}\verb|), width(|\meta{right-field}\verb|)))|. % \end{quote} -% Otherwise the \meta{center-mark} will slightly migrate to a shorter item -% (\meta{left-mark} or \meta{right-mark}), but at least \meta{distance} +% Otherwise the \meta{center-field} will slightly migrate to a shorter item +% (\meta{left-field} or \meta{right-field}), but at least \meta{distance} % space between all parts of line is provided. % The default values of \meta{distance} and \meta{stretch} % are 1em and 3. % -% If the \meta{center-mark} is empty, the \cs{fancycenter} is equivalent to +% If the \meta{center-field} is empty, the \cs{fancycenter} is equivalent to % the following command: % \begin{center} -% \verb|\hbox to\linewidth {|\marg{left-mark}\verb|\hfil |\marg{right-mark}\verb|}| +% \verb|\hbox to\linewidth {|\marg{left-field}\verb|\hfil |\marg{right-field}\verb|}| % \end{center} % % You would use this in a header for example with % \begin{quote} % \verb|\fancyhead[C]{|\cs{fancycenter}\oarg{distance}\oarg{stretch}\\ -% \verb| |\marg{left-mark}\marg{center-mark}\marg{right-mark}\verb|}| +% \verb| |\marg{left-field}\marg{center-field}\marg{right-field}\verb|}| % \end{quote} % and leave the \texttt{[L,R]} parts empty. % -% \textbf{Note 1}: If the whole of the \cs{fancycenter} is wider than -% \cs{headwidth} it will stick out on the right. See +% \textbf{Note 1}: +% When \cs{fancycenter} is used inside a header or +% \CmdIndex{linewidth}% +% \CmdIndex{headwidth}% +% footer, \cs{linewidth} usually is the same as \cs{headwidth}. Only +% when \cs{fancycenter} is used inside a box with a different width, +% \cs{linewidth} will be the width of that box. +% +% \textbf{Note 2}: +% If the whole of the \cs{fancycenter} is wider than +% \cs{linewidth} it will stick out on the right. See % section~\ref{sec:longtitles} for possible solutions. % -% \textbf{Note 2}: The usage of \cs{fancycenter} command is not limited to the -% argument of header/footer marks. You can use it anywhere in your document. +% \textbf{Note 3}: The usage of the \cs{fancycenter} command is not limited to the +% argument of headers/footers. You can use it anywhere in your +% document. Then \cs{linewidth} will be the width of the box or text in +% which it is used. % % \section{An example of two-sided printing}\label{two-sided} % @@ -1855,11 +1866,9 @@ % For example % \begin{verbatim} % \pagestyle{fancy} -% \renewcommand{\chaptermark}[1]{\markboth{Chapter \thechapter. ##1}{}} -% \renewcommand{\sectionmark}[1]{\markright{\thesection\ ##1}} +% \renewcommand{\chaptermark}[1]{\markboth{Chapter \thechapter. #1}{}} +% \renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}} % \end{verbatim} -% Please note that you have to double the \verb|#| signs, because the -% definitions are inside a macro. % % If the previous page style was one of the standard \LaTeX{} page % styles, or some page style that is not based on \Package{fancyhdr}, @@ -1880,12 +1889,14 @@ % ... % \pagestyle{myfancy} % \end{verbatim} +% Please note that you now have to double the \verb|#| signs, because the +% definitions are inside a macro. % % In general, when you use only one page style \texttt{fancy} in your % document, with the occasional \cs{thispagestyle} excursion to page % style \texttt{plain} or \texttt{empty}, you can just keep the % definitions globally in your document, but as soon as you use more -% than one page style, and swicth between them, it is highly advisable +% than one page style, and switch between them, it is highly advisable % to define them (including page style \texttt{fancy}) with % \cs{fancypagestyle} and put all the relevant definitions inside them. % @@ -2037,7 +2048,7 @@ % the page where ``This'' appears, or on the page where ``page'' % appears. It depends on the positioning of the \cs{label} command. % Probably it is safer to make sure the sentence isn't broken. This can -% be dome by putting the text in a \cs{parbox} or \texttt{minipage} environment. +% be done by putting the text in a \cs{parbox} or \texttt{minipage} environment. % \begin{verbatim} % \noindent % \begin{minipage}{\textwidth} @@ -2436,7 +2447,8 @@ % Of course we have to take care of two-sided printing, and we may want to % have an index page with all the blobs in the correct position. The solution % requires some hand-tuning to get the blobs nicely spaced out vertically. -% For the application that I had there were 12 sections, so I made the blobs +% For the application that I originally designed this for, there were 12 sections, +% so I made the blobs % 18 mm apart, i.e. 9~mm blob separated by 9~mm whitespace. In order to avoid % calculations they are set in a \texttt{picture} environment with the % \cs{unitlength} set to 18~mm. Page numbers are set in the headers at the @@ -2521,13 +2533,17 @@ % % \section{Float placement} % +% \textbf{Note: This section is not about \Package{fancyhdr}, but about +% page layout, especially about the placement of floats.} +% % Floats are page elements that float with respect to the rest of the % document. Standard floats are tables and figures, but with the +% \TTindex{float}% % \Package{float} package you can easily make new ones, like algorithms. Most % of the time floats work satisfactory, but sometimes \LaTeX{} seems too % stubborn to do what you want. This section describes how you can influence % \LaTeX{} so that it will do most of the time what you want. There might, -% however be some pathological cases where it is impossible to convince +% however, be some pathological cases where it is impossible to convince % \LaTeX{} to do things your way. In the following we will use figures as an % example but everything applies to other floats as well. % @@ -2537,7 +2553,8 @@ % moves it, usually to the next page. % \item From a certain point, \LaTeX{} moves all your floats to the end of % the document or the end of a chapter. -% \item \LaTeX{} complains about ``Too many floats''. +% \item \index{Too many floats}% +% \LaTeX{} complains about ``Too many floats''. % \end{enumerate} % % In the first two cases you must first check if you have given the correct @@ -2545,7 +2562,7 @@ % specifies that your figure may be placed either: Here (i.e. in the text % position where the command is given), on the Top of a page (which may be % the page where you put the command), or on a separate Page of floats. You -% could also have specified ``b'' for Bottom of the page. The order of the +% could also have specified ``\texttt{b}'' for Bottom of the page. The order of the % letters is insignificant, you cannot force \LaTeX{} to try Bottom first % and then Top by specifying \texttt{[bt]}. % @@ -2557,11 +2574,11 @@ % \texttt{[b]} in the position parameter, \latex/ must save it until it has % enough for a page of floats. So don't specify only \texttt{[h]}. If you % want to give \latex/ a chance to put the float on a page of floats, you -% must also specify ``p''. +% must also specify ``\texttt{p}''. % \item The placement would violate the constraints imposed by \latex/'s % float placement parameters. This is one of the most occurring causes and % it can easily be corrected by changing the parameters. Here is a list of -% them: +% them with their default values: % \end{enumerate} % \begin{center} % \CmdIndex{topfraction} @@ -2595,7 +2612,7 @@ % The values in the righthand column are the defaults for the standard % \latex/ classes. Other classes could use different defaults. As you see % with the default values a float will not be put in the bottom of a page if -% its height is more than 30\% of the page height. So if you specify [hb] for +% its height is more than 30\% of the page height. So if you specify \texttt{[hb]} for % a float which is taller it has to move to a float page. But if it is less % than 50\% of the page height it will have to wait until some more floats % are given before a float page can be filled to satisfy the @@ -2637,8 +2654,9 @@ % If in spite of all your attempts \latex/ still moves your floats to the end % of the document or the end of a chapter, you can insert a \cs{clearpage} % command. This will start a new page and insert all pending floats before -% continueing. If it is undesirable to have a pagebreak you can use the +% continuing. If it is undesirable to have a pagebreak you can use the % \Package{afterpage} package and the following command: +% \TTindex{afterpage}\CmdIndex{afterpage}\CmdIndex{clearpage}% % \begin{verbatim} % \afterpage{\clearpage} % \end{verbatim} @@ -2650,6 +2668,7 @@ % Finally, if you want a float only at the place where you define it, without % \latex/ moving it whatsoever, you can use the \Package{float} package and % give the command: +% \TTindex{float}\CmdIndex{restylefloat}% % \begin{verbatim} % \restylefloat{figure} % \end{verbatim} @@ -2659,6 +2678,7 @@ % If you want to avoid the unwanted pagebreak, i.e. let % \LaTeX{} move the float only if it doesn't fit on the page, then use the % \Package{afterpage} package with: +% \TTindex{afterpage}\CmdIndex{afterpage}\CmdIndex{clearpage}% % \begin{verbatim} % \afterpage{\clearpage \begin{figure}[H] ... \end{figure}} % \end{verbatim} @@ -2668,11 +2688,22 @@ % collecting too many of them. The solutions given above, especially those % with \cs{clearpage} in them will usually help. In some cases there % really are too many floats, as \latex/ has a limited number of ``boxes'' to -% store the floats. The package \Package{morefloats} can be used to increase +% store the floats. The package +% \TTindex{morefloats}% +% \Package{morefloats} can be used to increase % this number. If you need still more then you must edit a private copy of % this file, but even then there will be some limit that you cannot pass. % Then your only resort will be to change your document. % +% A much more elaborate article about float placement by Frank +% Mittelbach appeared in 2014 in TUGboat\footnote{% +% Frank Mittelbach, \emph{How to influence the position of float +% environments like figure and table in LATEX?}, TUGboat, Volume 35 +% (2014), No. 3, pp. 248–254.\\ +% \url{https://www.latex-project.org/publications/2014-FMi-TUB-tb111mitt-float-placement.pdf} +% \\Also on Stackexchange:\\ +% \url{https://tex.stackexchange.com/questions/39017/how-to-influence-the-position-of-float-environments-like-figure-and-table-in-lat}}. +% % \section{Multipage Floats} % % \LaTeX's floats cannot be split across pages. Sometimes, however, you want @@ -2680,8 +2711,8 @@ % to split these into multiple table or figure environments, but this has a % number of undesirable effects: % \begin{itemize} -% \item Where do you split it? This is in general more difficult for tables -% than for figures. +% \item Where do you split it? This is generally a more difficult decision +% for tables than for figures. % \item How do you keep them together? % \item You don't want more than one entry in the list of figures/tables. % \end{itemize} @@ -2708,7 +2739,7 @@ % to include it in an \cs{afterpage} command (using the \Package{afterpage} % package). As a \texttt{longtable} is by definition large, it is best to put % it in a separate file, and \cs{input} it in the \cs{afterpage} command: -% \CmdIndex{afterpage} +% \CmdIndex{afterpage}\TTindex{afterpage}\CmdIndex{clearpage}% % \begin{verbatim} % \afterpage{\input{mytable}} % \end{verbatim} @@ -2721,8 +2752,8 @@ % % \subsection{Figures} % -% There isn't an equivalent \texttt{longfigure} solution, so for figures you -% will usually have to split it yourself. In general this is less of a +% There isn't an equivalent ``\texttt{longfigure}'' solution, so for figures you +% will have to split yourself. In general this is less of a % problem. However, the problem you get now is how to keep them together, % i.e. how to get the parts on subsequent pages, and how to get a single % entry in the list of figures. @@ -2732,7 +2763,8 @@ % to use only the \texttt{[p]} placement, so that they will be put on % floatpages. As they are bigger than a page this is appropriate. The first % part would then get a \cs{caption}, the subsequent parts would be used -% without a caption. If you want to add a caption-like text, enter it as +% without a caption, or a caption that will not go to the list of figures. +% If you want to add a caption-like text, enter it as % normal text rather than a \cs{caption}, so that it will not be entered in % the list of figures. It may also be desirable to issue a \cs{clearpage} % first, just like we did for the \texttt{longtable}, and to encapsulate this @@ -2764,6 +2796,8 @@ % If you want your multipage figure to start at a lefthand-side % (even-numbered) page you can use a test in the \cs{afterpage} command % (using the \Package{ifthen} package): +% \CmdIndex{afterpage} +% \CmdIndex{ifthenelse} % \begin{verbatim} % \afterpage{\clearpage % \ifthenelse{\isodd{\value{page}}{\afterpage{\input{myfigure}}} % odd page @@ -2855,7 +2889,7 @@ % Bugs and suggestions for improvements can be reported at\\ % \url{https://github.com/pietvo/fancyhdr/issues}\\ % Example files can be found at\\ -% \url{https://github.com/pietvo/fancyhdr/tree/Examples} +% \url{https://github.com/pietvo/fancyhdr-examples} % % \section{Version information} % \begin{itemize} @@ -2867,8 +2901,8 @@ % \item References to older \LaTeX{} versions removed. % \item Removed obsolete source code of \Package{extramarks.sty} % \item Changed font commands to \cs{textbf} and \cs{textsl}. -% \item Added description of the \cs{fancy\ldots offset} commands. -% \item Added various \cs{\ldots xmark} commands from \Package{extramarks.sty}. +% \item Added description of the \Cmd{fancy\ldots offset} commands. +% \item Added various \Cmd{\ldots xmark} commands from \Package{extramarks.sty}. % \item Various corrections applied. % \item Updated contact information. % \item Added Version information. :) @@ -2946,6 +2980,19 @@ % \item Some documentation corrections, especially in sections % \ref{sec:xmarks} and \ref{sec:movie}. % \end{itemize} +% \item Version 4.0.2, May 9, 2022 +% \begin{itemize} +% \item Added \cs{leavevmode}\cs{ignorespaces} to each header/footer +% field. The \cs{leavevmode} prevents a bug when a field starts with a +% \cs{color} command. The \cs{ignorespaces} skips initial spaces in +% the parameter, as is usual in a \cs{parbox}, for backwards +% compatibility. However, there are some rare cases where spurious +% spaces can still show up in the header/footer fields. In that case +% the user will have to eliminate these. +% \item Cleanup the documentation of the \cs{fancycenter} command. +% \item Miscellaneous small documentation changes. +% \item Make \cs{fancyhead} etc. \cs{long}. +% \end{itemize} % \end{itemize} % % @@ -2961,11 +3008,11 @@ % gradually. % % -% \section{Large chapter/section titles} +% \section{Long chapter/section titles} % \label{sec:longtitles} % % \index{long titles} -% Sometimes a chapter or section title is too large to fit in the header +% Sometimes a chapter or section title is too long to fit in the header % or footer. It may take more than one line in the header/footer, or it % may overwrite other parts. How can we shorten these titles in the % header/footer without changing the actual title? @@ -2998,8 +3045,8 @@ % \subsection{Using optional arguments} % % As we have seen in section~\ref{sec:scoop}, the header info comes from -% the marks. So if we want the text in the header to be smaller we have -% to supply smaller marks. This can be done by giving these as optional +% the marks. So if we want the text in the header to be shorter we have +% to supply shorter marks. This can be done by giving these as optional % arguments in the \cs{chapter} and \cs{section} commands.\footnote{At % least in the \texttt{book} and \texttt{report} documentclasses. In the % \texttt{article} class this would be the \cs{section} and @@ -3011,7 +3058,7 @@ % {This is a very long section title that will not fit in the header} % \end{verbatim} % The short titles will now appear in the header. However, these will -% also appear in the table of contents. If that is what you want than +% also appear in the table of contents. If that is what you want then % you are ready. But if you want to use the long titles in the table of % contents, you have to use some trickery. In particular you have to % supply the marks yourself. @@ -3078,7 +3125,8 @@ % \Sectioniii{Text title}{Header title}{TOC title} % \end{verbatim} % Please note that if you use the \texttt{article} class, instead of -% \cs{chaptermark} and \cs{sectionmark}, you would probably use \cs{sectionmark}\cs{subsectionmark}. +% \cs{chaptermark} and \cs{sectionmark}, you would probably use +% \cs{sectionmark} and \cs{subsectionmark}. % % \subsection{Using automatic truncation} % @@ -3113,7 +3161,9 @@ % they could theoretically touch each other. This can be prevented by % making the widths slightly smaller. And when there is only one title % in the header, you can make the width equal to or slightly smaller -% than \cs{headwidth}. +% than \cs{headwidth}. A more sophisticated solution would be to check +% if one of the header parts is small enough and then truncate the other +% one for the remaining space. % % \section{I lost my chapter/section titles} % @@ -3546,10 +3596,11 @@ % This is similar to \LaTeX's \cs{@tfor}, but it expands the \texttt{charstring}. % \begin{macrocode} % \changes{fancyhdr v3.10}{2019/01/25}{Use \cs{newcommand} instead of \cs{def}.} +% \changes{fancyhdr v4.0.2}{2022/05/10}{Make \cs{f@nch@rc} \cs{long}.} \newcommand{\f@nch@forc}[3]{\expandafter\f@nchf@rc\expandafter#1\expandafter{#2}{#3}} \newcommand{\f@nchf@rc}[3]{\def\temp@ty{#2}\ifx\@empty\temp@ty\else \f@nch@rc#1#2\f@nch@rc{#3}\fi} -\def\f@nch@rc#1#2#3\f@nch@rc#4{\def#1{#2}#4\f@nchf@rc#1{#3}{#4}} +\long\def\f@nch@rc#1#2#3\f@nch@rc#4{\def#1{#2}#4\f@nchf@rc#1{#3}{#4}} % \end{macrocode} % \end{macro} % \begin{macro}{\f@nch@for} @@ -3629,6 +3680,7 @@ % \end{macro} % % \begin{macro}{\f@nch@fancyhf} +% \changes{fancyhdr v4.0.2}{2022/05/10}{Make \cs{f@nch@fancyhf} \cs{long}.} % This macro interprets the parameters for the headers and footers.\\ % Parameters:\\ % (1) The user command that was used (like \cs{fancyhead}). This is used @@ -3642,7 +3694,7 @@ % \texttt{[eo]}, \meta{y} from \texttt{[lcr]} and \meta{z} from \texttt{[hf]}. % % \begin{macrocode} -\def\f@nch@fancyhf#1#2[#3]#4{% +\long\def\f@nch@fancyhf#1#2[#3]#4{% \def\temp@c{}% \f@nch@forc\tmpf@ra{#3}% {\expandafter\f@nch@ifin\tmpf@ra{eolcrhf,EOLCRHF}% @@ -3880,7 +3932,8 @@ % \cs{hsize} to \cs{headwidth} (this helps for multicol); reset % \bsbs, \cs{raggedleft}, \cs{raggedright} and \cs{centering} to % their default values (for tabu), and \cs{everypar} to empty.\\ -% The font is reset to \cs{normalfont}. +% The font is reset to \cs{normalfont}. Actually this is done in the +% \LaTeX{} output routine, so we don't have to do it here. % \begin{macrocode} \def\f@nch@reset{\f@nch@everypar{}\restorecr\endlinechar=13 \let\\\@normalcr \let\raggedleft\f@nch@raggedleft @@ -3906,7 +3959,8 @@ } \def\f@nch@center#1[#2]#3#4#5{% % \end{macrocode} -% At first, we execute the case when the \meta{center-mark} is empty: +% At first, we execute the case when the \meta{center-mark} is empty\footnote{% +% This code is reused from the \Package{nccfancyhdr} by Alexander I. Rozhenko}: % \begin{macrocode} \def\@tempa{#4}\ifx\@tempa\@empty \hbox to\linewidth{\color@begingroup{#3}\hfil {#5}\color@endgroup}% @@ -4032,12 +4086,22 @@ \newcommand\f@nch@vbox[2]{% \setbox0\vbox{#2}% \ifdim\ht0>#1\relax +% \end{macrocode} +% This is the part where the the header/footer is too tall for the vertical space. +% If the \texttt{[nocheck]} package option is not given, we give a +% warning message. +% \begin{macrocode} \iff@nch@check \dimen0=#1\advance\dimen0-\ht0 \f@nch@warning{% \string#1 is too small (\the#1): \MessageBreak Make it at least \the\ht0, for example:\MessageBreak \string\setlength{\string#1}{\the\ht0}% +% \end{macrocode} +% If the \texttt{[compatV3} option was given (and not +% \texttt{[nocheck]}), we will also change the +% \cs{headheight}/\cs{footskip} globally below, and announce this in the warning message. +% \begin{macrocode} \iff@nch@compatViii .\MessageBreak We now make it that large for the rest of the document.\MessageBreak This may cause the page layout to be inconsistent, however @@ -4065,6 +4129,11 @@ % \changes{fancyhdr v4.0}{2019/03/22}{Parameter \cs{headruleskip}.} % \changes{fancyhdr v4.0}{2019/03/25}{\cs{fancyheadinit} initialisation % code added and \cs{f@nch@reset} moved up.} +% \changes{fancyhdr v4.0.2}{2022/05/09}{Added +% \cs{leavevmode}\cs{ignorespaces} to each header/footer field. +% The \cs{leavevmode} prevents a bug when a field starts with a +% \cs{color} command. The \cs{ignorespaces} skips initial spaces in +% the parameter, as is usual in a \cs{parbox}, for backwards compatibility.} % Put together a header or footer given the left, center and right % text, fillers at left and right and a rule. The \cs{xlap} commands put % the text into an hbox of zero size, so overlapping text does not @@ -4091,11 +4160,11 @@ \hbox to\headwidth{% \f@nch@vbox\headheight{% \hbox{% - \rlap{\parbox[b]{\headwidth}{\raggedright#2}}% + \rlap{\parbox[b]{\headwidth}{\raggedright\leavevmode\ignorespaces#2}}% \hfill - \parbox[b]{\headwidth}{\centering#3}% + \parbox[b]{\headwidth}{\centering\leavevmode\ignorespaces#3}% \hfill - \llap{\parbox[b]{\headwidth}{\raggedleft#4}}% + \llap{\parbox[b]{\headwidth}{\raggedleft\leavevmode\ignorespaces#4}}% }% \vskip\headruleskip\relax \headrule @@ -4114,6 +4183,11 @@ % definition.} % \changes{fancyhdr v4.0}{2019/03/25}{\cs{fancyfootinit} initialisation % code added and \cs{f@nch@reset} moved up.} +% \changes{fancyhdr v4.0.2}{2022/05/09}{Added +% \cs{leavevmode}\cs{ignorespaces} to each header/footer field. +% The \cs{leavevmode} prevents a bug when a field starts with a +% \cs{color} command. The \cs{ignorespaces} skips initial spaces in +% the parameter, as is usual in a \cs{parbox}, for backwards compatibility.} % We put the \cs{footrule} in a \cs{vbox} to accommodate for flexible % footrules (e.g. using \cs{hrulefill}), so that the \cs{headwidth} will % be used as the line width. But to preserve the vertical spacing we @@ -4129,11 +4203,11 @@ \setbox0=\vbox{\footrule}\unvbox0 \vskip\footruleskip \hbox{% - \rlap{\parbox[t]{\headwidth}{\raggedright#2}}% + \rlap{\parbox[t]{\headwidth}{\raggedright\leavevmode\ignorespaces#2}}% \hfill - \parbox[t]{\headwidth}{\centering#3}% + \parbox[t]{\headwidth}{\centering\leavevmode\ignorespaces#3}% \hfill - \llap{\parbox[t]{\headwidth}{\raggedleft#4}}% + \llap{\parbox[t]{\headwidth}{\raggedleft\leavevmode\ignorespaces#4}}% }% }% }% @@ -4163,7 +4237,7 @@ % \changes{fancyhdr v4.0}{2019/03/21}{Put all the initialisation code in % \cs{f@nch@initialise}} % This macro initialises the headers and footers and \cs{chaptermark} -% and/or \cs{[sub]sectionmark} for pagestyle \texttt{fancy} +% and/or \Cmd{[sub]sectionmark} for pagestyle \texttt{fancy} % \begin{macrocode} \def\f@nch@initialise{% % \end{macrocode} @@ -4466,7 +4540,7 @@ % \end{macro} % \begin{macro}{\f@nch@pagestyle} % The actual code for \cs{fancypagestyle}. Build the page style body. -% Declare it as a fancyhdr page style. +% Declare it as a fancyhdr-based page style. % \changes{fancyhdr v4.0}{2019/09/05}{Make the definition of \cs{f@nch@pagestyle} \cs{long}.} % \begin{macrocode} \long\def\f@nch@pagestyle#1[#2]#3{% -- cgit v1.2.3