我想对某些定理使用子编号。我使用了问题中提供的解决方案如何获得定理(定理 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
。