如何在fancyhdr中使用Sweave(R)代码?

时间:2010-08-04 07:58:08

标签: r latex sweave

我正在使用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 个答案:

答案 0 :(得分: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}

答案 1 :(得分:1)

这只是一个警告,而不是错误。该警告表示您已为偶数页面添加了格式,这仅在您使用双面输出时才相关,使用文档类中的“twoside”选项激活。否则所有页面都被fancyhdr视为奇数