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

时间:2015-11-15 00:51:30

标签: r latex knitr r-markdown pandoc

我有一个包含&符号(&)的字符向量,当在外部 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}

2 个答案:

答案 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组合来说,这是一个奇怪的解决方法,但似乎可行。