使用 fancyhdr 为每个部分添加不同的图片

使用 fancyhdr 为每个部分添加不同的图片

我想知道在 LaTex 中是否有一种方法可以使用 向每个 Section 标题添加不同的图片fancyhdr,但无需定义\fancypagestyleXX 次。

我认为一个好的起点可以给予一个部分及其对应的图片相同的名称,但是 - 如何\fancypagestyle使用变量/占位符进行定义?(抱歉,我仍然没有可用的代码)。

多谢!

答案1

假设您有一个附加的可选参数,用于\section传递关联图片的文件名,如\section(<image file>)[<toc name>]{<full name>}。假设此附加信息存储在名为的宏中,\headerpic则可以像这样简单地声明一次标题:

\fancyhead[C]{\includegraphics[width=\textwidth]{\headerpic}}

可能的实现方式如下。

\let\ltx@section\section
\def\section{\kernel@ifnextchar(%
  {\@section@HP}%
  {\@section@HP(\@headerpic@default)}%
}
\def\@section@HP(#1){%
  \clearpage\xdef\headerpic{#1}\ltx@section
}

不传入任何图像将导致回退到\@headerpic@default,应手动设置或通过包装器设置以使其看起来美观:

\def\SetHeaderpicDefault#1{%
  \xdef\headerpic{#1}
  \xdef\@headerpic@default{#1}
}

\headerpic如果第一个标题的排版没有部分,这也会进行初始化,这至关重要。

输出0

输出1

完整代码

% arara: pdflatex: { shell: true }
\documentclass[11pt]{article}
% This is just to make sure that the the demo pictures used are present
\write18{wget https://i.picsum.photos/id/388/2000/200.jpg}
\write18{wget https://i.picsum.photos/id/495/2000/200.jpg}
\write18{wget https://i.picsum.photos/id/520/2000/200.jpg}
\usepackage{graphicx}
\usepackage{fancyhdr}
  \pagestyle{fancy}
  \fancyhf{}
  \fancyhead[C]{\includegraphics[width=\textwidth]{\headerpic}}

\usepackage{lipsum}

\makeatletter
\let\ltx@section\section
\def\section{\kernel@ifnextchar(%
  {\@section@HP}%
  {\@section@HP(\@headerpic@default)}%
}
\def\@section@HP(#1){%
  \clearpage\xdef\headerpic{#1}\ltx@section
}
\def\SetHeaderpicDefault#1{%
  \xdef\headerpic{#1}
  \xdef\@headerpic@default{#1}
}
\makeatother

\renewcommand*\headrulewidth{0pt}
\setlength\headheight{40pt}
\SetHeaderpicDefault{388-2000x200.jpg}

\begin{document}
\section{Lorem Ipsum}
\lipsum
\section(495-2000x200.jpg){Lorem Ipsum}
\lipsum
\section(520-2000x200.jpg){Dolor Sit}
\lipsum
\section{Dolor Sit}
\lipsum
\end{document}

然而,一个主要的警告是,\@section@HP宏强制新页面以确保正确的图片与相应的部分相关联。

如果你想避免上述语法糖,当然可以选择类似

\section[<toc name>]{<full name>}
\SetHeaderpic{<file name>}

\def\SetHeaderpic#1{\xdef\headerpic{#1}}

相关内容