r - Knitr - 使用 Sexpr 定义调用 R 函数的 Latex 命令
问题描述
我基本上想知道如何定义一个新的 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()
似乎太多工作了。
推荐阅读
- qt - Qml 中的属性 contentItem
- java - Doucment.getString 没有给出输出(Firestore)
- asp.net - 在视图中显示日期时如何仅显示日期?
- python - 与每组中最大值的差异
- loopbackjs - mongodb 集合名称的 Loopback4 模型定义选项
- python - 如何检查规则是否已经在 iptables
- javascript - 开/关按钮激活功能
- c++ - Qt - 在 Linux DE 上将窗口提升到当前桌面/工作区
- php - 在codeigniter 3中重定向后会话被破坏
- mysql - 子查询在 HAVING 子句中返回多行