在问题中推论的动态计数器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 在数学世界中产生的问题来说仍然是一个很好的解决方案。