内部超链接不适用于 res.cls

内部超链接不适用于 res.cls

res.cls我正在我的简历中使用流行的(CTAN链接

我想在我的文件中放置内部链接。但是,以下操作无法成功放置内部链接:

\documentclass{res}

\usepackage{hyperref}


\begin{document}

\section{Section 1}
\label{sec:part1}

\hyperref[sec:part1]{Jump to Section 1}

\hyperref[sec:part2]{Jump to Section 2}

\section{Section 2}
\label{sec:part2}

\hyperref[sec:part1]{Jump to Section 1}

\hyperref[sec:part2]{Jump to Section 2}

\end{document}

但是,如果我使用内置的 .cls,链接就会成功放置:

\documentclass{article}

\usepackage{hyperref}


\begin{document}

\section{Section 1}
\label{sec:part1}

\hyperref[sec:part1]{Jump to Section 1}

\hyperref[sec:part2]{Jump to Section 2}

\section{Section 2}
\label{sec:part2}

\hyperref[sec:part1]{Jump to Section 1}

\hyperref[sec:part2]{Jump to Section 2}

\end{document}

.cls为了使它按预期运行,需要对文件进行哪些修改?

答案1

res.cls在我看来,这是一个奇怪的类,不应该使用。它\nofiles在类文件中有显式声明,这阻止了诸如 之类的辅助文件的生成.aux,而这些文件正是 所急需的hyperref

另一个问题是\section实际上被重新定义了,因此根本没有使用计数器,即\refstepcounter实际上\label是无用的:-(

一个可能的解决方案(除了不使用)是在之前res.cls说。\let\nofiles\relax\documentclass{res}

使用类似

\makeatletter
\@fileswtrue
\makeatother

这并不能解决问题,因为\protected@write在内部被重新定义\nofiles为始终写入终端,所以这里实际上没有任何收获。

可以通过在命令前面\label添加 来解决该问题。\section\phantomsection

\let\nofiles\relax
\documentclass{res}
\usepackage{etoolbox}
\usepackage{hyperref}

\pretocmd{\section}{\phantomsection}{}{}
\begin{document}


\section{Section 1}
\label{sec:part1}

\hyperref[sec:part1]{Jump to Section 1}

\hyperref[sec:part2]{Jump to Section 2}

\clearpage
\section{Section 2}\label{sec:part2}

\hyperref[sec:part1]{Jump to Section 1}

\hyperref[sec:part2]{Jump to Section 2}

\end{document}

更清洁的方法:使用\hyperlinkcleveref\nameref

相关内容