r - Knit - 使用 Sexpr 定义调用 R 函数的 Latex 命令

标签 r function command latex knitr

我基本上想知道如何定义一个新的 Latex 命令,以便它允许嵌套 Sexpr 和其他一些 R 函数,其中 Latex 参数是一个 R 对象。

幸运的是,这个想法在某种程度上是通过下面给出的新命令结构传递的:

 \newcommand{\SomeLatexCommand}[1]{\Sexpr{"#1"}}

幸运的是,参数确实被显示了,尽管是字符串。考虑到这一点,我希望得到以下命令:

\newcommand{\SweetLatexCommand}[1]{\Sexpr{SomeRFunction(get("#1"))}}

但是,一旦嵌套在 R 函数中,#1 就不会被读取为 Latex 参数的占位符,而是被读取为现有的 R 变量。

有没有办法让最后一个命令起作用?或者,是否还有其他巧妙的方法来定义 Latex 命令,这些命令又可以通过 R 对象调用任何 R 函数?

美好的一天,

最佳答案

不,你不能那样做。问题出在方式knitr作品:

R 运行 knit()函数(或其他 knitr 函数)。该函数在源代码中查找代码块和 \Sexpr调用、执行它们,并将它们替换为请求的输出,生成 .tex文件。

然后 LaTeX 处理 .tex文件。 R 不再参与。

\newcommand是一个 LaTeX 命令,仅在所有 R 评估完成后的最后阶段处理。

knitr可能有办法指定另一个以 \Sexpr 的方式工作的“宏”有效,但我认为没有办法同时拥有多个。

所以你应该做的是在 R 中编写多个函数,并调用它们来执行你想要的操作,如 \Sexpr{fn1(...)} , \Sexpr{fn2(...)}

我想如果你真的下定决心,你可以在开始时添加一个额外的预处理器阶段,它会经历你的 Rnw文件并替换所有看起来像 \SweetLatexCommand{blah} 的字符串与 \Sexpr{SomeRFunction(get("blah"))}然后调用knit() ,但这似乎工作量太大了。

关于r - Knit - 使用 Sexpr 定义调用 R 函数的 Latex 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69216132/

相关文章:

r - `expss` 和 `data.table` 一起玩得不好

javascript - addEventListener 仅在页面加载 javascript 时运行函数

php - 我可以测试回调是否有效吗?

java - 如何使用 Java 关闭命令窗口

批处理脚本中的 windows comp 命令 : remove prompts

r - 如何将循环中的函数添加到R中的R6Class

R:如何计算每 10 行变量的平均值

r - 迭代字符串列表以获取字数

javascript - 在另一个回调中运行 jQuery 函数时出现问题

python - 在python中拆分一个变量表