Как использовать код Sweave (R) внутри fancyhdr?

Я создаю автоматически сгенерированный периодический отчет с помощью Sweave. Чтобы создать красивый заголовок, я использую пакет fancyhdr, который до сих пор работает очень хорошо. Теперь, поскольку мой отчет является периодическим, я хочу динамически менять заголовок, не передавая аргумент функции. Вот почему я написал небольшую функцию R, которая просто проверяет, какой период является последним. На основании этого в R создается строка заголовка.

Короче говоря, я знаю, что в LaTeX есть \today, но мне нужно использовать конкретную информацию, поступающую из R, а не только дату.

Вот мой код:

   \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}}

что вызывает следующую ошибку:

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

Это именно та строка, где находится мой TexHeader.


person Matt Bannert    schedule 04.08.2010    source источник


Ответы (2)


Для односторонних документов можно использовать \fancyhead[L]{...} и \fancyhead[R]{...}.

Кроме того, в этом случае лучше использовать <<results=tex, echo=FALSE>>=. Вот пример:

\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}
person rcs    schedule 04.08.2010
comment
Эх, в моем случае TexHeader возвращает строку. Просто не получил эту строку из R в pdf... - person Matt Bannert; 04.08.2010
comment
Это всего лишь пример, TeXHeader здесь также является строкой, которую можно заменить любой другой строкой в ​​глобальном окружении. - person rcs; 04.08.2010
comment
Извините за шум. У меня снова возникла проблема с кодировкой моего документа, потому что [ругательство] [ругательство] TeXShop закодировал документ в Mac OS Roman. в любом случае +1 помогает улучшить мой код! - person Matt Bannert; 05.08.2010

Это просто предупреждение, а не ошибка. Предупреждение касается того факта, что вы добавили форматирование для своих четных страниц, что имеет значение только в том случае, если вы используете двусторонний вывод, активированный с помощью параметра «twoside» в вашем классе документов. в противном случае fancyhdr считает все страницы нечетными.

person second    schedule 04.08.2010
comment
Спасибо, вы были правы. Это была не ошибка, которая действительно вызвала проблему. - person Matt Bannert; 05.08.2010