我正在尝试调试documentclass
我需要使用的自定义,其中hyperref
包(\href
命令)不起作用。
这是我的文件:
\documentclass{article}
\usepackage{hyperref}
\begin{document}
\href{http://link}{text}
\end{document}
编译成功。当我将 更改documentclass
为nohref
beingnohref.cls
时
\def\document{
\everypar{}
}
编译失败,抛出
\hyper@linkurl ...tionraw >>}\relax \Hy@colorlink
\@urlcolor #1\Hy@xspace@en...
l.9 \href{http://link}{text}
我需要如何更改我的代码才能使其工作?
答案1
所显示的类文件完全破坏了 LaTeX,基本上什么都无法起作用。
重新定义\document
意味着通常设定的所有事情都不会\begin{document}
发生。
\documentclass{nohref}
\begin{document}
zzz
\end{document}
生产
Overfull \hbox (20.0pt too wide) in paragraph at lines 5--6
因为没有设置文本宽度
! LaTeX Error: The font size command \normalsize is not defined:
there is probably something wrong with the class file.
未定义\normalsize
\gdef \@abspage@last{1}
因为 aux 文件尚未打开进行写入。
! I can't find file `file.aux'.
\enddocument ...keatletter \@@input \jobname .aux
因为辅助文件未写入所以无法在最后输入。
具体来说,由于重新定义从不运行该代码hyperref
,因此通常不会发生任何设置。但确切的错误是相当随意的,因为基本上没有 LaTeX 构造可以工作,并且会在或多或少随意的内部故障时产生错误。\AtBeginDocument
\document
在链接聊天中,OP 确认实际使用的类不是相当最小,但几乎同样糟糕,它\document
基于 LaTeX2.09 定义,因此具体来说它不是运行指定在任何\AtBeginDocument{...}
指定运行的代码中运行的任何代码都会被默默丢弃。
hyperref
与许多其他类别一样,它的设置也延迟了很多,\AtBeginDocument
这就是为什么颜色特别失败的原因。
添加下面两行代码来运行 AtBeginDocumentHook 是使示例正常运行的最小补丁,但该类实际上 30 年来一直无法使用。请注意,\document
在 2021 版本中进行了进一步的更改以添加更多钩子,而这些都被此类破坏了,您需要
\RequirePackage[2020/01/01]{latexrelease}
在文档中撤消这些更新。
评论后更新
\def\document{\endgroup
\@colht\textheight \@colroom\textheight \vsize\textheight
\columnwidth\textwidth \@clubpenalty\clubpenalty
\if@twocolumn \advance\columnwidth -\columnsep
\divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
\fi
\hsize\columnwidth \linewidth\hsize
\begingroup\@floatplacement\@dblfloatplacement\endgroup
\if@filesw \immediate\openout\@mainaux=\jobname.aux
\immediate\write\@mainaux{\string\startlabels\string\@startlabels}\fi
% support \AtBeginDocment
\let\AtBeginDocument\@firstofone
\@begindocumenthook
%
\def\do##1{\let ##1\@notprerr}
\@preamblecmds
\let\do\noexpand
\@normalsize\everypar{}%
}