我正在创建一个文档,其中某些表包含一些受益于this解决方案的列,以强制包装文本条目的右对齐。
为了实现该解决方案,我在序言中包括以下内容:
\newcolumntype{R}[1]{>{\raggedleft\arraybackslash}p{#1\linewidth}}
要使用knitr
实现此目的,我尝试了:
---
output:
pdf_document:
keep_tex: yes
header-includes:
- \usepackage{array}
- \newcolumntype{R}[1]{>{\raggedleft\arraybackslash}p{#1\linewidth}}
---
但这失败了,错误:
! LaTeX错误:缺少\ begin {document}。
...
l.83 \ newcolumntype {R} {[} 1
pandoc:生成PDF时出错
错误:pandoc文档转换失败,错误43
检查.tex输出,很清楚出了什么问题:
\usepackage{array}
\newcolumntype{R}{[}1{]}\{\textgreater{}\{\raggedleft\arraybackslash\}p\{\#1\linewidth\}\}
knitr
已将>
转换为\textgreater{}
,将{
转换为\{
,将}'
转换为\}
,[
} {[}
,]
至{]}
和#
至\#
。我当然希望 none 进行这些自动转换。
This问题解决了同一个问题,但在这种情况下有一个解决方法解决了这个问题(在YAML中引用) - 引用和转义\
产生相同的输出,引用而不转义\
会产生“无法识别的控制序列”错误。
如何让knitr
不要操纵我的输入?
答案 0 :(得分:3)
您可以(并且应该)使用includes
选项(请参阅documentation)。额外的好处是您的LaTeX代码将仅应用于LaTeX输出。如果您在YAML元数据中使用header-includes
,它将应用于所有可能的输出格式,例如即使你将Rmd编译为HTML。
BTW, knitr 不会清理YAML中的任何字符。 Pandoc确实。
答案 1 :(得分:1)
受https://github.com/jgm/pandoc/issues/4473#issuecomment-419667477启发,另一种方法是从pandoc逃脱LaTeX代码(请注意,为了方便起见,我也将yaml多行样式更改为'|'):
---
output:
pdf_document:
keep_tex: yes
header-includes: |
\usepackage{array}
```{=latex}
\newcolumntype{R}[1]{>{\raggedleft\arraybackslash}p{#1\linewidth}}
```
---