我的问题涉及下面粘贴的最小示例。我想将第二个定理(带有 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
环境是辅助的。其标签将通过重新定义动态确定\specialref
。thmref
环境重新定义\specialref
为扩展到所需的数字,并重新定义与相关联的计数器thmx
(不用于任何其他目的)\getrefnumber
(参见的文档refcount
):\edef
我们得到引用的“当前值”,向其添加素数(或其他标记,在可选参数中指定),这是\unexpanded
因为它可能包含在 中很危险的标记\edef
。