\newcommand 类型的选项,运行所有子参数并保存静态文本

\newcommand 类型的选项,运行所有子参数并保存静态文本

我正在尝试编写使用 sage 的代码,但在代码中随机化内容时遇到了一些问题。sagetex 部分不太重要(我不这么认为),重要的是如果我使用

\newcommand{\foo}{(SAGETEXHERE)} 

然后,每当我运行该命令时,\foo它都会重新运行 Sage 文本......这是一个问题。

以下是当前伪代码的示例

\begin{sagesilent}
func1 = x - 3
func2 = x + 1
f = expand(func1*func2)
\end{sagesilent}

\newcommand{\foo}{\sage{f}}

在这里,通常会发生的情况是 sage silent 运行 sage,并创建正确的 f = x^2 - 2x - 3。然后每次\foo调用时,它都会重新运行 sage 的一个实例,以在 sage 文件中定位 f 的定义,然后 sage 会将定义吐出到文本中,然后\foo将 f 显示到文本中。这不必要地花费了大量的计算时间,当事情变得随机时,一切都会变得一团糟。

有没有什么方法可以强制命令在定义时接受定义,然后将该定义保存为直接文本,这样我就不必每次想要调用时都重新运行 sage 来查找 f 的定义\foo

编辑:我想出了一个应该是等效的非圣人版本。

使用 lgc 包,这是我的 MWE:

\usepackage[first=1]{lcg}
\newcommand{\Temp}{\genrand{A}{1}{10} \arabic{A}}
\begin{document}
\Temp
\Temp
\Temp
\end{document}

在这个例子中,\Temp会给出 3 个不同的数字,但我想要的是构建第二个宏的某种方式,也许\Temp2这样它在定义\Temp时会扩展\Temp2,然后每次\Temp2运行时都会给出相同的数字。请注意,这只是举个例子,在这个特定情况下,我可以将第一个随机数保存在计数器中,然后继续调用计数器,但这不是重点,我希望能够在宏定义级别执行此操作(这样我就可以将其应用于 sagetex 上下文)。

有任何想法吗?

相关内容