使用 ntheorem 更改单个定理的标签

使用 ntheorem 更改单个定理的标签

我的问题涉及下面粘贴的最小示例。我想将第二个定理(带有 yyy 的定理)的标题更改为,而Theorem 7'不会影响定理计数器。也就是说,定理应该标记如下:

Theorem 1 xxx
Theorem 7' yyy
Theorem 2 zzz
Theorem 3 uuu

也许可以使用 来实现这一点\setcounter,但这并不能解决 7 之后的素数的问题。所以我的问题是是否有可能操纵特定的定理标签?

\documentclass{scrartcl}
\usepackage{ntheorem}
\newtheorem{thm}{Theorem}   
\begin{document}
\begin{thm} %Theorem 1
xxx
\end{thm}
\begin{thm} % Theorem 7'
yyy
\end{thm}
\begin{thm} %Theorem 2
zzz
\end{thm}
\begin{thm} %Theorem 3
uuu
\end{thm}
\end{document}

我回到 Marco Daniels 的回答。考虑以下三个最小示例。我不明白为什么第一个不起作用而第二个和第三个却可以。有人能告诉我吗?

第一个例子(产生奇怪的错误):

\documentclass{article}

\usepackage[thmmarks,hyperref]{ntheorem} 
\usepackage[colorlinks=false, citecolor=blue, pdfstartview=FitH,plainpages=false] {hyperref}

\newtheorem{thm}{Theorem}                            
\newtheorem{prop}[thm]{Proposition}

\begin{document}
\begingroup
\def\thethm{\ref{a}'}
\addtocounter{thm}{-1}
\begin{prop} 
yyy
\label{test}
\end{prop}
\endgroup
\end{document}

第二个示例,已删除 hyperref,其他代码相同(运行良好):

\documentclass{article}

\usepackage[thmmarks]{ntheorem} 

\newtheorem{thm}{Theorem}                            
\newtheorem{prop}[thm]{Proposition}

\begin{document}
\begingroup
\def\thethm{\ref{a}'}
\addtocounter{thm}{-1}
\begin{prop} 
yyy
\label{test}
\end{prop}
\endgroup
\end{document}

第三个例子,代码与第一个例子相同,但是 \thethm 被改变了(也运行良好):

\documentclass{article}

\usepackage[thmmarks,hyperref]{ntheorem} 
\usepackage[colorlinks=false, citecolor=blue, pdfstartview=FitH,plainpages=false] {hyperref}

\newtheorem{thm}{Theorem}                            
\newtheorem{prop}[thm]{Proposition}

\begin{document}
\begingroup
\def\thethm{1'}
\addtocounter{thm}{-1}
\begin{prop} 
yyy
\label{test}
\end{prop}
\endgroup
\end{document}

我对此真的很困惑。无法解释错误消息。

答案1

计数器的输出存储在宏中\the<counter>。因此您必须更改\thethm。根据您的要求,您必须在本地执行此操作。在下面的示例中,我使用执行此操作\begingroup...\endgroup。当然,您也必须减少计数器thm

\documentclass{scrartcl}
\usepackage{ntheorem}
\newtheorem{thm}{Theorem}   
\begin{document}
\begin{thm} %Theorem 1
xxx
\end{thm}
\begingroup
\def\thethm{7'}
\addtocounter{thm}{-1}
\begin{thm} % Theorem 7'
yyy
\label{test}
\end{thm}
\endgroup
\begin{thm} %Theorem 2
zzz
\end{thm}
\begin{thm} %Theorem 3
uuu
\end{thm}
\ref{test}
\end{document}

答案2

您可以使它自动进行:

\documentclass{article}
\usepackage{ntheorem}
\newtheorem{thm}{Theorem}

\theoremstyle{nonumberplain}
\newcommand\specialref{}
\newtheorem{thmx}{Theorem \specialref}
\newenvironment{thmref}[2][$'$]
  {\renewcommand\specialref{\ref{#2}#1}\thmx}
  {\endthmx}

\begin{document}
\begin{thm}\label{A}
$1+1=2$.
\end{thm}

\begin{thmref}{A}
$2=1+1$.
\end{thmref}

\begin{thmref}[*]{A}[Variation on the theme]
$2\le 1+1$.
\end{thmref}
\end{document}

环境thmref需要将与主要定理相对应的标签作为参数。这样,​​您就不需要在输入中对数字进行硬编码。最后一个例子展示了如何将默认素数更改为星号等,还展示了仍然可以指定可选属性。

如果你还想\label为这些“修改版本”分配一个,那么说

\usepackage{refcount}

并修改thmref

\newenvironment{thmref}[2][$'$]
  {\edef\thethmx{\getrefnumber{#2}\unexpanded{#1}}%
   \renewcommand\specialref{\ref{#2}#1}\thmx}
  {\endthmx}

其余部分保持不变。现在

\begin{thmref}{A}\label{B}
$2=1+1$.
\end{thmref}
\ref{B}

将打印

1′

定理thmx环境是辅助的。其标签将通过重新定义动态确定\specialrefthmref环境重新定义\specialref为扩展到所需的数字,并重新定义与相关联的计数器thmx(不用于任何其他目的)\getrefnumber(参见的文档refcount):\edef我们得到引用的“当前值”,向其添加素数(或其他标记,在可选参数中指定),这是\unexpanded因为它可能包含在 中很危险的标记\edef

相关内容