将文本转发到 PythonTeX 环境

将文本转发到 PythonTeX 环境

是否可以在 TeX 中创建一个新环境,以便将该环境中的文本转发到具有 PythonTeX 的 Python 函数?可以将值转发给 Python(通过使用\newenvironment{}[number]{},但第二个括号内的文本是否也可以?如果可以,怎么做?

答案1

这是一个非常基本的解决方案。环境中的文本被写入临时文件,然后 Python 读取该文件并将其传递给函数。可以避免使用临时文件,但这需要大量的 LaTeX 编程来捕获环境文本并正确转义它,以便可以更直接地将其传递给 Python。这种方法不允许环境接受参数。这会使事情变得更加复杂,因为必须先将参数插入文本中,然后再将其传递给 Python。

这需要 PythonTeX 设置,rerun=always以便始终执行 Python 代码。由于使用了临时文件,Python 代码在运行之间不会发生变化,因此 PythonTeX 不会自动检测到需要执行的代码。

编辑:原始版本使用单个临时文件。如果多次使用该环境,则此方法不起作用。新版本每次使用该环境时都会使用一个新的临时文件。

\documentclass{article}

\usepackage[rerun=always]{pythontex}

\newcounter{tempfilecounter}

\begin{pycode}
tempfile_counter = 0
def func(x):
    return 'Before:\n\n' + x + '\n\nAfter' 
\end{pycode}

\newenvironment{envtopyfunc}{%
  \VerbatimEnvironment
  \stepcounter{tempfilecounter}%
  \begin{VerbatimOut}{temp\arabic{tempfilecounter}.txt}}%
 {\end{VerbatimOut}%
  \pyc{tempfile_counter += 1}%
  \pyc{f=open('temp{0}.txt'.format(tempfile_counter)); print(func(f.read())); f.close()}}


\begin{document}

\begin{envtopyfunc}
Line 1 ...

Line 2 ...
\end{envtopyfunc}

\end{document}

相关内容