Estou me perguntando se existe uma maneira no LaTex de adicionar uma imagem diferente a cada cabeçalho de seção usando fancyhdr
, mas sem definir \fancypagestyle
XX vezes.
Acho que um bom ponto de partida poderia ser dar o mesmo nome a uma Seção e à imagem correspondente, mas então - como definir \fancypagestyle
usando uma variável/espaço reservado? (Desculpe, ainda não tenho um código funcional).
Muito obrigado!
Responder1
Suponha que você tenha um argumento opcional adicional para \section
passar o nome do arquivo para uma imagem associada como \section(<image file>)[<toc name>]{<full name>}
. Supondo que essas informações adicionais sejam armazenadas em uma macro chamada, \headerpic
é possível simplesmente declarar o cabeçalho uma vez, assim:
\fancyhead[C]{\includegraphics[width=\textwidth]{\headerpic}}
Uma possível implementação seria assim.
\let\ltx@section\section
\def\section{\kernel@ifnextchar(%
{\@section@HP}%
{\@section@HP(\@headerpic@default)}%
}
\def\@section@HP(#1){%
\clearpage\xdef\headerpic{#1}\ltx@section
}
Não passar nenhuma imagem resultará na reversão para \@headerpic@default
, que deve ser definido manualmente ou por meio de um wrapper para torná-lo bonito:
\def\SetHeaderpicDefault#1{%
\xdef\headerpic{#1}
\xdef\@headerpic@default{#1}
}
Isso também inicializa, \headerpic
o que é crucial se o primeiro cabeçalho for composto sem a presença de uma seção.
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}
Uma ressalva importante, entretanto, é que a \@section@HP
macro impõe uma nova página para garantir que a imagem correta esteja associada à seção correspondente.
Se você quiser evitar o açúcar sintático da alma acima, é claro que você poderia escolher algo como
\section[<toc name>]{<full name>}
\SetHeaderpic{<file name>}
com \def\SetHeaderpic#1{\xdef\headerpic{#1}}
.