Ich frage mich, ob es in LaTex eine Möglichkeit gibt, mit jedem Abschnittskopf ein anderes Bild hinzuzufügen fancyhdr
, ohne es \fancypagestyle
XX-mal zu definieren.
Ich denke, ein guter Ausgangspunkt könnte darin bestehen, einem Abschnitt und dem entsprechenden Bild denselben Namen zu geben, aber dann – wie definiert man das \fancypagestyle
mithilfe einer Variablen/eines Platzhalters? (Entschuldigung, ich habe noch keinen funktionierenden Code.)
Vielen Dank!
Antwort1
Angenommen, Sie haben ein zusätzliches optionales Argument, um \section
den Dateinamen für ein verknüpftes Bild wie zu übergeben \section(<image file>)[<toc name>]{<full name>}
. Vorausgesetzt, diese zusätzlichen Informationen werden in einem Makro namens gespeichert, \headerpic
ist es möglich, den Header einfach einmal wie folgt zu deklarieren:
\fancyhead[C]{\includegraphics[width=\textwidth]{\headerpic}}
Eine mögliche Implementierung würde wie folgt aussehen.
\let\ltx@section\section
\def\section{\kernel@ifnextchar(%
{\@section@HP}%
{\@section@HP(\@headerpic@default)}%
}
\def\@section@HP(#1){%
\clearpage\xdef\headerpic{#1}\ltx@section
}
Wenn Sie kein Bild übergeben, wird auf zurückgegriffen \@headerpic@default
, was manuell oder über einen Wrapper festgelegt werden sollte, damit es ansprechend aussieht:
\def\SetHeaderpicDefault#1{%
\xdef\headerpic{#1}
\xdef\@headerpic@default{#1}
}
Dadurch wird auch die Initialisierung durchgeführt \headerpic
, was wichtig ist, wenn die erste Kopfzeile gesetzt wird, ohne dass ein Abschnitt vorhanden ist.
Vollständiger Code
% 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}
Ein wichtiger Vorbehalt besteht jedoch darin, dass das \@section@HP
Makro eine neue Seite erzwingt, um sicherzustellen, dass das richtige Bild dem entsprechenden Abschnitt zugeordnet ist.
Wenn Sie den syntaktischen Schnickschnack der obigen Lösung vermeiden möchten, können Sie natürlich auch etwas wie
\section[<toc name>]{<full name>}
\SetHeaderpic{<file name>}
mit \def\SetHeaderpic#1{\xdef\headerpic{#1}}
.