它与默认的内联钩子有关,我意识到这一点,我已经尝试了它(钩子),还读了this thread和Yihui的page about hooks,但我还没有能够解决我的问题。我甚至尝试过来自Sacha Epskamp的this suggestion,但在我的情况下它并没有这样做。
我正在使用\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}
Thsi使用非法的LaTeX字符创建.tex文件。像这样,
<!-- Preamble omitted for this example. -->
\begin{document}
Look me&you at this.
\end{document}
我有兴趣得到一个看起来像这样的输出,
<!-- Preamble omitted for this example. -->
\begin{document}
Look me\&you at this.
\end{document}
很抱歉这个简单的问题,但有人可以帮助我,也许是其他人,开始如何修改\Sexpr
的默认内联挂钩?
答案 0 :(得分: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)
})
当内联结果为字符时,它仅修改默认的内联钩子(否则只使用默认钩子)。我有一个内部函数escape_latex()
,它可以正确地逃避所有特殊的LaTeX字符。
答案 1 :(得分:3)
在这种情况下,挂钩工作。我这样定制:
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。
PS:我认为最好不要让用户做他们想做的事。