如何使用 knitr 创建新命令?

如何使用 knitr 创建新命令?

我正在使用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)}

相关内容