LaTeX 环境中的特殊字符(&符号)

Special character (ampersand) inside LaTeX environment

我有一个包含符号 (&) 的字符向量,在 外部 LaTeX 环境中使用时可以正确显示,例如 \begin{itemize}.

这个有效:

---
output:
  pdf_document
---

`r "Guns & Roses"`

上面的代码运行没有错误,这意味着 knitrrmarkdown 自动转义符号。

现在,当在 LaTeX 环境中指定带有 & 符号的相同 R 字符向量时,会抛出以下错误:! Misplaced alignment tab character &.:

---
output:
  pdf_document
---

\begin{itemize}
\item `r "Guns & Roses"`
\end{itemize}

问题中第一个片段运行没有错误而第二个片段没有错误的原因是 & 需要在 LaTeX 中转义,而 pandoc 在第一种情况下将其转义但不是在第二个。

这是因为 pandoc(扩展名为 raw_tex)没有转义 "material between the begin and end tags"。

knitroutput hookinline可以解决问题

根据评论,一种适用于 OP 的解决方案是将 R 内联表达式的输出包含在允许使用 & 字符的 verbatim 环境中。

---
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 中遇到了类似的问题,& 号应该出现在 ggplot 的标签中。使用 CL 建议的输出挂钩对我不起作用。然而,将这个特定的 ggplot 放入它自己的代码块中确实有帮助(请注意,我没有转义&符号!它只是字符串变量的一部分) - 也许是 Rmarkdown 问题的一个奇怪的解决方法,但似乎有效。