我正在尝试删除 Latex 文件中的所有\newcommand
s、\renewcommand
s、\newenvironment
s 和\newenvironment
s,而不进行任何结构和内容更改。
据我了解,这些命令的唯一目的是简化 Latex 的编写并节省时间。
我的想法:
- 用具有新名称的新命令替换更新的命令
- 将文件中更新的命令的所有实例替换为新名称
- 将文件中所有新命令的所有实例替换为相应的定义
这在不对文件结构和内容进行任何更改的情况下是否可行?
答案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
根据使用位置以不同的方式扩展。