LaTeX 宏扩展器

LaTeX 宏扩展器

是否可以使用 LaTeX(或其他程序)扩展 .tex 文件中的宏并输出扩展的 LaTeX 源?

如果不存在这样的程序:在解释文档之前,LaTeX 宏是否只是作为字符串替换进行处理?如果是这样,编写自己的转换器可能很容易。

编辑:我之所以询问是因为有些期刊不接受带有宏的 LaTeX 投稿。如果能够使用我常用的宏进行开发,并自动转换为“宏扩展”格式进行投稿,那将非常有用。

答案1

如果您只是想了解 LaTeX 如何工作,以及在扩展宏时它做什么,您可以将 \tracingmacros\tracingall放在您的 .tex 文件中,LaTeX 会将扩展过程写入日志文件中。

答案2

对我来说解决方案是http://ctan.org/pkg/de-macro,它包含在 TeX Live 中,如果你正在使用基于 Debian 的 Linux 发行版,那么你可能已经拥有它了

你要做的是:

  • 将您的定义放在名为以下内​​容的文件中,该文件位于something-private.sty原始文件所在的同一目录中yourfile.tex
  • 评论或删除您的定义yourfile.tex
  • 将命令\usepackage{something-private}放入yourfile.tex
  • 打开 shell,并进入所在yourfile.tex目录
  • 在 shell 中执行de-macro yourfile.tex

将创建一个yourfile-clean.tex包含所需宏的扩展,如果您需要在定义中更改某些内容,则删除该*-clean.tex文件并再次运行de-macro

答案3

我不知道有哪个软件包可以做到这一点,但我很想有一个。cleveref软件包中有如下选项:

当提供 poorman 选项时,您的文档将按正常方式处理。但此外,sed还会自动编写一个脚本,其中包含将所有命令替换\cref为它们将生成的 LaTeX 代码的规则,并使用标准\ref命令生成交叉引用本身。

在我设想的 LaTeX 软件包中,您将拥有一个类似这样的命令,\newmacro其行为方式与上述相同,\newcommand只不过作者会确保只发生“合理”的扩展。然后,它可以编写一个辅助文件,使用 Lua 脚本生成文档副本,其中所有宏均由其定义替换。

那么,呃,有谁愿意写它吗?

答案4

一般来说,如果不执行原始命令就无法做到这一点,因为宏很容易依赖于它们。

例如,考虑

\def\foo{\ifdim\ht0>10pt foo\else bar\fi}
\setbox0\vbox{...}
\foo

即使假设...已完全指定,也\foo无法扩展,直到设置了框 0。

除了排版和输出标记流之外,可能可以完全模拟 TeX,但我不知道有这样的程序。

相关内容