R 中是否有与 \Sexpr{} 等效的 PythonTex?

R 中是否有与 \Sexpr{} 等效的 PythonTex?

我开始使用优秀的PythonTex包来编写可重现的报告,但似乎无法让它评估 LaTeX 命令中的 Python 代码。

R 有 Sweave &针织品它提供的\Sexpr{}命令允许您在 LaTeX 命令中访问在 R 块中声明的变量。这在 R 中使用 Sweave/knitr 即可:

\documentclass{article}
\usepackage{siunitx}
\begin{document}
<<read, engine='R'>>=
y = 4
@
The value of y is $\SI{\Sexpr{y}}{\metre}$.
\end{document}

但是,下面的操作在 PythonTex 中似乎不起作用:

\documentclass{article}
\usepackage{siunitx}
\usepackage{pythontex}
\begin{document}
\pyc{y = 4}

The value of y is $\SI{\py{y}}{\metre}$.

\end{document}

我遗漏了什么吗?有没有办法\Sexpr{}在 PythonTex 中实现功能?

感谢您的帮助!

答案1

你可以做你想做的事,但方法与 Sweave 和 knitr 略有不同。

使用 Sweave 和 knitr,您创建的文件是.Rnw,输出是.tex。在 中.tex,每个都\Sexpr{...}由其输出替换。因此在最终.tex编译的文件中,没有\Sexpr{...}

使用 PythonTeX,您可以直接创建.tex,因此您所做的一切都必须是有效的.tex。根据\SI工作原理,\py在其中使用会导致问题——\SI需要数字,而不是命令。

有多种方法可以解决这个问题。下面我给出了两个例子。在第一种方法中,我创建了一个 Python 函数SI(),它接受一个变量和一个单位,并返回一个\SI命令。在第二种方法中,我创建了一个新的 LaTeX 命令,它可以做同样的事情,只是使用了一个更像 LaTeX 风格的界面。如果您需要在参数中\pySI使用#和字符,那么最后一种方法会出现问题,但这不应该是这个应用程序的问题。%

\documentclass{article}
\usepackage{siunitx}
\usepackage{pythontex}

\begin{pycode}
def SI(var, unit):
    return '\\SI{' + str(var) + '}{' + unit + '}'
\end{pycode}

\newcommand{\pySI}[2]{\py{'\\SI{' + str(#1) + '}{#2}'}}

\begin{document}
\pyc{y = 4}

The value of y is \py{SI(y, r'\metre')}.

The value of y is \pySI{y}{\metre}.

\end{document}

相关内容