我正在写一篇与 llncs 类有关的文章,并且试图在不同的章节中重复一个定理两次。
例如,
第 1 部分
定理 1.1。 让...
然后在论文的后面,我想通过重印它来回顾这个定理
第 4 部分
我们回想一下定理 1.1:
定理 1.1。 让...
我使用了 [1,2,3,4,5] 中提出的解决方案,但它们似乎与 llncs 类发生冲突且不起作用。有没有办法将这些解决方案用于 llncs 类?
[1]-如何重复定理编号?
[2]-使用 LaTeX,如何在论文中用相同的定理编号重新表述定理?
[3]-回顾一个定理
[4]-重复定理
[5]-如何自动重复所有定理?
答案1
该llncs
课程使用不同的方式定义类似定理的环境,因此其他建议的方法不起作用并不奇怪。 这两种amsthm
解决ntheorem
方案都行不通。
这里我假设重复定理先于重复。我定义了一个reptheorem
存储文本的新环境;它有一个强制参数,还设置了\label
同名的。
在示例中,我还表明可选参数是被尊重的。
\documentclass[envcountsect]{llncs}
\usepackage{environ}
\newcommand{\repeattheorem}[1]{%
\begingroup
\renewcommand{\thetheorem}{\ref{#1}}%
\expandafter\expandafter\expandafter\theorem
\csname reptheorem@#1\endcsname
\endtheorem
\endgroup
}
\NewEnviron{reptheorem}[1]{%
\global\expandafter\xdef\csname reptheorem@#1\endcsname{%
\unexpanded\expandafter{\BODY}%
}%
\expandafter\theorem\BODY\unskip\label{#1}\endtheorem
}
\begin{document}
\section{Title}
\begin{reptheorem}{foo}[Somebody]
Let $x$ be a foo. Then $x$ is also a baz.
\end{reptheorem}
\section{Another}
\repeattheorem{foo}
\end{document}
评论中询问的一项功能促使为这项工作编写“更现代的代码”。
\documentclass[envcountsect]{llncs}
\usepackage{amsmath}
\newcommand{\replabel}{\label} % will be redefined in restatements
\ExplSyntaxOn
\NewDocumentCommand{\repeattheorem}{m}
{
\group_begin:
\renewcommand{\thetheorem}{\ref{#1}}
\renewcommand{\replabel}[1]{\tag{\ref{##1}}}
\prop_item:Nn \g_reptheorem_prop { #1 }
\endtheorem
\group_end:
}
\NewDocumentEnvironment{reptheorem}{m+b}
{
\prop_gput:Nnn \g_reptheorem_prop { #1 } { \theorem #2 \endtheorem }
\theorem#2\unskip\label{#1}\endtheorem
}{}
\prop_new:N \g_reptheorem_prop
\ExplSyntaxOff
\begin{document}
\section{Title}
\begin{reptheorem}{foo}[Somebody]
Let $x$ be a foo. Then $x$ is also a baz.
\begin{equation}\replabel{fooeq}
1=1
\end{equation}
with an equation.
\end{reptheorem}
\section{Another}
\repeattheorem{foo}
\end{document}
在需要重复的定理中,方程的标签(强制性)应设置为\replabel
。这样,我们可以将含义改为使用\tag
。\label
不能使用 命令,因为amsmath
( 的必要性)会将显示中\tag
的含义改回。\label