我有一个包含&符号(&
)的字符向量,在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}
问题中第一个片段运行没有错误但第二个不是因为&
需要在LaTeX中进行转义而pandoc
在第一种情况下逃避它但在第二种情况下没有。
这是因为pandoc
(扩展名为raw_tex)不会逃脱“开始和结束标记之间的材料”。
knitr
的output hook 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))
})
我在Rmarkdown遇到了类似的问题,其中Ampersand应该出现在ggplot的标签中。使用输出挂钩CL建议对我不起作用。然而,有什么帮助是将这个特定的ggplot放入它自己的代码块中(请注意,我没有逃过&符号!它只是字符串变量的一部分) - 也许Rmarkdown hickups的一个奇怪的解决方法,但似乎工作。