定理子编号和超链接

定理子编号和超链接

我想对某些定理使用子编号。我使用了问题中提供的解决方案如何获得定理(定理 1.A.、定理 1.B.、定理 2.)的子编号?,这正是我想要的。

然而,似乎有一个问题hyperref. 编译时我收到警告

具有相同标识符 (name{theorem1.1}) 的目标已被使用,重复项被忽略 < 需要再次读取 > relaxl.197 (...)

输出的 pdf 文档很好,只是当使用\ref“子定理”时,单击输出超链接会发送到错误的定理(在我的情况下,它链接到命题 1.2 而不是定理 19.B)。

如果有人知道如何解决这个问题或者提出替代方案,我将不胜感激。

答案1

您还需要调整H与以下内容相关的样式计数器thm

在此处输入图片描述

\documentclass{article}

\usepackage{hyperref}
\makeatletter
\newenvironment{subtheorem}[1]{%
  \def\subtheoremcounter{#1}%
  \refstepcounter{#1}%
  \protected@edef\theparentnumber{\csname the#1\endcsname}%
  \setcounter{parentnumber}{\value{#1}}%
  \setcounter{#1}{0}%
  \expandafter\def\csname the#1\endcsname{\theparentnumber.\Alph{#1}}%
  % To keep hyperref happy, update H-counter as well
  \expandafter\def\csname theH#1\endcsname{thm.\theparentnumber.\Alph{#1}}%
  \unskip\ignorespaces
}{%
  \setcounter{\subtheoremcounter}{\value{parentnumber}}%
  \ignorespacesafterend
}
\makeatother
\newcounter{parentnumber}

\newtheorem{thm}{Theorem}

\begin{document}

\begin{thm}\label{thm:one}
One
\end{thm}

\begin{subtheorem}{thm}\label{thm:two}%
\begin{thm}\label{thm:twoA}
Two, first part
\end{thm}

\begin{thm}\label{thm:twoB}
Two, second part
\end{thm}
\end{subtheorem}

\begin{thm}\label{thm:three}
Three
\end{thm}

\ref{thm:one}, \ref{thm:two}, \ref{thm:twoA}, \ref{thm:twoB}, \ref{thm:three}.

\end{document}

请注意添加\unskip,以避免在环境开始时出现虚假的垂直间距subtheorem

相关内容