考虑两个文件
% 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
会简单地忽略选项匹配的重新加载尝试。
使用风险由您自行承担...