2010-08-04 6 views
3

Je génère un rapport périodique généré automatiquement avec Sweave. Afin de créer une belle entête, j'utilise le paquetage fancyhdr qui fonctionne très bien jusqu'ici. Maintenant, puisque mon rapport est périodique, je veux changer l'en-tête dynamiquement sans passer un argument à la fonction. C'est pourquoi j'ai écrit une petite fonction R qui vérifie juste quelle période est la plus récente. En bref, je sais qu'il y a aujourd'hui dans LaTeX mais j'ai besoin d'utiliser les informations spécifiques provenant de R, pas seulement la date.Comment utiliser le code Sweave (R) dans un fancyhdr?

Voici mon code:

\usepackage{fancyhdr} 
\pagestyle{fancy} 

\renewcommand{\chaptermark}[1]{% 
\markboth{#1}{}} 
\renewcommand{\sectionmark}[1]{% 
\markright{\thesection\ #1}} 
\fancyhf{} 
\fancyhead[LE,RO]{\bfseries\thepage} 
\fancyhead[LO]{\rightmark{ 
<<>>= 
print(TexHeader)@ 
}} 
\fancyhead[RE]{\bfseries\leftmark} 
\renewcommand{\headrulewidth}{0.5pt} 
\renewcommand{\footrulewidth}{0pt} 
\addtolength{\headheight}{0.5pt} 
\fancypagestyle{plain}{% 
\fancyhead{} 
\renewcommand{\headrulewidth}{0pt}} 

qui provoque l'erreur suivante:

Package Fancyhdr Warning: \fancyhead's `E' option without twoside option is use 
less on input line 23. 

C'est exactement la ligne où mon TexHeader est placé.

Répondre

2

Pour les documents recto, vous pouvez utiliser \fancyhead[L]{...} et \fancyhead[R]{...}.

En outre, dans ce cas, il est préférable d'utiliser <<results=tex, echo=FALSE>>=. Voici un exemple:

\documentclass[a4paper]{report} 
\usepackage{fancyhdr} 
\usepackage{lipsum} 
\pagestyle{fancy} 
\renewcommand{\chaptermark}[1]{% 
\markboth{#1}{}} 
\renewcommand{\sectionmark}[1]{% 
\markright{\thesection\ #1}} 
\fancyhf{} 
\fancyhead[R]{\bfseries\thepage} 
\fancyhead[L]{\rightmark{% 
<<results=tex, echo=FALSE>>= 
TexHeader <- format(Sys.time(), "%c") 
cat(TexHeader) 
@ 
}} 
\renewcommand{\headrulewidth}{0.5pt} 
\renewcommand{\footrulewidth}{0pt} 
\addtolength{\headheight}{0.5pt} 
\fancypagestyle{plain}{% 
\fancyhead{} 
\renewcommand{\headrulewidth}{0pt}} 

\begin{document} 
\lipsum 
\end{document} 
+0

Eh, TexHeader renvoie une chaîne dans mon cas. Juste n'a pas obtenu cette chaîne de R au pdf ... –

+0

Ceci juste un exemple, 'TeXHeader' est également une chaîne ici qui pourrait être remplacée par n'importe quelle autre chaîne dans l'environnement global. – rcs

+0

Désolé le bruit tout le monde. Encore une fois, j'ai eu un problème d'encodage avec mon document parce que [expletive] [expletive] TeXShop a encodé le document sous Mac OS Roman. de toute façon +1 aidant à améliorer mon code! –

1

Ceci est juste un avertissement, pas une erreur. L'avertissement concerne le fait que vous avez ajouté un formatage pour vos pages paires, ce qui n'est pertinent que si vous utilisez une sortie recto-verso, activée à l'aide de l'option 'twoside' dans votre classe de document. sinon toutes les pages sont traitées comme impaires par fancyhdr

+0

Merci, vous aviez raison. Ce n'était pas l'erreur qui a vraiment causé le problème. –