寻找选择性乳胶命令替换方法

寻找选择性乳胶命令替换方法

我有一个用于生成 wordpress 的 perl 脚本(或 physicsforums 或 wikipedia)样式的 latex 标记来自独立的 latex 文件,但它已经变得有点庞然大物,而且最近也遇到了它的对手,所以我正在寻找选择。我的脚本支持我使用的许多简单命令,例如:

\newcommand{\lr}[1]{\left(#1\right)}
\newcommand{\Ba}[0]{\mathbf{a}}
\newcommand{\Bb}[0]{\mathbf{b}}
\newcommand{\acap}[0]{\hat{\Ba}}
\newcommand{\bcap}[0]{\hat{\Bb}}
\newcommand{\ccap}[0]{\hat{\Bc}}
\newcommand{\inv}[1]{\frac{1}{#1}}
\newcommand{\cross}[0]{\times}
\newcommand{\abs}[1]{\lvert{#1}\rvert}
\newcommand{\norm}[1]{\lVert{#1}\rVert}
...

但是所有这些都是在 perl 中硬编码的,而不是基于我将它们塞入的 .sty 文件(即极其丑陋和不可扩展的做事方式)。

我希望有一些东西可以做简单的 \newcommand 替换,理想情况下,给定一个也是 \include'd 或 \usepackage 的文件并将其从乳胶文本中删除,替换它包含的所有命令。

我知道并尝试过一些其他方法来完成此类任务,例如:

  • 卢卡的wordpress 到 latex
  • 我发现 GPP 引用于这个帖子,但尝试使用“gpp -T”似乎除了错误地删除几个 @ 符号外没有任何效果。我猜想这个程序的“latex 样式”仍然需要手动更改 latex 命令以使用某种特殊语法。
  • https://tex.stackexchange.com/a/3181/15是尝试 \tracingmacros1 的提示。尝试后我发现输出非常大,即使经过过滤,它仍然非常大:

    $ grep --binary-files=text -e '->' latexStdout.txt > q $ wc -lq 6148361 q 这也没有给出每个宏的来源,并且很难用于更有选择性的替换。评论中提到 trace 包的输出比普通的 \tracemacros1 更好,但我发现它产生的结果非常难以理解。

  • 回答指出反宏包但是如果我尝试这样做,我会收到一个我不知道如何处理的 Python 错误:

    文件“./de-macro”,第 643 行,在 scan_numargs 中引发“%s 必须是 %s 之后的参数编号”%(numargs,name)TypeError:异常必须是旧式类或从 BaseException 派生,而不是 str

我懂了提示没有可用的乳胶语法可用于编写更强大的独立 latex 到 latex 预处理器。在其他人们询问 latex 预处理器的问题中,有人建议使用 \listfiles,这很好,但对选择性替换没有帮助。

从概念上讲,我认为这对 latex 本身来说是一项理想的工作,因为它已经知道如何进行解析。我想,对于了解 latex 后端的人来说,创建一个新的 latex 文本输出模式可能并不太难,但该模式会执行选择性命令预处理。我假设不存在这样的方法,但我认为值得一问。如果不存在这样的模式,是否有人确定使用 latex 本身完成此任务所需的工作范围?

相关内容