如果我尝试标记列表中的项目,如
\documentclass{article}
\usepackage{hyperref}
\begin{document}
\begin{itemize}
\item blah \label{list:blah}
\pagebreak
\item foo \label{list:foo}
\pagebreak
\end{itemize}
reference to blah \ref{list:blah}
\pagebreak
reference to foo \ref{list:foo}
\end{document}
然后返回项目的链接全部返回到列表的开头。有没有办法让每个列表项单独标记?
答案1
尝试链接到itemize
环境中的项目并不常见,因为它们没有编号,也没有定义锚点。也没有自然的文本可以关联。
通过添加\phantomsection
到每个\item
,您可以提供锚点。仍然没有关联文本,并且hyperref
仍然会抱怨空链接。相反,您可以使用自己的链接文本和命令\hyperref
代替\ref
:
\documentclass{article}
\usepackage{hyperref}
\usepackage{etoolbox}
\AtBeginEnvironment{itemize}{\apptocmd{\item}{\phantomsection}{}{\errmessage{couldn't patch item}}}
\begin{document}
\begin{itemize}
\item blah \label{list:blah}
\pagebreak
\item foo \label{list:foo}
\pagebreak
\end{itemize}
reference to blah \hyperref[list:blah]{blah}
\pagebreak
reference to foo \hyperref[list:foo]{foo}
\end{document}
答案2
我认为这些链接无法使用,itemize
因为您没有指向的唯一编号。会产生如下错误
Package hyperref Warning: Suppressing empty link on input line 17.
Package hyperref Warning: Suppressing empty link on input line 19.
尝试一下enumerate
,它有效:
\documentclass{article}
\usepackage[colorlinks]{hyperref}
\begin{document}
\begin{enumerate}
\item blah \label{list:blah}
\pagebreak
\item foo \label{list:foo}
\pagebreak
\end{enumerate}
reference to blah \ref{list:blah}
\pagebreak
reference to foo \ref{list:foo}
\end{document}
如果您希望它能与 一起工作,itemize
您可以使用\pageref
。但我不确定这在这种情况下会有多大帮助。
\documentclass{article}
\usepackage[colorlinks]{hyperref}
\begin{document}
\begin{itemize}
\item blah \label{list:blah}
\pagebreak
\item foo \label{list:foo}
\pagebreak
\end{itemize}
reference to blah \pageref{list:blah}
\pagebreak
reference to foo \pageref{list:foo}
\end{document}