考虑在包中定义的命令(或从另一个包中使用),比如在包中\somethingstupid
之前使用过\endinput
,执行一些非排版设置(颜色、设置长度、计数器等,甚至定义其他命令......)。
有时此代码很烦人,根本不应该使用。
有没有办法patch
包(而不仅仅是命令)来防止这种情况有效的代码?
当然,可以修补命令中“烦人”的部分,但这可能很复杂。
这是 MWE
虚拟包.sty
\ProvidesPackage{dummypackage}
\RequirePackage{xcolor}
\newcommand{\somethingstupid}[1]{%
%%% A lot of non-typesetting code before
\color{#1} % 'stupid' too
%%% A lot of non-typesetting code after
}
%%% Other stuff
\somethingstupid{blue} % Should not be here for some reasons
%%% Other stuff
\endinput
还有一些驱动.tex
文件
\documentclass{article}
\usepackage{dummypackage}
\usepackage{blindtext}
\begin{document}
\blindtext
\end{document}
答案1
这使得
Ignoring \somethingstupid
在日志中,不执行包定义\somethingstupid
\documentclass{article}
\def\zsomethingstupid{\somethingstupid}
\let\znewcommand\newcommand
\def\newcommand#1{%
\def\ztmp{#1}%
\ifx\ztmp\zsomethingstupid
\expandafter\zz
\else
\expandafter
\znewcommand
\fi
#1}
\def\zz#1[#2]#3{\def#1##1{\typeout{Ignoring \string#1}}}
\usepackage{dummypackage}
\let\newcommand\znewcommand
\usepackage{blindtext}
\begin{document}
\blindtext
\end{document}