r - knitr 中带下划线的内联代码

标签 r knitr

我想在 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 \\& \\_!''.

并显示您可能想要的内容,即
enter image description here

您可以更改 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/

相关文章:

r - 函数(x)和函数()x之间的区别

r - 使用as.date时如何将时间添加到日期?

r - 为什么 sf 对象不能使用 R 中的所有 data.table 方法?

r - 使用 Sweave 和 Latex 绘图为空

RMarkdown : bookdown with plotly

r markdown kable将表的宽度分解为多个彼此下面的表

r - 在 rmarkdown/knitr 中注释以防止 R 评估

r - knitr 在渲染 html 时将 (1) 更改为 <ol>?

在 R 中使用默认值检索函数调用的参数

r - 如何在没有原始 Markdown 输出的情况下使用 knitr block 将元素添加到绘图中?