Как использовать код Sweave (R) внутри fancyhdr? - PullRequest
3 голосов
/ 04 августа 2010

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

Короче говоря, я знаю, что в LaTeX есть \ сегодня, но мне нужно использовать конкретную информацию, полученную от 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.

Ответы [ 2 ]

2 голосов
/ 04 августа 2010

Для односторонних документов вы можете использовать \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}
1 голос
/ 04 августа 2010

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

считает все страницы нечетными
...