R 乳胶环境中的特殊字符(与符号)

R 乳胶环境中的特殊字符(与符号),r,latex,knitr,r-markdown,pandoc,R,Latex,Knitr,R Markdown,Pandoc,我有一个包含符号(&)的字符向量,当在LaTeX环境之外使用时,它可以正确显示,例如\begin{itemize} 这项工作: --- output: pdf_document --- `r "Guns & Roses"` 上述代码运行无误,这意味着knitr或rmarkdown会自动转义该符号 现在,当在LaTeX环境中指定了相同的带符号和的R字符向量时,将引发以下错误:!错位对齐选项卡字符&。: --- output: pdf_document --- \begin{

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

这项工作:

---
output:
  pdf_document
---

`r "Guns & Roses"`

上述代码运行无误,这意味着
knitr
rmarkdown
会自动转义该符号

现在,当在LaTeX环境中指定了相同的带符号和的R字符向量时,将引发以下错误:
!错位对齐选项卡字符&。

---
output:
  pdf_document
---

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

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

这是因为
pandoc
(带扩展名)不会转义“开始标记和结束标记之间的材质”

knitr
inline
可用于解决此问题

根据注释,OP的一个解决方案是将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遇到了类似的问题,在Rmarkdown中,符号应该出现在ggplot的标签上。使用CL建议的输出钩子对我不起作用。然而,真正有帮助的是将这个特定的ggplot放到它自己的代码块中(注意,我并没有逃过符号!它只是字符串变量的一部分)——这可能是Rmarkdown hickups的一个奇怪的解决方法,但似乎是可行的

&
字符在LaTeX中有特殊含义。要从字面上使用它,你需要对它进行转义:
\&
这是R中的
\&
。我认为这个问题应该结束,因为它不是关于
knitr
,而是关于乳胶,在后一种情况下是的副本。非常清楚需要在乳胶
\&
中转义和。但问题是不同的:关于
knitr
rmarkdown
在环境内和环境外处理符号的不同方式。第一个示例(如果您实际运行它,则最小且可复制)演示了
knitr
rmarkdown
以某种方式自动逃逸了符号。我明白了,谢谢您的澄清。尚未测试,但我认为差异是由于
pandoc
。它仅在乳胶环境之外逃避特殊乳胶字符。解释了一个类似的情况,
pandoc
转义一些字符,而不是其他字符。谢谢,这是有关
pandoc
的附加信息。如果这是真的,也许我应该重新标记从
knitr
pandoc
并离开
rmarkdown
<代码>标记
取决于
knitr
总之,好的。
pandoc
是否也有在LaTeX环境中转义的选项/扩展?如果这对您有效(尽管格式很难看),您可能需要使用
knitr::knit_hooks$set(inline=function(x){return(paste(\\动词|“,x,“|”)
。谢谢@CL。我将输出钩子用于上面共享的内联表达式,并将其包装在一个
if
中,以便仅在
latex
输出时运行,这对于我来说非常有效!