是否可以在 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}