修补/阻止包中的有效代码

修补/阻止包中的有效代码

考虑在包中定义的命令(或从另一个包中使用),比如在包中\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}

相关内容