我想在 LaTeX+knitr 文档中插入名为“test_sample()”的函数作为内联 R 代码。
仅包括 \Sexpr{'test_sample()'}
结果 Missing $
错误。
我发现了以下直接相关的问题:
Pass underscore as inline code to knitR
但是已经在答案中复制代码对我不起作用:我收到一条 R 警告消息:
In hilight(code, "latex", ...) :
the syntax of the source code is invalid; the fallback mode is used
而在 LaTeX 中仍然是
Missing $
错误。我尝试采用它
<<>>=
test_ = function(x){gsub("([_])", '\\\\\\_', "test_x")}
@
\Sexpr{test_(sample)}
但这仍然会导致相同的错误。
如果我手动放置一个转义字符
\
前面_
在 knitr 生成的 tex 文件中,它可以工作,但我不知道如何自动执行此操作。当我从这个问题中复制粘贴解决方案时,我也遇到了同样的错误:R, Sweave, LaTeX - escape variables to be printed in LaTeX?
<<echo=FALSE>>=
sanitize <- function(str) {
result <- str
result <- gsub("&", "\\\\&", result, fixed = TRUE)
result <- gsub("_", "\\\\_", result, fixed = TRUE)
result
}
@
<<>>=
(foo <- "test & _")
sanitize(foo)
@
When sanitized, it's ``\Sexpr{sanitize(foo)}''.
我究竟做错了什么?
最佳答案
这与 knitr
没有任何关系或者 R,就是在 LaTeX 中插入下划线。最简单的方法是将其放入 \verb
命令,例如
When sanitized, it's ``\verb!\Sexpr{sanitize(foo)}!''.
后
knitr
运行,这变成了When sanitized, it's ``\verb!test \\& \\_!''.
并显示您可能想要的内容,即
您可以更改
sanitize()
添加 \verb
的函数如果你愿意,包装。任何产生“After”行的东西。编辑添加:
如果你真的想保持代码高亮,你需要做类似 https://tex.stackexchange.com/questions/70652/alltt-packages-alltt-makes-a-newline 的事情创建一个宏来做一些事情
\verb
有,但不是全部。这也将需要更改您的sanitizer 功能。
关于r - knitr 中带下划线的内联代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41933210/