我基本上想知道如何定义一个新的 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/