![我怎样才能让 \hyperlink 显示 \hypertarget 的章节编号?](https://linux22.com/image/436963/%E6%88%91%E6%80%8E%E6%A0%B7%E6%89%8D%E8%83%BD%E8%AE%A9%20%5Chyperlink%20%E6%98%BE%E7%A4%BA%20%5Chypertarget%20%E7%9A%84%E7%AB%A0%E8%8A%82%E7%BC%96%E5%8F%B7%EF%BC%9F.png)
我正在使用一个文档类,它提供了一个名为 sheet 的环境,以及一个 \sheetlink 命令来提供指向特定工作表的超链接。以下源代码中显示了一个演示主要功能的简化示例:
\documentclass{article}
\usepackage{hyperref}
\setlength{\parindent}{0mm}
\setlength{\parskip}{1ex}
\newcounter{sheetnum}[section]
\newenvironment{sheet}[1]{%
\refstepcounter{sheetnum}
\label{#1}
\hypertarget{#1}{\underline{Sheet \thesection.\thesheetnum}}
}
\newcommand{\sheetlink}[1]{Sheet \hyperlink{1}{\thesection.\ref*{#1}}}
\begin{document}
\section{One}
This is a reference to \sheetlink{sheet:first}
\section{Two}
\label{sec:two}
This is a reference to \sheetlink{sheet:first}
\begin{sheet}{sheet:first}
This is the first sheet in \autoref{sec:two}
\end{sheet}
\end{document}
当 \sheetlink 命令引用同一节中的工作表时,它可以按预期工作,但是当 \sheetlink 引用不同节中的工作表时,它会得到错误的节号,因为它使用 \thesection,这将是当前节号,而不是包含工作表的节号。
我该如何修改它以便 \sheetlink 打印包含该工作表的部分的部分编号?
答案1
\documentclass{article}
\usepackage{hyperref}
\setlength{\parindent}{0mm}
\setlength{\parskip}{1ex}
\newcounter{sheetnum}[section]
\renewcommand\thesheetnum{\thesection.\arabic{sheetnum}}
\newenvironment{sheet}[1]{%
\refstepcounter{sheetnum}%
\label{#1}%
\underline{Sheet \thesheetnum}}
\newcommand{\sheetlink}[1]{Sheet \ref{#1}}
\begin{document}
\section{One}
This is a reference to \sheetlink{sheet:first}
\section{Two}
\label{sec:two}
This is a reference to \sheetlink{sheet:first}
\begin{sheet}{sheet:first}
This is the first sheet in \autoref{sec:two}
\end{sheet}
\end{document}