我已经看到了许多使用的\patchcmd
例子etoolbox
包。我不太熟悉这个包,想了解在什么情况下适合使用 来\patchcmd
代替renewcommand
。
我的用例涉及更改 KOMA-Script 包中的定义,\maketitle
以便我更好地控制组成前言的各个页面。
答案1
没有硬性规定。有些情况下这种方法\patchcmd
行不通,但在这种情况下,你总是可以使用更复杂的修补选项之一。
\maketitle
一般来说,如果您想从头设计做什么,请使用\renewcommand
;如果您想调整\maketitle
做什么,请使用\patchcmd
。
这就像拆除旧房来建造新房和扩建或改造现有房屋的区别。虽然存在一些边缘情况,但如果您只是想要一扇木门而不是塑料门,那么改造是更好的选择;如果您想增加一个地下室游泳池并将一个房间的棚屋变成一个三层楼的豪宅,那么从头开始重建更有意义。
如果您通过复制 KOMA 的代码来开始构建命令,以便对其进行编辑,那么修补很可能是有意义的。如果您通过编写代码来开始构建命令以执行不同的操作,那么修补不太可能有太大意义。
修补的真正优势在于,您将从原始版本的更新中受益。当然,一个缺点是更新可能会破坏您的补丁。但在这种情况下,您可能还是想知道,因为其他不太明显的并发症可能会随之而来。
\patchcmd
如果充分利用的最后两个参数,问题就更容易追踪和识别。
\patchcmd{<macro name>}
{<to be replaced>}
{<replacement>}
{\typeout{Patching of <macro name without backslash> succeeded.}}
{\typeout{Patching of <macro name without backslash> failed.}}
这样您就可以仔细检查控制台输出或.log
文件中的相关行,从而检查修补是否成功。您还可以在\tracingpatches
加载包后添加到前言中来评估修补过程(以及成功或失败)。