Fügen Sie mit fancyhdr für jeden Abschnitt ein anderes Bild hinzu

Fügen Sie mit fancyhdr für jeden Abschnitt ein anderes Bild hinzu

Ich frage mich, ob es in LaTex eine Möglichkeit gibt, mit jedem Abschnittskopf ein anderes Bild hinzuzufügen fancyhdr, ohne es \fancypagestyleXX-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 \fancypagestylemithilfe einer Variablen/eines Platzhalters? (Entschuldigung, ich habe noch keinen funktionierenden Code.)

Vielen Dank!

Antwort1

Angenommen, Sie haben ein zusätzliches optionales Argument, um \sectionden 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, \headerpicist 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.

Ausgabe0

Ausgabe1

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@HPMakro 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}}.

verwandte Informationen