如何让 LaTeX 忘记某个类已经被加载?

如何让 LaTeX 忘记某个类已经被加载?

考虑两个文件

% mydoc.tex
\documentclass{myclass}
\begin{document}
\end{document}

% myclass.cls
\LoadClass[x]{myclass}

当使用 LaTeXing 时mydoc.tex,我收到两个错误(跳过第一个错误后出现第二个错误):

! LaTeX Error: Option clash for document class myclass.
! LaTeX Error: The font size command \normalsize is not defined:
               there is probably something wrong with the class file.

这并不奇怪,因为 LaTeX 会记住它已经加载过的类文件以及每个类使用的选项。因此它会注意到x第一次加载时没有该选项,并且不会再次加载该类。

我必须添加哪些命令myclass.cls(在之前\LoadClass),以便 LaTeX 忘记myclass.cls刚刚加载的,以及加载类时使用的选项?如果命令有效,上述示例应导致循环,因为myclass.cls一遍又一遍地加载。理想情况下,补丁应该是健壮的,以便它能够经受住对 LaTeX 的低级更改。

编辑:这只是 MWE,正如我们一直要求 OP 那样。如果您希望解决实际问题,请参阅这个帖子

答案1

这可能是我做过的最肮脏的黑客攻击。我不知道它可能会破坏什么,我也不想去想 @egreg 会怎么称呼它(尽管这可能涉及到“灾难”这个词)。不过,您可以使用以下命令实现无限循环。

%myclass.cls
\expandafter\let\csname [email protected]\endcsname\relax
\LoadClass[x]{myclass}

第一行(未注释)会欺骗类加载测试,使其认为myclass.cls尚未加载。这可以防止选项检查发生,因此足以自行触发无限循环。

你可以欺骗选项检查,让它认为原始的类选项序列x

\expandafter\def\csname [email protected]\endcsname{x}

但我不认为这有任何用处,因为之后LaTeX会简单地忽略选项匹配的重新加载尝试。

使用风险由您自行承担...

相关内容