Me pregunto si hay alguna forma en LaTex de agregar una imagen diferente a cada encabezado de sección usando fancyhdr
, pero sin definir \fancypagestyle
XX veces.
Creo que un buen punto de partida podría ser darle el mismo nombre a una Sección y su imagen correspondiente, pero luego, ¿cómo definir \fancypagestyle
usando una variable/marcador de posición? (Lo siento, todavía no tengo un código funcional).
¡Muchas gracias!
Respuesta1
Suponga que tiene un argumento opcional adicional para \section
pasar el nombre de archivo de una imagen asociada como \section(<image file>)[<toc name>]{<full name>}
. Suponiendo que esta información adicional se almacena en una macro llamada, \headerpic
es posible simplemente declarar el encabezado una vez así:
\fancyhead[C]{\includegraphics[width=\textwidth]{\headerpic}}
Una posible implementación se vería así.
\let\ltx@section\section
\def\section{\kernel@ifnextchar(%
{\@section@HP}%
{\@section@HP(\@headerpic@default)}%
}
\def\@section@HP(#1){%
\clearpage\xdef\headerpic{#1}\ltx@section
}
No pasar ninguna imagen resultará en volver a \@headerpic@default
, que debe configurarse manualmente o mediante un contenedor para que se vea bien:
\def\SetHeaderpicDefault#1{%
\xdef\headerpic{#1}
\xdef\@headerpic@default{#1}
}
Esto también inicializa, \headerpic
lo cual es crucial si el primer encabezado está escrito sin que haya una sección presente.
Código completo
% 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}
Sin embargo, una advertencia importante es que la \@section@HP
macro impone una nueva página para asegurarse de que la imagen correcta esté asociada con la sección correspondiente.
Si desea evitar el azúcar sintáctico de la solución anterior, por supuesto, se podría optar por algo como
\section[<toc name>]{<full name>}
\SetHeaderpic{<file name>}
con \def\SetHeaderpic#1{\xdef\headerpic{#1}}
.