我有一个自定义环境,它只是一个为我enumerate
编写\item
的。我希望枚举标签是一个超链接 - 在下面的 MWE 中,它只是链接到文档末尾的一个页面。
使用打印版本引用环境时\ref
看起来不错。但是,您会注意到,创建的超链接\ref{testref}
指向枚举标签指向的相同链接,而不是它引用的环境。
需要进行哪些更改才能使超链接按预期运行?
\documentclass{article}
\usepackage{lipsum} % sample text
\usepackage{enumitem} % enumerations
\usepackage{hyperref} % hyperlinks
\newcounter{problem}
\newcounter{subproblem}
\newenvironment{problem}{\setcounter{subproblem}{0}\refstepcounter{problem}{\bfseries Problem \theproblem}}{}
\newenvironment{subproblem}{%
\stepcounter{subproblem}%
\begin{enumerate}[label=\protect\hyperlink{newpage}{\theproblem.\thesubproblem},leftmargin=*]
\item}{\end{enumerate}}
\begin{document}
\begin{problem}
\begin{subproblem}
\lipsum[1]
\end{subproblem}
\begin{subproblem}\label{testref}
\lipsum[1]
\end{subproblem}
\end{problem}
Test reference: \ref{testref}
\begin{problem}
\begin{subproblem}
\lipsum[1]
\end{subproblem}
\begin{subproblem}
\lipsum[1]
\end{subproblem}
\end{problem}
\newpage
\hypertarget{newpage}{We'll link to this}
\end{document}
答案1
以下是您的 MWE 中包含的一些更正。它们包括:
subproblem
使用主计数器在每次增量时重置或problem
:\newcounter{subproblem}[problem]
这消除了在环境启动时每次设置
subproblem
计数器()的要求。0
\setcounter{subproblem}{0}
problem
使用添加子问题计数器的参考步进
\refstepcounter{subproblem}
明确说明环境中包含的引用
enumerate
,即使它与 相似,也label
应避免label
被视为与 相同ref
。这纠正了对元素的错误引用:\begin{enumerate}% [label=\protect\hyperlink{newpage}{\theproblem.\thesubproblem},% label ref=\theproblem.\thesubproblem,% reference leftmargin=*]% left margin
\documentclass{article}
\usepackage{lipsum} % sample text
\usepackage{enumitem} % enumerations
\usepackage{hyperref} % hyperlinks
\newcounter{problem}
\newcounter{subproblem}[problem]
\newenvironment{problem}{\refstepcounter{problem}{\bfseries Problem~\theproblem}}{}
\newenvironment{subproblem}{%
\refstepcounter{subproblem}%
\begin{enumerate}[label=\protect\hyperlink{newpage}{\theproblem.\thesubproblem},ref=\theproblem.\thesubproblem,leftmargin=*]
\item}{\end{enumerate}}
\begin{document}
\begin{problem}
\begin{subproblem}
\lipsum[1]
\end{subproblem}
\begin{subproblem}\label{testref}
\lipsum[1]
\end{subproblem}
\end{problem}
Test reference: \ref{testref}
\begin{problem}
\begin{subproblem}
\lipsum[1]
\end{subproblem}
\begin{subproblem}
\lipsum[1]
\end{subproblem}
\end{problem}
\newpage
\hypertarget{newpage}{We'll link to this}
\end{document}