![如何使用 knitr 创建新命令?](https://linux22.com/image/285051/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20knitr%20%E5%88%9B%E5%BB%BA%E6%96%B0%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
我正在使用knitr
,我想创建一些新命令来将常见任务合并为一个,例如,\newcommand{\numps}[1]{\numprint{\Sexpr{#1}}}
这样我就可以执行类似的事情\numps{pi}
。但我似乎无法让它编译。我会收到以下错误:
mwe.tex:7: Package numprint Error: empty argument.
我该如何修复这个问题?谢谢。
MWE 如下:
\documentclass{article}
\usepackage{Sweave}
\usepackage{numprint}
\newcommand{\numpS}[1]{\numprint{\Sexpr{#1}}}
\begin{document}
\numpS{pi}
\end{document}
答案1
今天,我必须定义几个,\newcommand
以避免在使用包编码的逐字 LaTeX 图表中对计算出的数字进行硬编码tikzcd
。这个块
```{r results='asis'}
newcommand <- function(cmdname, ...){
cat(paste("\\newcommand\\", cmdname, "{", ..., "}", sep=""))
}
newcommand("oracindi", round(mean(max.Pr), 3))
newcommand("pragindi", round(mean(max.Pr_14), 3))
# ...
```
允许我使用命令\oracindi
、、\pragindi
...代替图表中的硬编码数字。
答案2
由于该knitr
(和 Sweave)函数的方式,这将无法工作。 knitr
在 TeX 之前处理文档,并将替换\Sexpr{#1}
为 R 为 给出的任何内容#1
。鉴于错误,似乎整个\Sexpr{#1}
被替换为空(空参数)。因此在 LaTeX 获得的输出中knitr
,
\newcommand{\numpS}[1]{\numprint{\Sexpr{#1}}}
变成了类似
\newcommand{\numpS}[1]{\numprint{}}
这显然是行不通的。
作为一种解决方法,您可以考虑定义一个 R 函数,将其参数包装在您想要的 LaTeX 命令中。类似于\Sexpr{numps(pi)}
。