\.Rnw文件中的Sexpr{}特殊字符($,&;,%,#等)

\.Rnw文件中的Sexpr{}特殊字符($,&;,%,#等),r,latex,knitr,R,Latex,Knitr,这与默认的内联钩子有关,我意识到了这一点,我尝试过使用它(钩子),也读过和Yihui的,但我一直无法解决我的问题。我甚至试过Sacha Epskamp,但在我的情况下,它没有做到这一点 knit(input='report.Rnw') 我使用\Sexpr并按照\Sexpr{load(“meta.data.saved”);meta.data[1,7]}的思路来打印我报告中的关键字,问题是编写这些关键字的人(我无法控制的人)使用了特殊的乳胶字符($,&,%,#等等)当它们在没有\的情

这与默认的内联钩子有关,我意识到了这一点,我尝试过使用它(钩子),也读过和Yihui的,但我一直无法解决我的问题。我甚至试过Sacha Epskamp,但在我的情况下,它没有做到这一点

 knit(input='report.Rnw')      
我使用
\Sexpr
并按照
\Sexpr{load(“meta.data.saved”);meta.data[1,7]}
的思路来打印我报告中的关键字,问题是编写这些关键字的人(我无法控制的人)使用了特殊的乳胶字符($,&,%,#等等)当它们在没有
\
的情况下被传递到我的.tex文件时,我的日子不好过

 knit(input='report.Rnw')      
我有一个带有此代码的.Rnw文件

\documentclass{article}
\begin{document}
 Look \Sexpr{foo <- "me&you"; foo} at this.
\end{document}
 knit(input='report.Rnw')      
\documentclass{article}
\开始{document}
Look\Sexpr{foo
\开始{document}
看看我和你。
\结束{document}

钩住在这种情况下起作用。我像这样自定义它:

inline_hook <- function(x) {
  x <- gsub("\\&", "\\\\&", x)
  x <- gsub("\\$", "\\\\$", x)
  ## good luck for all Latex special character  
  ## $ % _  {  }  &  ~   ^  <  >   |  \ 
}
knit_hooks$set(inline = inline_hook)                    
 knit(input='report.Rnw')      
将复制您的report.tex

 knit(input='report.Rnw')      

PS:我认为最好不要让用户做他们想做的事。

由@agstudy提供的解决方案已经展示了基本思想,下面是一个更强大的版本:

 knit(input='report.Rnw')      
hook_inline = knit_hooks$get('inline')
knit_hooks$set(inline = function(x) {
  if (is.character(x)) x = knitr:::escape_latex(x)
  hook_inline(x)
})

它只在内联结果为character时修改默认内联钩子(否则只使用默认钩子)
希望能正确转义所有特殊的乳胶字符。

为什么你不能给我们一个可复制的示例?我真的不明白你为什么想要hook\Sexpr?@agstudy,谢谢你的评论,很抱歉没有提供一个可复制的示例。如果我有一个R对象是
(foo和编辑您的问题,这比把它放在评论中要好。@agstudy,我已经更新了我的问题。感谢您的反馈。我很惊讶Sacha的逐字逐句的想法没有奏效。在这里这样做似乎是正确的,而不是在所有特殊字符之前添加反斜杠。这在我用RStudio按钮编织时起作用。当我使用驱动程序rscript在不同的数据集上迭代时,我的所有图形都不会显示。相反,我会看到它们的latex标签名称。我在驱动程序脚本中使用knit2pdf。除了运行knit2pdf之外,我们如何拥有相同的功能?这允许我使用管道内联,这非常棒。但我收到一条消息,说错误:意外输入In“\”表示每个包含这些转义字符的表达式。是否有方法处理此问题?
 knit(input='report.Rnw')