Comment gérer des en-têtes avec des environnements verbatim
multipages ?#
En temps normal, les en-têtes et pieds de page ne posent pas trop de difficultés
avec l’environnement verbatim
(détaillé à la question
« Comment écrire en mode verbatim ? »).
Il existe toutefois un cas assez particulier demandant deux conditions :
vous utilisez un environnement
verbatim
comprenant un changement de page ;vous utilisez dans votre en-tête ou votre pied de page une commande
\input
.
Dans ce cas, LaTeX, au lieu d’interpréter la commande \input
,
fait un copier-coller du contenu du fichier appelé par la commande \input
(comme s’il était en mode verbatim au moment de traiter \input
).
Important
Le phénomène décrit n’est plus observé depuis la version v4.2 2024/04/19
de fancyhdr, voir
fancyhdr#8.
D’autres problèmes de la même famille existent par ailleurs,
par exemple avec xspace voir
latex2e#600.
Voici un exemple de ce cas en peu tordu.
Le fichier entete.tex
que nous voulons placer dans l’en-tête avec \input
contient
l’unique ligne suivante :
\textbf{Démonstration édifiante}
Pour les besoins de notre FAQ, ce fichier est créé par les premières lignes
du code ci-dessous. Mais vous pouvez procéder sans ces lignes en plaçant
le fichier entete.tex
dans le même dossier que le fichier d’exemple ci-dessous
(en supprimant les premières lignes alors inutiles).
Dès lors, notre fichier principal avec le code suivant va mal interprêter notre besoin :
l’en-tête de la première page restitue le code du fichier entete.tex
(par contre, la seconde page est correcte).
% Code particulier pour rendre l'exemple observable dans la FAQ
\begin{filecontents}[force,noheader]{entete}
\textbf{Démonstration édifiante}
\end{filecontents}
% Fin du code particulier
\documentclass[french]{article}
\usepackage[T1]{fontenc} % Encodage T1 (adapté au français)
\usepackage{lmodern} % Caractères plus lisibles
\usepackage{babel} % Réglages linguistiques (avec french)
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhead[C]{\input{entete}}
\begin{document}
\section{Un peu de vide pour commencer}
\vspace{16cm}
\section{Un exemple}
Un premier document en \LaTeX{} :
\begin{verbatim}
\documentclass{article}
\begin{document}
Salut, le monde !
\end{document}
\end{verbatim}
\end{document}
Pour corriger cela, vous pouvez utiliser les commandes \newsavebox
et \savebox
pour conserver le contenu de ce fichier. Par la suite, vous pouvez utiliser
la commande \usebox
pour restituer le contenu de cette boîte.
% Code particulier pour rendre l'exemple observable dans la FAQ
\begin{filecontents}[force,noheader]{entete}
\textbf{Démonstration édifiante}
\end{filecontents}
% Fin du code particulier
\documentclass[french]{article}
\usepackage[T1]{fontenc} % Encodage T1 (adapté au français)
\usepackage{lmodern} % Caractères plus lisibles
\usepackage{babel} % Réglages linguistiques (avec french)
\usepackage{fancyhdr}
\newsavebox{\logo}
\savebox{\logo}[2cm][c]{\input{entete}}
\pagestyle{fancy}
\fancyhead[C]{\usebox{\logo}}
\begin{document}
\section{Un peu de vide pour commencer}
\vspace{16cm}
\section{Un exemple}
Un premier document en \LaTeX{} :
\begin{verbatim}
\documentclass{article}
\begin{document}
Salut, le monde !
\end{document}
\end{verbatim}
\end{document}