是否可以在 latex 命令中调用/引用 sagetex?

是否可以在 latex 命令中调用/引用 sagetex?

我正在做一些项目,在这些项目中,从 sagetex 环境中获取一些数字,然后直接在 latex 中使用它们会非常有帮助。我知道 Latex 不擅长存储数字/信息,目前我知道的唯一方法是命名和使用计数器。问题是所有存储数据的命令(例如 /setcounter)都是接受输入的命令,我无法直接在这些命令中调用 sage。例如,我想执行以下操作:

    \begin{sagesilent}
    a = Integer(randint(1,5))
    \end{sagesilent}
    \setcounter{Seed}{\sage{a}}

不幸的是,由于 latex 无法理解命令调用中的 \sage{a},因此出现了错误。

有什么方法可以做到这一点或类似的东西吗?一个原因是使用 sage 为 Latex 生成实际的良好随机数(所有 latex 随机数生成器似乎都低于标准),但我还有其他用途,这会让我的生活更轻松。

答案1

这是一种方法。虽然有点笨拙、脆弱和迂回,但应该可行。其想法是让 Sage 将 LateX 代码写入文件,然后将其读入文档。尝试以下方法:

\begin{sagesilent}
    import string
    with open('counters.tex', 'w') as f:
        s = string.Template(r'\setcounter{Seed}{$seed}').substitute(seed=randint(1, 5))
        f.write(s)
        # more "s =" and "f.write()" as desired.
\end{sagesilent}

{使用和格式化字符串}会让你抓狂,这就是为什么我使用 Python 的模板字符串

在该块之后,counters.tex将被关闭并写入磁盘。然后,稍后在您的 tex 文件中,执行

\InputIfFileExists{counters.tex}

这将设置计数器。(我还没有测试过,但一般的想法是让 Sage/Python 写出一个文件 - 您可以在该文件中控制字符串、生成数字等 - 然后让 TeX 读入它 - 应该可以工作。

相关内容