宏输出作为后续 pythontex 命令/环境的输入?

宏输出作为后续 pythontex 命令/环境的输入?

我正在尝试制作一份包含一项特定数学/物理练习的文档。当然,该练习包括输入数据(即 a = 2 cm、b = 3 cm,...)和执行计算的部分。

只需更改输入(例如 a = 4 cm),我就可以生成一个新文档,其中所做的所有计算都会自动更新。为此,我使用了 pythontex 包。

我已经设法在 Python 中生成计算,其中变量从一开始就明确定义,例如a + b(第一次计算)。我如何将结果保存a + b在新变量中zz在 Python 下的后续计算中使用,例如z + a

\documentclass{article}
\usepackage{mathtools}
\usepackage{pythontex}

\newcommand{\mysum}[2]{#1 + #2}
\newcommand{\mysumpy}[2]{\py{#1 + #2}}

\begin{document}
Here are the inputs:\\
\pyc{a_py = 2}  $a = \py{a_py}$ cm\\
\pyc{b_py = 3}  $b = \py{b_py}$ cm\\

Here is my 1st calculation:\\
\begin{equation}
z = \mysum{a}{b} = \mysumpy{a_py}{b_py}
\end{equation}

Here is my 2st calculation involving previous result ("z"):\\
\end{document}

答案1

您可以修改\mysumpy命令以采用可选参数,即应存储结果的变量的名称。我正在使用etoolbox包(pythontex已加载)来查看是否存在可选参数。然后您可以稍后使用访问变量的值\py。例如,

\documentclass{article}
\usepackage{mathtools}
\usepackage{pythontex}

\newcommand{\mysum}[2]{#1 + #2}
\newcommand{\mysumpy}[3][]{%
  \ifstrempty{#1}%
    {\py{#2 + #3}}%
    {\pyc{#1 = #2 + #3}\py{#1}}}

\begin{document}
Here are the inputs:\\
\pyc{a_py = 2}  $a = \py{a_py}$ cm\\
\pyc{b_py = 3}  $b = \py{b_py}$ cm\\

Here is my 1st calculation:\\
\begin{equation}
z = \mysum{a}{b} = \mysumpy[z_py]{a_py}{b_py}
\end{equation}

Here is my 2nd calculation involving previous result (``z''): \py{z_py}\\
\end{document}

如果您要进行大量类似的计算,您可能还会考虑创建一些更紧凑的命令以节省输入。如果您要使用单位,您可能考虑使用该siunitx包。例如,

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

\newcommand{\pyinputval}[2]{%
  \pyc{#1 = #2}%
  \ensuremath{#1 = \SI{#2}{cm}}}
\newcommand{\pysum}[3][]{%
  \ifstrempty{#1}%
    {\ensuremath{#2 + #3 = \py{'\\SI{0}{{cm}}'.format(#2 + #3)}}}%
    {\pyc{#1 = #2 + #3}%
      \ensuremath{#1 = #2 + #3 = \py{'\\SI{0}{{cm}}'.format(#1)}}}}

\begin{document}
Here are the inputs: \\
\pyinputval{a}{2} \\
\pyinputval{b}{3} \\

Here is my 1st calculation:\\
\begin{equation}
\pysum[z]{a}{b}
\end{equation}

Here is my 2nd calculation involving previous result (``z''): \py{z}\\
\end{document}

相关内容