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}
更清洁的方法:使用\hyperlink
或cleveref
或\nameref
。