我想知道 LaTex 中是否有一種方法可以使用 為每個節標題添加不同的圖片fancyhdr
,但無需定義\fancypagestyle
XX 次。
我認為一個好的起點可能是為一個部分及其相應的圖片賦予相同的名稱,但是如何\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
如果第一個標題在沒有出現任何部分的情況下排版,這一點至關重要。
完整程式碼
% 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}}
。