考虑以下 MWE。我有一章带有横向模式的表格。加上第二章,这会产生三页。但是,在添加\topskip 0pt
到landscape
环境中时,会在它后面添加一个空白页(实际上是两个,因为新章节从奇数页开始)。
\documentclass{book}
\usepackage{lscape}
\usepackage{array}
\begin{document}
\chapter{Table Test}
\begin{landscape}
\topskip0pt % <<<< Without this line, no blank page.
\begin{table}[htb!]
\centering
\begin{tabular}{>{\raggedright}p{3cm} >{\raggedright}p{3cm}}
\hline
1 & 2\tabularnewline
1 & 2\tabularnewline
1 & 2\tabularnewline
1 & 2\tabularnewline
1 & 2\tabularnewline
1 & 2\tabularnewline
1 & 2\tabularnewline
1 & 2\tabularnewline
1 & 2\tabularnewline
1 & 2\tabularnewline
1 & 2\tabularnewline
1 & 2\tabularnewline
1 & 2\tabularnewline
1 & 2\tabularnewline
\hline
\end{tabular}
\end{table}
\end{landscape}
\chapter{Potrait again}
Test2
\end{document}
答案1
该问题与软件包无关lscape
:事实上,您可以使用以下简单程序重现它
\documentclass[a4paper,twoside]{article}
\begin{document}
A\par
\clearpage
% \setlength{\topskip}{0pt} % uncomment this line to see it happen
B\par
\clearpage
\cleardoublepage
C\par
\end{document}
(取消注释注释行即可看到其发生)。
我做了一些调查,罪魁祸首似乎是\@doclearpage
LaTeX 输出例程中的宏,更准确地说是以下代码行
\setbox\@tempboxa\vsplit\@cclv to\z@ \unvbox\@tempboxa
(latex.ltx
最新版本中的第 6696 行),其目的是将“任何剩余的非盒子(写入、特殊等)”发送回主垂直列表,如注释中所述ltoutput.dtx
。不幸的是,如果\topskip
胶合为零,则由命令\vbox{}
插入的\clearpage
是也分裂了,因为它做在这种情况下,适合零点;因此,该框返回到主垂直列表,在那里它导致随后的\cleardoublepage
命令插入两个额外的页面。
说实话,我没有检查所有的细节,但下面的程序可以用来或多或少地确认上述分析:
\documentclass[a4paper,twoside]{article}
\makeatletter
\def\clearpage{%
\ifvmode
\ifnum \@dbltopnum =\m@ne
\ifdim \pagetotal <\topskip
\hbox{\special{Comment: A}}%
\fi
\fi
\fi
\newpage
\write\m@ne{}%
\vbox{\special{Comment: B}}%
\penalty -\@Mi
}
\def\cleardoublepage{\clearpage\if@twoside \ifodd\c@page\else
\hbox{\special{Comment: C}}\newpage
\if@twocolumn\hbox{\special{Comment: D}}\newpage\fi\fi\fi}
\makeatother
\showboxbreadth = 1000
\showboxdepth = 10
% \tracingoutput = 1
\begin{document}
A\par
\clearpage
% \setlength{\topskip}{0pt}
B\par
\clearpage
\showlists
% \vbox{} % <<< HERE <<<
\cleardoublepage
C\par
\end{document}
它重新定义了\clearpage
和\cleardoublepage
命令,以便它们生成可以在跟踪列表中明确识别的框(如果您收到一些警告,提示“忽略非 PDF 特殊内容!”,请不要担心)。首先按原样运行它,然后查看生成的跟踪\showlists
;然后取消注释以下行:
% \setlength{\topskip}{0pt}
\vbox{}
然后再次查看记录:您将看到结果与在源文件中 指示的位置处有一个命令一样% <<< HERE <<<
。
取消注释\tracingoutput = 1
以获取进一步的诊断信息。