在header-includes中停止knitr"清理"字符

Mic*_*ico 6 r knitr r-markdown

我正在创建一个文档,其中一些表有一些列受益于此解决方案,以强制包装文本条目的右对齐.

为了实现该解决方案,我在前言中包括以下内容:

\newcolumntype{R}[1]{>{\raggedleft\arraybackslash}p{#1\linewidth}}
Run Code Online (Sandbox Code Playgroud)

为了实现这一点knitr,我试过:

---
output:
  pdf_document:
    keep_tex: yes
header-includes:
  - \usepackage{array}
  - \newcolumntype{R}[1]{>{\raggedleft\arraybackslash}p{#1\linewidth}}
---
Run Code Online (Sandbox Code Playgroud)

但这失败了,错误:

!LaTeX错误:缺少\ begin {document}.

...

l.83 \newcolumntype {R} {[} 1

pandoc:生成PDF时出错

错误:pandoc文档转换失败,错误43

检查.tex输出,很清楚出了什么问题:

\usepackage{array}
\newcolumntype{R}{[}1{]}\{\textgreater{}\{\raggedleft\arraybackslash\}p\{\#1\linewidth\}\}
Run Code Online (Sandbox Code Playgroud)

knitr已转换>\textgreater{},{\{,}'\},[{[},]{]}#\#.我当然希望没有这些自动转换.

这个问题解决了同样的问题,但是在这种情况下有一个解决问题的解决方法(在YAML中引用) - 引用和转义\产生相同的输出,引用而不转义\会产生"无法识别的控制序列"错误.

我怎么能knitr不操纵我的输入?

Yih*_*Xie 5

您可以(并且应该)使用该includes选项(请参阅文档)。一个额外的好处是您的 LaTeX 代码将只应用于 LaTeX 输出。如果您header-includes在 YAML 元数据中使用,它将应用于所有可能的输出格式,例如,即使您将 Rmd 编​​译为 HTML。

顺便说一句,knitr不会清理 YAML 中的任何字符。潘多克可以。