我正在使用 Python 脚本自动生成大量 TeX 代码。我一直将 TeX 代码保存到文件中,然后通过 将这些文件带入我的文档中的适当位置\input
。这种方法可行,但有时会生成大量外部文件,其中许多文件只有几行。
我正在考虑将生成的 TeX 代码保存在宏中。我可以在序言中引入一个包含宏定义的大文件,而不是在文档的各个位置引入许多小文件。这种方法的问题在于 TeX 代码可以包含逐字和类似的内容。我已经开发了一种方法,用于将此类内容保存在宏中,然后使用\scantokens
(下面的最小示例)检索它。与将 TeX 代码留在单独的外部文件中相比,这种方法有什么缺点吗?是否存在\scantokens
无法准确复制我从\input
外部文件中获得的内容的情况?
在应用方面,这主要与我的pythontex
包。该包允许您将 Python 代码包含在 LaTeX 文档中,执行它并引入其输出。Python 代码在编译期间保存到外部文件中。然后脚本执行每个代码块,并将每个块的输出保存在其自己的文件中。这些文件通过 自动带回到 LaTeX 文档中的适当位置\input
。这允许将 Python 代码中某个函数的输出print()
替换为其输出。通常,打印内容(外部文件)只有几到几十行,但它们可以根据用户需要而变大。
\documentclass{article}
\makeatletter
\long\def\catcher#1{%
\def\name{#1}%
\begingroup
\endlinechar`\^^J
\let\do\@makeother\dospecials
\catcher@i}
\begingroup
\catcode`!=0
!catcode`!\=12
!long!gdef!catcher@i#1\endcatcher^^J{%
!endgroup!expandafter!gdef!name{#1}}%
!endgroup
\def\getter#1{\expandafter\scantokens\expandafter{#1\empty}}
\makeatother
\catcher\myfile
Text, with verb \verb!#$^_!
\begin{verbatim}
Verbatim
environment
\end{verbatim}
More text
\endcatcher
\begin{document}
\getter\myfile
\end{document}