定理的高级分层计数

定理的高级分层计数

我想用分层计数(顶层计数器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中手动增加?mn

  • 您可以创建带有选项的环境,那么当打开新的定理环境时,您可以传递编号选项吗?

答案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

只需要环境theoremsubtheorems和,我相信它的行为完全按照要求进行。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}

在此处输入图片描述

相关内容