我正在使用一个文档类,它提供了一个名为 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}