对于我的论文,我想将定理类环境编号为(pagenumber).(counter)
,其中counter
是所有环境共享的计数器,每页重新启动一次。例如,在第 86 页,我会有
定义 86.1。啊
定理 86.2。贝比
备注86.3。加拿大
然后,在第 87 页,
推论87.1。滴滴
提案 87.2。电竞
我尝试通过设置amsthm
和来实现这一点,并将所有其他定理环境定义为定理的兄弟。在这样做时,我注意到有时计数器是错误的,尤其是当定理出现在页面顶部附近时。考虑以下 MWE:thmtools
\declaretheorem[numberwithin=page]{theorem}
\documentclass{memoir}
\usepackage[height=5cm]{geometry}
\usepackage{amsthm}
\usepackage{thmtools}
\usepackage{lipsum}
\declaretheorem[numberwithin=page]{theorem}
\begin{document}
\begin{theorem}
Aaa
\end{theorem}
\lipsum[1]
\begin{theorem}
Bbb
\end{theorem}
\begin{theorem}
Ccc
\end{theorem}
\lipsum[1]
aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
aa aa aa aa aa aa
\begin{theorem}
Ddd
\end{theorem}
\end{document}
这里,第 1 页上的定理编号正确,但第 2 页和第 3 页上的定理编号不正确(1.3 和 3.0 应该分别编号为 2.1 和 3.1)。当定理出现在页面下方时,问题就消失了。
这个问题已经问过了这里,但那里的解决方案似乎与不兼容amsthm
。
知道如何修复这个问题吗?
答案1
我不确定这是否是一种合理的风格,但论点是你的。
我的解决方案涉及perpage
和needspace
。
表示形式
\thetheorem
为\pageref{theorem@\theglobaltheorem}.\arabic{theorem}
。\pageref
需要使用 是因为在编译期间任何时候都无法知道页码,并且只有在上次运行中收集的引用是安全的(如果引用已更改,您将收到警告)。在发出合适的信号后,计数器
globaltheorem
会增加;我使用,但也可能被使用。\label
postheadhook
preheadhook
该
theorem
计数器被声明为“每页”。有一点复杂,因为计数器会增加前该定理实际上是排版的,因此我使用
preheadhook
来确保至少有一行可用,以克服这个问题。您可以检查,如果\needspace{\baselineskip}
省略,第 2 页上的注释将编号为 2.3,而不是预期的 2.1。
\documentclass{memoir}
\usepackage[a6paper]{geometry}
\usepackage{perpage}
\usepackage{amsthm}
\usepackage{thmtools}
\usepackage{needspace}
\declaretheorem[
name=Theorem,
preheadhook=\needspace{\baselineskip},
postheadhook=\label{theorem@\theglobaltheorem}\stepcounter{globaltheorem},
]{theorem}
\MakePerPage{theorem}
\newcounter{globaltheorem}
\renewcommand{\thetheorem}{\pageref{theorem@\theglobaltheorem}.\arabic{theorem}}
\declaretheorem[
style=definition,
sibling=theorem,
name=Definition,
preheadhook=\needspace{\baselineskip},
postheadhook=\label{theorem@\theglobaltheorem}\stepcounter{globaltheorem},
]{definition}
\declaretheorem[
style=definition,
sibling=theorem,
name=Remark,
preheadhook=\needspace{\baselineskip},
postheadhook=\label{theorem@\theglobaltheorem}\stepcounter{globaltheorem},
]{remark}
\begin{document}
\begin{theorem}
Aaa
\end{theorem}
\begin{definition}
Bbb
\end{definition}
\vspace{20\baselineskip}
\begin{remark}
Ccc
\end{remark}
\begin{theorem}
Ddd
\end{theorem}
\end{document}