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

Eri*_*ail 3 latex r knitr

它与默认的内联钩子有关,我意识到并且我已经尝试了它(钩子)并且还阅读了这个线程和Yihui 关于钩子页面,但是我无法解决我的问题.我甚至尝试过Sacha Epskamp的这个建议,但在我的情况下它没有做到这一点.

我正在使用\Sexpr并做一些\Sexpr{load("meta.data.saved"); meta.data[1,7]}在我的报告中打印关键字的方法,问题是人们编写这些关键字(我无法控制的人)正在使用特殊的乳胶字符($,&,%,#等. )当它们被传递到我的.tex文件时,我没有\一个糟糕的时间.

我有一个包含此代码的.Rnw文件,

\documentclass{article}
\begin{document}
 Look \Sexpr{foo <- "me&you"; foo} at this.
\end{document}
Run Code Online (Sandbox Code Playgroud)

Thsi创建一个带有非法LaTeX字符的.tex文件.像这样,

<!-- Preamble omitted for this example. -->
\begin{document}
 Look me&you at this.
\end{document}
Run Code Online (Sandbox Code Playgroud)

我有兴趣得到一个看起来像这样的输出,

<!-- Preamble omitted for this example. -->
\begin{document}
 Look me\&you at this.
\end{document}
Run Code Online (Sandbox Code Playgroud)

很抱歉这个简单的问题,但有人可以帮助我,也许其他人,开始如何修改默认的内联挂钩\Sexpr

Yih*_*Xie 7

@agstudy提供的解决方案已经展示了基本思想,这里有一个更强大的版本:

hook_inline = knit_hooks$get('inline')
knit_hooks$set(inline = function(x) {
  if (is.character(x)) x = knitr:::escape_latex(x)
  hook_inline(x)
})
Run Code Online (Sandbox Code Playgroud)

它只在内联结果为字符时修改默认的内联挂钩(否则只使用默认挂钩).我有一个内部函数escape_latex(),希望正确地逃避所有特殊的LaTeX字符.