我遇到了一个奇怪的现象:当我编译以下代码时,章节标题和包含方程式的文本之间的间距与最初定义的不同。如您所见,第 2 章的章节标题和文本之间的间距较小(如定义的那样)。但这只会在第1章延伸一页时发生。当包含方程式的第 1 章只有一页长时(即当我注释掉最后两个方程式时),定义的间距是完整的。有人知道如何解决这个问题吗?
我的代码:
% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
% Preamble
% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
\documentclass[12pt,a4paper,twoside]{report} %openright
%Schriftart Arial - ACHTUNG: Compile with XeLaTeX (not PDFLaTeX)!
\usepackage{fontspec}
\defaultfontfeatures{Scale = MatchLowercase}
\setmainfont{Arial}[Scale = 1.0]
%Seitenlayout
\usepackage[top=2.5cm, bottom=2cm, left=2.5cm, right=2.5cm,paper=a4paper]{geometry}
%Deutsche Umlaute
\usepackage{ngerman}
%Zitierungen in der richtigen Reihenfolge
\usepackage{cite}
%Längenangaben für den Abstand zwischen zwei Absätzen.
\usepackage{parskip}
%Zeilenabstand ändern
\usepackage[onehalfspacing]{setspace}
%Farbige Texte etc
\usepackage{color}
%Graphiken und Bilder
\usepackage{graphicx}
\usepackage{subfig}
\usepackage{psfrag}
\usepackage{wrapfig}
%Tabellenumgebung
\usepackage{tabularx}
\usepackage{booktabs} %\toprule, \midrule, \bottomrule
%Mathematische Symbole und Zeichen
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{mathrsfs}
%Algorithm Package
\usepackage[ruled,vlined]{algorithm2e}
%Kopfzeile
\usepackage{fancyhdr}
%Kapitelanzeige und -platzierung im Text
\usepackage[clearempty]{titlesec}
\titleformat{\chapter}{\normalfont\fontsize{16pt}{0}\bfseries}{\thechapter.}{9pt}{}
\titleformat{\section}{\normalfont\fontsize{14pt}{0}\bfseries}{\thesection}{9pt}{}
\titleformat{\subsection}{\normalfont\fontsize{12pt}{0}\bfseries}{\thesubsection}{9pt}{}
\titlespacing*{\chapter}{0pt}{-22pt}{4pt}
%Verzeichnisse
\usepackage[notindex, nottoc, numbib]{tocbibind}
%Formatierung Inhaltsverzeichnis
\usepackage{titletoc}
\contentsmargin{2em}
\dottedcontents{chapter}[21pt]{\addvspace{15pt}\bfseries}{20pt}{9.5pt}
\dottedcontents{section}[50pt]{\addvspace{3pt}}{2.3em}{9.5pt}
\dottedcontents{subsection}[89pt]{\addvspace{3pt}}{3.2em}{9.5pt}
% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
% Formatierung der Kopfzeile
% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
\setlength{\headheight}{0.6cm}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[EL,OR]{\fontsize{8}{10} \selectfont \thepage}
\fancyhead[ER,OL]{\fontsize{8}{10} \selectfont \leftmark}
\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
\fancypagestyle{plain}{
\fancyhf{}
\fancyhead[EL,OR]{\fontsize{8}{10} \selectfont \thepage}
\fancyhead[ER,OL]{\fontsize{8}{10} \selectfont \nouppercase \leftmark}
}
% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
% Anfang von Dokumententext
% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
\begin{document}
% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
% Beginn des Inhalts
% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
\pagenumbering{arabic}
\chapter{Einleitung}
Dies ist ein Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text
\section{Mathematische Gleichungen}
Dies ist ein Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text
\begin{align}\label{eq:Fuehrungsubertragungsfunktion1}
G_w(s) = \frac{G_S(s)G_R(s)}{1+G_S(s)G_R(s)}
\end{align}
\begin{align}\label{eq:Fuehrungsubertragungsfunktion2}
G_w(s) = \frac{G_S(s)G_R(s)}{1+G_S(s)G_R(s)}
\end{align}
\begin{align}\label{eq:Fuehrungsubertragungsfunktion3}
G_w(s) = \frac{G_S(s)G_R(s)}{1+G_S(s)G_R(s)}
\end{align}
\begin{align}\label{eq:Fuehrungsubertragungsfunktion4}
G_w(s) = \frac{G_S(s)G_R(s)}{1+G_S(s)G_R(s)}
\end{align}
\begin{align}\label{eq:Fuehrungsubertragungsfunktion5}
G_w(s) = \frac{G_S(s)G_R(s)}{1+G_S(s)G_R(s)}
\end{align}
\begin{align}\label{eq:Fuehrungsubertragungsfunktion6}
G_w(s) = \frac{G_S(s)G_R(s)}{1+G_S(s)G_R(s)}
\end{align}
\begin{align}\label{eq:Fuehrungsubertragungsfunktion7}
G_w(s) = \frac{G_S(s)G_R(s)}{1+G_S(s)G_R(s)}
\end{align}
\begin{align}\label{eq:Fuehrungsubertragungsfunktion8}
G_w(s) = \frac{G_S(s)G_R(s)}{1+G_S(s)G_R(s)}
\end{align}
\begin{align}\label{eq:Fuehrungsubertragungsfunktion9}
G_w(s) = \frac{G_S(s)G_R(s)}{1+G_S(s)G_R(s)}
\end{align}
\begin{align}\label{eq:Fuehrungsubertragungsfunktion10}
G_w(s) = \frac{G_S(s)G_R(s)}{1+G_S(s)G_R(s)}
\end{align}
\begin{align}\label{eq:Fuehrungsubertragungsfunktion11}
G_w(s) = \frac{G_S(s)G_R(s)}{1+G_S(s)G_R(s)}
\end{align}
\chapter{Kapitelüberschrift}
Text
\section{Überschrift 2}
Text
\subsection{Überschrift 3}
Text
\subsection{Überschrift 3}
Text
\section{Überschrift 2}
\end{document}
图 1:第 1 章扩展一页,第 1 章间距关闭(0.9 厘米):
图 2:第 1 章扩展一页,第 2 章间距保持不变(0.7 厘米):
答案1
这是正常现象...但是,您使用的一个软件包使这种情况变得更加严重:设置空间(详情见下文)。另请注意,根据 egreg:
连续对齐环境是一种大罪。
您的第一页上就有很多。:-) 您通常会使用一个这样的环境,其中每一行都以 终止\\
,最后一行除外;或者几个这样的环境,但前提是它们之间有文本。
我首先会从一般角度解释导致您观察到的现象的“正常行为”,因为它适用于大多数文档。有许多可能的补救措施,我也会一般性地描述(这个主题很广泛),但最后我会展示如何查找和修复特定文档中最成问题的部分。
您所观察到的是由于 LaTeX 标准类\flushbottom
默认在模式下工作,这意味着 TeX 被告知要从上到下完全填充每页的正文区域(在章节、部分或文档的末尾,隐式填充\vfill
剩余空间,因此这些页面也遵守规则:它们是已完全填满。
当你的第一章有两页时,由于缺乏良好的分页点,你的第一页“不够满” - 换句话说,它太短了 - 因此其上的垂直空间必须延伸以填满所有可用空间,TeX 会正确地警告你这一点:
\output 处于活动状态时,发生 \vbox 未满(不良 1629)[1]
不要忽略警告!由于\vfill
第一章末尾隐含着警告,所以文档的第二页没有问题,这与缩短第一章以使其适合第一页时发生的情况相同。
这个问题有几种解决方案(或者说几类解决方案):
安排材料以避免页面不够满(这可以通过添加合法的页面断点或使其中一些更可取、为页面上的垂直空间添加可伸缩性、重新排列材料、更改布局、字体...有很多旋钮,其中一些最好在文档准备的最后阶段使用,否则您很可能要在进一步修改文档时再次重做同样的工作)。
\newpage
使用或强制分页,不进行垂直对齐\clearpage
。注意:这可能看上去很糟糕。
如果您的文档布局或字体发生了变化,或者您之前修改了材料,则手动添加的分页符可能会出现在相当不合适的位置。
与上文相同:应简洁地使用,仅在真正有意义的地方(特殊页面布局......)以及在文档准备的最后阶段使用。
告诉 LaTeX 您不想让页面垂直对齐。这可以通过 来实现
\raggedbottom
,例如在序言中。当然,这会产生严重的排版问题,因为文档的页面将不再具有相同的高度。请参阅这里了解\flushbottom
和之间的区别\raggedbottom
。
一般情况下,第一类方案更可取。一种有效的方法是在经常出现的垂直空间中添加少量、几乎不可察觉的可拉伸性或可收缩性。例如,的默认值为\parskip
,0pt plus 1pt
这意味着在任何两个连续的段落之间,都有一个可拉伸点(最大值)可以帮助实现页面目标(即文本主体的高度)。
\chapter
您可以在定义、等之前或之后的间距时添加一些“垂直可拉伸或收缩的小块”,以帮助实现页面目标。\section
例如,附录中的一个例子标题安全文档内容如下:
\titlespacing{\section}{12pc}{1.5ex plus .1ex minus .2ex}{1pc}
这样可以为章节标题前的垂直空间提供自然长度,1.5ex
并具有0.1ex
可拉伸性和0.2ex
可收缩性(可以超过指定的可拉伸量,但是\vbox
如果发生这种情况,TeX 不会愿意这样做并且会给出未满警告;不能超过最大可收缩性)。
其他可以增加垂直间距灵活性并帮助 TeX 在页面之间找到良好断点的有效方法是:
使用 TeX 的
\smallskip
、\medskip
和\bigskip
命令代替\vspace{〈dimen〉}
(〈dimen〉 是刚性长度)。当然,您可以指定\vspace
弹性长度(TeX 用语中的 〈skip〉 ),但\smallskip
、\medskip
和\bigskip
非常方便,而且经常使用。使用
\smallbreak
、\medbreak
和:这些与、和\bigbreak
类似,但它们还声明相应位置(段落末尾)是页面之间的稍微、中等或相当理想的断点(对应值分别为 -50、-100 和 -200);\smallskip
\medskip
\bigskip
\penalty
使用显示公式、2 个列表环境或类似的(
\topsep
和/或\partopsep
粘合参数有助于垂直拉伸和收缩;当在垂直模式下启动列表环境(如、等)时\partopsep
是否会添加额外的空间[这意味着大多数时候:前面有一个空白行]);\topsep
itemize
enumerate
避免使用占用大量垂直空间(例如图像和表格)并直接包含在文档流中的不可破坏元素(框),即:不在
figure
或table
环境中;这也适用于minipage
环境和\parbox
命令,不可破坏tcolorbox
或类似的环境等:所有这些,如果它们恰好落在页面的底部,则如果不过度拉伸页面上的垂直空间,就无法实现垂直对齐的任务,并且会导致与您在使用时在问题中遇到的相同的问题\flushbottom
。
你可能还想阅读David Carlisle 的这个回答关于一般的“坏盒子”(水平或垂直的)。
高级用户可能会对 TeXbook 的第 15 章感兴趣(TeX 如何将行变成页),特别是这个\tracingpages
参数可以让我们理解为什么 TeX 选择在某个给定点分页(当使用时\tracingpages=1
,TeX 会将其所有页面成本计算打印到日志文件中;这些计算解释了为什么根据 TeX 的规则,所选的断点是最佳可行的断点)。
您的文档中存在的问题
显示公式周围的间距
通常情况下,由于第一页有许多显示公式,TeX 应该非常容易填充。事实上,如上所述,显示公式的前面和后面通常有可以拉伸或收缩的垂直空间。然而,检查第一页时会\showoutput
发现它有很多胶水\abovedisplayskip
团\belowdisplayskip
,这很正常,因为所有的align
环境都是如此,但是这些胶块都是完全坚硬的!
...\glue(\belowdisplayskip) 12.40997
...\penalty 10000
...\glue(\abovedisplayskip) 12.40997
因此,它们不会以任何方式帮助 TeX 破坏页面。使用更标准的文档,例如:
\documentclass{report}
\usepackage{amsmath}
\begin{document}
\showthe\abovedisplayskip
\showthe\belowdisplayskip
\showthe\abovedisplayshortskip
\showthe\belowdisplayshortskip
\end{document}
一个人进入终端:
> 10.0pt plus 2.0pt minus 5.0pt.
l.5 \showthe\abovedisplayskip
> 10.0pt plus 2.0pt minus 5.0pt.
l.6 \showthe\belowdisplayskip
> 0.0pt plus 3.0pt.
l.7 \showthe\abovedisplayshortskip
> 6.0pt plus 3.0pt minus 3.0pt.
l.8 \showthe\belowdisplayshortskip
因此,所有这些与显示公式相关的垂直空间通常都是可拉伸的,除 之外的所有垂直空间也是可收缩的。但在您的文档中却不是这样!我想说这是您的主要问题,甚至比和\abovedisplayshortskip
周围缺乏灵活性更重要,可以按照我上面所说的方式使用或从 进行排列(见下文)。\chapter
\section
\titlespacing
\titlespacing*
titlesec
为什么显示公式的长度要严格?因为设置空间包。它破坏了 LaTeX 默认具有的所有良好的印刷设置。:-( 如果你注释掉你的\usepackage[onehalfspacing]{setspace}
,你会看到\abovedisplayskip
并\belowdisplayskip
会重新获得可拉伸性和可收缩性:
...\glue(\belowdisplayskip) 12.0 plus 3.0 minus 7.0
...\penalty 10000
...\glue(\abovedisplayskip) 12.0 plus 3.0 minus 7.0
\showoutput
(使用之前\chapter{Einleitung}
和\hideoutput
之后获得的输出\chapter{Kapitelüberschrift}
)
\showthe\abovedisplayskip
注意:您还可以使用和在终端上打印值\showthe\belowdisplayskip
。
如果你真的必须使用设置空间(我知道这种情况会发生......),您可以添加:
\setdisplayskipstretch{}
在您的\usepackage[onehalfspacing]{setspace}
行之后,如下图所示Mico 的回答在这里\(above|below)display[short]skip
。这样就避免了 故意破坏显示公式周围四种空间 ( ) 的可伸缩性和可收缩性setspace
。当然,这可能会使相关空间有点可伸缩——我留给您自己去欣赏它的外观吧。
更一般地考虑你的 LaTeX 代码,请记住不要加载超出你实际需要的包。
分段命令周围的间距
正如我所说,由于您使用标题安全包中,在分段命令之前或之后的垂直空间中添加一些可拉伸性和/或可收缩性很容易。例如,您可以将此行替换为:
\titlespacing*{\chapter}{0pt}{-22pt}{4pt}
和:
\titlespacing*{\chapter}{0pt}{-22pt plus 0.1ex minus 0.1ex}{4pt plus .1ex}
\titlespacing*{\section}{0pt}{2.3ex plus 0.7ex minus .15ex}{1.2ex plus .1ex}
增加一些弹性。你可以对较低级别做类似的事情。但同样,在你的第一页中,主要问题是由僵硬\abovedisplayskip
和\belowdisplayskip
长度引起的,因为您使用的是设置空间包裹。
脚注
查看可选参数
\pagebreak
,或者更一般地,\penalty
在垂直模式下使用时 TeX 的命令。那些在
\[
和\]
、amsmath
'salign
或gather
环境等之间的。提醒:切勿在源文件中的 之前放置空行\[
;显示公式应该中断 Donald E. Knuth 所称的到目前为止的段落。在 之后继续段落是完全正确的\]
,并且不在源文件中留下任何空行(否则,您将开始一个新段落)。