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

问题描述 投票:2回答:2

我有一个包含&符号(&)的字符向量,在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}
r latex knitr r-markdown pandoc
2个回答
4
投票

问题中第一个片段运行没有错误但第二个不是因为&需要在LaTeX中进行转义而pandoc在第一种情况下逃避它但在第二种情况下没有。

这是因为pandoc(扩展名为raw_tex)不会逃脱“开始和结束标记之间的材料”。

knitroutput 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))
})

-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.