3

我正在使用 Sweave 生成​​自动生成的定期报告。为了创建一个漂亮的标题,我使用了目前运行良好的 fancyhdr 包。现在,由于我的报告是定期的,我想动态更改标题而不将参数传递给函数。这就是为什么我写了一个小 R 函数来检查哪个时期是最新的。基于此,在 R 中生成一个 Header String。

长话短说,我知道 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 的行。

4

2 回答 2

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}
于 2010-08-04T08:18:07.273 回答
1

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

于 2010-08-04T08:16:53.037 回答