(解析器相关)删除 \newcommand 和 \renewcommand,但不改变结构和内容

(解析器相关)删除 \newcommand 和 \renewcommand,但不改变结构和内容

我正在尝试删除 Latex 文件中的所有\newcommands、\renewcommands、\newenvironments 和\newenvironments,而不进行任何结构和内容更改。

据我了解,这些命令的唯一目的是简化 Latex 的编写并节省时间。

我的想法:

  1. 用具有新名称的新命令替换更新的命令
  2. 将文件中更新的命令的所有实例替换为新名称
  3. 将文件中所有新命令的所有实例替换为相应的定义

这在不对文件结构和内容进行任何更改的情况下是否可行?

答案1

命令的行为取决于定义时的 catcode 表的状态。

这意味着您不能简单地复制定义主体并希望它能够起作用。

举个例子(我这样写是为了不出现错误):

\documentclass{article}
\usepackage{expl3}
\ExplSyntaxOn
\newcommand\somecommand
 {
  \int_step_inline:nnnn{1}{1}{4}
   {\int x}
 } 
\ExplSyntaxOff

\begin{document}

$
 \somecommand
$ 

\bigskip

$ %body of \somecommand
 \int_step_inline:nnnn{1}{1}{4}
    {\int x}
$   


\end{document}

在此处输入图片描述

答案2

您的替换规则需要比您描述的复杂得多。

考虑一下控制项目列表的常见习惯用法

\documentclass{article}

\newcommand\zz{\elt a\elt b\elt c\elt d}
\newcommand\elt{\renewcommand\elt{, }}

\begin{document}

\zz

\end{document}

排版如下

A B C D

当然,现在还有其他方法来排版列表,而不将分隔符(,此处)放在第一个项目前面,但这种方法关键取决于\elt重新定义,因此您必须全局分析用途并进行更改以\elt根据使用位置以不同的方式扩展。

相关内容