我有一个包含&符号(&
)的字符向量,当在外部 LaTeX环境中使用时会正确显示,例如\begin{itemize}
。
这有效:
---
output:
pdf_document
---
`r "Guns & Roses"`
上述代码运行时没有错误,这意味着knitr
或rmarkdown
会自动转义&符号。
现在,当在LaTeX环境中指定带有&符号的相同R字符向量时,会抛出以下错误:! Misplaced alignment tab character &.
:
---
output:
pdf_document
---
\begin{itemize}
\item `r "Guns & Roses"`
\end{itemize}
答案 0 :(得分:4)
问题中的第一个代码段运行没有错误但第二个代码不是因为&
需要在LaTeX中转义而pandoc
在第一种情况下逃避它而不是在第二
这是因为pandoc
(扩展名为raw_tex)不会转义“开始和结束标记之间的材料”。
knitr
的{{3}} inline
可以用来解决问题。
根据评论,适用于OP的一个解决方案是在允许verbatim
特征的&
环境中包含R内联表达式的输出。
---
output:
pdf_document
---
```{r, echo = FALSE}
knitr::knit_hooks$set(inline = function(x) {
return(paste("\\verb|", x, "|"))
})
```
\begin{itemize}
\item `r "Guns & Roses"`
\end{itemize}
或者,可以使用以下内联表达式的输出挂钩替换&
之前的所有\&
:
knitr::knit_hooks$set(inline = function(x) {
return(gsub(pattern = "&",
replacement = "\\&",
x = x,
fixed = TRUE))
})
答案 1 :(得分:-1)
我在Rmarkdown中遇到了类似的问题,在该处,“&”号应该出现在ggplot的标签中。使用CL建议的输出挂钩对我不起作用。但是,这样做的帮助是将这个特定的ggplot放入其自己的代码块中(请注意,我没有对&符号进行转义!它只是字符串变量的一部分)–也许对于Rmarkdown组合来说,这是一个奇怪的解决方法,但似乎可行。