同时对定理和命题的推论进行动态计数器

同时对定理和命题的推论进行动态计数器

在问题中推论的动态计数器Christian Hupfer 使用他的软件包给出了一个漂亮的答案xcntperchap,其中定理的推论对于每个定理得到编号 1、2、3……,如果每个定理只有一个推论,则不接受编号。

在一般的数学环境中,您可以同时得出定理和命题的推论。

我们如何扩展他的解决方案,使得定理和命题的唯一推论中没有数字?

像这样的结构

Theorem 1
  Corollary 1
  Corollary 2
Theorem 2
  Corollary 
Proposition 3
  Corollary 1
  Corollary 2
Proposition 4
  Corollary 

答案1

Christian Hupfer 再次提出了一个很好的解决方案 - 然后他决定在 Enrico Gregório 的评论之后删除它,他可能是我最不希望听到这种评论的人 - 他非常熟悉代数中的经典,这就是在 LaTeX 出现之前它们全部被排版的方式。

Hupfer 的解决方案只剩下一件事有待改进 —— 他创建了一个额外的“命题的推论”环境来实现他的目标,并且从理论上讲,没有它人们也能够做到这一点。

总之,这个解决方案以及他之前的这里是他的软件包的例子xcntperchap,对于其他排版任务非常有用。

下面是他的代码的略微改动和注释版本,主要是为了使其更容易理解。首先以同样的方式开始,只需设置准备工作,就像之前的(一个环境)解决方案一样:

\documentclass{report}
\usepackage{amsthm}

\newtheorem{teo}{Theorem}
\renewcommand{\theteo}{\arabic{teo}}
\newtheorem{prop}{Proposition}
\renewcommand{\theprop}{\arabic{prop}}

然后定义标准推论环境:

\newtheorem{col}{Corollary}[teo]
\renewcommand{\thecol}{\arabic{col}}

继续定义新添加的环境:

\newtheorem{propcol}{Corollary}[prop]
\renewcommand{\thepropcol}{\arabic{propcol}}

继续定义两个范围:

\usepackage{chngcntr}
\counterwithin*{col}{teo}
\counterwithin*{col}{prop}

以及两个计数器的跟踪:

\usepackage{xpatch}
\usepackage{xcntperchap}

\RegisterTrackCounter{teo}{col}
\RegisterTrackCounter{prop}{propcol}

现在对col和重复原始代码propcol

\makeatletter
\newif\if@resetcorollary

\AtBeginEnvironment{col}{%
  \edef\corollary@num{\ObtainTrackedValueExp{teo}{col}}%
  \ifx\corollary@num\empty
  \else
  \ifnum1=\corollary@num%
  \let\thecol\relax%
  \xpatchcmd{\@begintheorem}{\the\thm@headpunct}{}{}{}
  \addtocounter{col}{-1}%
  \fi
  \fi
}

\AtEndEnvironment{col}{%
  \if@resetcorollary
  \edef\corollary@num{\ObtainTrackedValueExp{teo}{col}}%
  \ifx\corollary@num\empty
  \else
  \ifnum1=\corollary@num%
  \setcounter{col}{0}%
  \fi
  \fi
  \fi
}

\AtBeginEnvironment{propcol}{%
  \edef\corollary@num{\ObtainTrackedValueExp{prop}{propcol}}%
  \ifx\corollary@num\empty
  \else
  \ifnum1=\corollary@num%
  \let\thepropcol\relax%
  \xpatchcmd{\@begintheorem}{\the\thm@headpunct}{}{}{}
  \addtocounter{propcol}{-1}%
  \fi
  \fi
}

\AtEndEnvironment{propcol}{%
  \if@resetcorollary
  \edef\corollary@num{\ObtainTrackedValueExp{prop}{propcol}}%
  \ifx\corollary@num\empty
  \else
  \ifnum1=\corollary@num%
  \setcounter{propcol}{0}%
  \fi
  \fi
  \fi
}
\@resetcorollarytrue
\makeatother

现在你可以使用它作为:

\begin{document}
\begin{teo}
  The first theorem
\end{teo}

\begin{col}
  The first corollary
\end{col}
\begin{col}
  The second corollary
\end{col}

\begin{teo}
  The second theorem
\end{teo}

\begin{col}
  Unique corollary to the theorem -- should have no number.
\end{col}

\begin{prop}
  A proposition
\end{prop}

\begin{propcol}
  The unique proposition corollary -- no number
\end{propcol}

\begin{teo}
The third theorem
\end{teo}

\begin{col}
  The first corollary
\end{col}
\begin{col}
  The second corollary
\end{col}

\end{document}

由于使用了不同的环境,它并不完全是我所寻找的,但尽管如此,它对于 LaTeX 在数学世界中产生的问题来说仍然是一个很好的解决方案。

相关内容