我想用分层计数(顶层计数器n
、子层计数器m
)对连续定理进行编号,以便我可以为每个定理从以下选项中进行选择:
Theorem n.
(增加 n 计数器,重置 m 计数器)Theorem n.m.
(增加 n 计数器,重置 m 计数器)Theorem n.m.
(增加 m 计数器)
允许某事
定理1。
定理 2.1
定理 2.2。
定理3。
定理 3.1。
事实上,可以进行相当自由的编号,具有多个级别和自定义计数样式(阿拉伯字母,字母,...)。
有一些相关的答案:
但所有这些都定义了新的定理环境,因此您必须对不同的编号选项使用不同的环境。 问题是我已经有一些定理环境,我想以相同的方式对所有定理环境使用此计数方案(目前,它们只是使用相同的计数器)。
那么,有没有办法实现这一点,而不需要为每个编号选项创建每个定理环境的新版本?
如果不是,那么结论就是,如果你想为定理组合多个独立的样式参数(例如编号方式、标题/正文字体等),你必须为每种组合创建一个自己的环境。这会产生很多冗余,并且很难维护。是这样吗?
思路:
是否有可能有一个计数器可以通过,
\renewtheorem{th}[counter]{Theorem}
其计数像和可以在和m.n
中手动增加?m
n
您可以创建带有选项的环境,那么当打开新的定理环境时,您可以传递编号选项吗?
答案1
这是一个环境,其中每个定理都用一个额外的数字来编号,该数字附加在前一个定理编号上。如果您想要一个Theorem 2.1
没有前一个的Theorem 2
,只需\stepcounter{theorem}
在环境开始之前添加即可。
\documentclass{article}
\newtheorem{theorem}{Theorem}
\newcount\savedtheorem
\newenvironment{subtheorems}{%
\savedtheorem=\value{theorem}%
\edef\prevthetheorem{\thetheorem}%
\setcounter{theorem}{0}%
\renewcommand\thetheorem{\prevthetheorem.\arabic{theorem}}%
}
{%
\setcounter{theorem}{\savedtheorem}%
}
\begin{document}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit,
vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur dictum
gravida mauris.
\begin{theorem}
Some theorem.
\end{theorem}
\begin{subtheorems}
\begin{theorem}
Some subtheorem.
\end{theorem}
\begin{theorem}
Some subtheorem.
\end{theorem}
\begin{subtheorems}
\begin{theorem}
Some sub-subtheorem.
\end{theorem}
\begin{theorem}
Some sub-subtheorem.
\end{theorem}
\end{subtheorems}
\end{subtheorems}
\begin{theorem}
Some theorem.
\end{theorem}
\end{document}
答案2
theorem
下面是从头开始创建环境的最小实现。theorem
环境采用一个可选参数,它实际上代表一个计数器(默认值为theorem
,但我还定义了subtheorem
)。除此之外,无论您使用的是“常规定理”还是“子定理”,环境的构造都是相同的:
\documentclass{article}
\usepackage{lipsum}
\newcounter{theorem}
\newcounter{subtheorem}[theorem]
\renewcommand{\thesubtheorem}{\thetheorem.\arabic{subtheorem}}
\newenvironment{theorem}[1][theorem]
{\refstepcounter{#1}%
\par\addvspace{\topsep}%
\noindent\textbf{Theorem~\csname the#1\endcsname.}\itshape%
\quad\ignorespaces}
{\par\addvspace{\topsep}%
\ignorespacesafterend}
\begin{document}
\lipsum[2]
\begin{theorem}
Some theorem.
\end{theorem}
\begin{theorem}[subtheorem]
Some subtheorem.
\end{theorem}
\begin{theorem}[subtheorem]
Some subtheorem.
\end{theorem}
\begin{theorem}
Some theorem.
\end{theorem}
\begin{theorem}[subtheorem]
Some subtheorem.
\end{theorem}
\end{document}
当然,如果您愿意,您可以添加更多级别,或者修改环境theorem
以满足您的需要。
答案3
只需要环境theorem
、subtheorems
和,我相信它的行为完全按照要求进行。subtheorems*
带星号的变体subtheorems*
——前一个定理的子定理
未加星号的变体subtheorems
——具有全新母数的子定理。
\documentclass{article}
\pagestyle{empty}
\newtheorem{theorem}{Theorem}
\newtheorem{theorem@ii}{Theorem}[theorem]
\makeatletter
\newenvironment{subtheorems}
{%
\let\theorem\theorem@ii
\stepcounter{theorem}
}{}
\makeatother
\makeatletter
\newenvironment{subtheorems*}
{%
\let\theorem\theorem@ii
}{}
\makeatother
\begin{document}
\begin{theorem}ONE\end{theorem}
\begin{theorem}TWO\end{theorem}
\begin{subtheorems}
\begin{theorem}THREE---ONE\end{theorem}
\begin{theorem}THREE---TWO\end{theorem}
\end{subtheorems}
\begin{theorem}FOUR\end{theorem}
\begin{subtheorems*}
\begin{theorem}FOUR---ONE\end{theorem}
\begin{theorem}FOUR---TWO\end{theorem}
\end{subtheorems*}
\end{document}