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
输出时运行,这对于我来说非常有效!