晚上好, 我想将自定义参数从Rmd传递到pdf文档的标头(使用fancyhdr)。 我尝试了下面的代码,但我不知道它如何解释\ parames $ figureno ...,编织时出现该错误:
! Undefined control sequence.
\f@nch@och ->\parames
$figureno\strut
l.169 \end{document}
这是Rmd中的代码:
output:
pdf_document:
keep_tex: true
includes:
in_header: header.tex
params:
figureno: "Fig. 1-1"
还有header.tex:
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhead[CO,CE]{\parames$figureno}
\fancyfoot[CO,CE]{And this is a fancy footer}
\fancyfoot[LE,RO]{\thepage}
\renewcommand\headrule{%
\vspace{3pt}
\hrulefill}
我如何使其正常工作?
谢谢。
答案 0 :(得分:1)
您可以执行此操作,但这很棘手。一种有效的方法是将所有header.tex
放入YAML标头的header-includes:
字段中。 (不幸的是,您不能同时拥有header-includes:
和includes: in_header
。)您可以在YAML标头中的字符串内执行R代码,
这样便可以正确设置\fancyhead
。例如:
---
output:
pdf_document:
keep_tex: true
header-includes:
- \usepackage{fancyhdr}
- \pagestyle{fancy}
- '`r paste0("\\fancyhead[CO,CE]{", params$figureno, "}")`'
- \fancyfoot[CO,CE]{And this is a fancy footer}
- \fancyfoot[LE,RO]{\thepage}
- \renewcommand\headrule{\vspace{3pt}\hrulefill}
params:
figureno: "Fig. 1-1"
---
请注意,反斜杠需要在R代码paste0("\\fancyhead[CO,CE]{", params$figureno, "}")
中加倍,以在结果中得到一个反斜杠。
还请注意,R代码必须是用反引号()包裹的内联R代码,然后还要用引号括起来作为字符串常量。我已经看到建议在字符串常量上使用单引号而不是双引号,但是我不知道这是否真的重要。
答案 1 :(得分:1)
我使用了Martin Schmelzer(上文)提出的解决方案。优点是我仍然可以包含另一个* .tex来设计具有静态内容的标头。
---
template: default-1.17.0.2.tex
title: "Some test..."
figureno: "Fig. 1-1"
output:
pdf_document:
includes:
in_header: header.tex
keep_tex: true
---
我将这两行插入了主模板(默认为1.17.0.2.tex):
\usepackage{fancyhdr}
\fancyhead[RO,RE]{$figureno$}