将参数从R Markdown传递到Latex

问题描述 投票:0回答:2

晚上好,我想将自定义参数从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}

我怎样才能让它发挥作用?

先感谢您。

parameters latex r-markdown
2个回答
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
投票

我使用了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

---

我在主模板中插入了这两行(default-1.17.0.2.tex):

\usepackage{fancyhdr}
\fancyhead[RO,RE]{$figureno$}
© www.soinside.com 2019 - 2024. All rights reserved.