我开始使用优秀的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}