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

Dan*_*ian 2 latex r pandoc knitr r-markdown

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

这有效:

---
output:
  pdf_document
---

`r "Guns & Roses"`
Run Code Online (Sandbox Code Playgroud)

上面的代码运行而不会出现错误,这意味着要么knitrrmarkdown自动逸出的符号。

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

---
output:
  pdf_document
---

\begin{itemize}
\item `r "Guns & Roses"`
\end{itemize}
Run Code Online (Sandbox Code Playgroud)

CL.*_*CL. 5

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

这是因为pandoc(使用扩展名raw_tex)不会转义“开始和结束标签之间的材料”。

knitr输出钩子 inline可以用来解决这个问题。

根据评论,一种适用于 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}
Run Code Online (Sandbox Code Playgroud)

可替换地,内联表达式如下输出钩可以用来代替所有&\&

knitr::knit_hooks$set(inline = function(x) {
  return(gsub(pattern = "&", 
              replacement = "\\&", 
              x = x, 
              fixed = TRUE))
})
Run Code Online (Sandbox Code Playgroud)