我不知道以下问题是否与已提出的任何其他问题相关。我的问题和最低限度看起来非常简单。
\documentclass{book}
\usepackage{hyperref}
\usepackage{amsthm}
\usepackage{thmtools}
\declaretheorem{theorem}
\begin{document}
\ldots \\[18cm] \ldots
% Insert another \ldots here.... dots remain on previous page, page number for theorem is corrent
% \ldots
\begin{theorem}
\label{th:1}
\ldots
\end{theorem}
Page of theorem: \pageref{th:1}.
\end{document}
如您所见,\pageref
引用了错误的页面(1 而不是 2)。如果包括注释\ldots
,则引用是正确的。也许一些专业知识可以帮助我理解这里发生的事情。
提前致谢!
答案1
这不应该发生。然而它似乎发生了,这绝对是一个错误功能。
如何补救?不要在旁边输入标签\begin{theorem}
,而是在语句中的第一个单词后面输入。我知道这是一个糟糕的解决方法。
\documentclass{book}
\usepackage{amsthm}
\usepackage{thmtools}
\declaretheorem{theorem}
\usepackage{hyperref}
\begin{document}
\ldots \\[18cm] \ldots
\begin{theorem}
Text\label{th:1} of the theorem
\end{theorem}
Page of theorem: \pageref{th:1}.
\end{document}
答案2
情况(LaTeX 发生了什么)
当 LaTeX 决定分页符的最佳位置时,您对该页面的引用就会被设置。
LaTeX 通常会先读取下一页的大部分内容,然后再决定分页符应设在何处。但这意味着,在将扩展的文本/格式放到页面上之前,您认为属于下一页的标记会被读取和扩展。本质上,引用标记的读取时间早于分页符的设置时间。
此过程可产生最佳的分页效果,但有时页面引用效果不太好。
好消息是,这通常仅适用于pageref
靠近页面顶部的情况(足够接近,以至于在将引用写入文件时会将其视为上一页aux
)。要解决这个问题,您可以强制分页。
虽然这看起来不是最理想的,但当您的文档处于最后阶段并且您确定分页符将在何处发生时,您可以纠正它。
我有太多潜在的页面引用,无法手动修复
我必须考虑一下。但我认为有几种方法可以技巧LaTeX 可以更好地分配页面引用。
- 您可以提供一个环绕功能
\label
,检查页面上剩余的空间,并在页面结束前强制分页。我不建议仅仅为了使页码引用正确而这样做;这样做可能会破坏许多其他功能并抢占更优化的解决方案。 - 您可以分析 LaTeX 代码
\label
并做一些技巧,例如确定目录章节和部分的正确页码。这需要使用\noexpand
和\save
。我不确定我是否能写出这样的东西。 - 更好地了解 TeX 和 LaTeX 如何做出页面决策。您需要让 LaTeX 在定理之前设置一个好的分页符。作为作者,您可以这样做。例如,在您上面概述的情况下,您可以在定理
\vspace{\fill}\par\hspace*{\fill}
前再添加一行。这足以欺骗 LaTeX 认为它已经接近分页符的良好点。显然,这不是您想在每个段落前做的事情。
我会选择方法 3。最初你可能不喜欢它。但是,如果你提供的 MWE 更接近于你认为 LaTeX 等待太长时间来决定分页符应该落在哪里的上下文,我(或其他人)可以指出如何更好地编写代码来解决这个问题。
尝试运行此版本的文档:
\documentclass{book}
\usepackage[showframe,textheight=550pt,textwidth=345pt]{geometry}
\usepackage{hyperref}
\usepackage{amsthm}
\usepackage{thmtools}
\declaretheorem{theorem}
\usepackage{lipsum}
\usepackage{blindtext}
\begin{document}
\Blindtext
\Blindtext
\Blindtext
\Blindtext
\Blindtext
\begin{theorem}
\label{th:1}
\ldots
\end{theorem}
Page of theorem: \pageref{th:1}.
\end{document}
这看起来并不完全像您的文档,但我已经设置了textwidth
和textheight
以匹配您正在做的事情。因此,关于如何以及何时进行分页的决定应该是相同的。请注意,在第 6 页上,页面底部留有一点空间。这就是您的罪魁祸首。LaTeX 看到这一点并决定页面上还有空间需要填充。直到它读完您的文档后,\label
它才决定必须忍受那个空白。
您可能想要查看的本网站其他页面包括
我确信@DavidCarlisle(以及其他人)看到这个时会提出比我更好的建议。