! 未定义控制序列。\@urlcolor 带有自定义 documentclass

! 未定义控制序列。\@urlcolor 带有自定义 documentclass

我正在尝试调试documentclass我需要使用的自定义,其中hyperref包(\href命令)不起作用。

这是我的文件:

\documentclass{article}

\usepackage{hyperref}

\begin{document}

  \href{http://link}{text}
  
\end{document}

编译成功。当我将 更改documentclassnohrefbeingnohref.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{}%
}

相关内容