这是其中一种情况,我尝试了一段时间,想出一个可以演示问题的最小示例,但我做不到。我所能提供的只是主文档的问题行为,所以我希望你能耐心等待。
本质上,我使用titlesec
它来自定义标题;并pdfpages
包含 PDF 页面。我的结构如下:
\includepdf{...}
\cleardoublepage
\tracingpages=1
mysection*{Section X} \tracingpages=0
% rest of content...
当它像这样时,一切都很好,我可以确认所有部分都位于页面上的同一位置(编辑:对\tracingpages
日志的一个很好的解释是#60213 - 我如何创建仅包含不同部分的图形章节?):
$ grep '^%' mydocument.log
%% goal height=591.5302, max depth=5.5
% t=14.4 g=591.5302 b=10000 p=0 c=100000#
% t=-10.76009 g=591.5302 b=10000 p=-300 c=100000#
% t=35.31354 plus 0.15234 g=591.5302 b=10000 p=0 c=100000#
%% goal height=591.5302, max depth=5.5
% t=0.0 g=591.5302 b=10000 p=0 c=100000#
% t=14.4 g=591.5302 b=10000 p=0 c=100000#
% t=-10.76009 g=591.5302 b=10000 p=-300 c=100000#
% t=35.31354 plus 0.15234 g=591.5302 b=10000 p=0 c=100000#
%% goal height=591.5302, max depth=5.5
% t=14.4 g=591.5302 b=10000 p=0 c=100000#
% t=-10.76009 g=591.5302 b=10000 p=-300 c=100000#
% t=35.31354 plus 0.15234 g=591.5302 b=10000 p=0 c=100000#
%% goal height=591.5302, max depth=5.5
% t=14.4 g=591.5302 b=10000 p=0 c=100000#
% t=-10.76009 g=591.5302 b=10000 p=-300 c=100000#
% t=35.31354 plus 0.15234 g=591.5302 b=10000 p=0 c=100000#
因此,所有部分都结束于顶部位置 t=35.31354,并且它们确实对齐了。
问题是,有时\cleardoublepage
会插入空白页两次。如果包含的 pdf 以奇数页结束,则\cleardoublepage
正确插入空白页,新部分从下一个奇数页开始。如果包含的 pdf 以偶数页结束,则我在(下一个)奇数页上得到空白页;\cleardoublepage
显然会选择它,并插入另一个偶数页 - 并且新部分从(下一个 +2)奇数页开始。
因此,如果我\cleardoublepage
从这样的位置删除,那么下一个“第 X 节”将在 PDF 完成后从下一页开始,并且位于奇数页,正如预期的那样 - 但现在标题在垂直方向上略有错位(:/
);以下是日志报告的内容:
%% goal height=591.5302, max depth=5.5
% t=14.4 g=591.5302 b=10000 p=0 c=100000#
% t=-10.76009 g=591.5302 b=10000 p=-300 c=100000#
% t=35.31354 plus 0.15234 g=591.5302 b=10000 p=0 c=100000#
%% goal height=591.5302, max depth=5.5
% t=0.0 g=591.5302 b=10000 p=0 c=100000#
% t=14.4 g=591.5302 b=10000 p=0 c=100000#
% t=-10.76009 g=591.5302 b=10000 p=-300 c=100000#
% t=35.31354 plus 0.15234 g=591.5302 b=10000 p=0 c=100000#
# NOTE NO 'goal height' HERE!!
% t=40.68004 plus 4.0 minus 6.0 g=591.5302 b=10000 p=0 c=100000#
% t=15.51996 plus 4.0 minus 6.0 g=591.5302 b=10000 p=-300 c=100000#
% t=61.59358 plus 4.15234 minus 6.0 g=591.5302 b=10000 p=0 c=100000#
%% goal height=591.5302, max depth=5.5
% t=14.4 g=591.5302 b=10000 p=0 c=100000#
% t=-10.76009 g=591.5302 b=10000 p=-300 c=100000#
% t=35.31354 plus 0.15234 g=591.5302 b=10000 p=0 c=100000#
因此显然列出的第三部分是有问题的部分:
- 没有
%% goal height
——好像新的一页从未开始过; - 报告的第一个最高排名是
40.68004 plus 4.0 minus 6.0
,与其他排名不同,为 14.4 - 然后顶部似乎“重置”为 15.51996 - 但它需要在 -10.76009 上才能像其他的一样对齐。
对我来说,有问题的部分看起来像一种状态,就好像我们“目前”在一张空白页上;但乳胶仍然认为它不是一张新页面。
请注意,我不热衷于使用\vspace{-Xpt}
或类似于手动更正的方法,因为我必须手动调整值,并且主文档需要几分钟才能构建......(并且我如何保证所有最终出现问题的部分都会以相同的量错位?)
那么有没有一个我可以使用命令,可以“重置”当前页面,以便将“顶部位置”重置为默认值(作为副作用,我希望如果你在半排版的页面上使用这样的命令,“光标”基本上会向上移动,并排版在现有内容上)
PS:作为一项实验,我尝试从以下来源获取最后的陈述\newpage
:
$ texdef -t latex -c book \newpage -f
\newpage is defined by (La)TeX.
\newpage:
macro:->\if@noskipsec \ifx \@nodocument \relax \leavevmode \global \@noskipsecfalse \fi \fi \if@inlabel \leavevmode \global \@inlabelfalse \fi \if@nobreak \@nobreakfalse \everypar {}\fi \par \vfil \penalty -\@M
...并将它们添加到有问题的位置\cleardoublepage
,希望它们可以在不破坏页面的情况下“重置”页面 - 但是,即使只是\penalty -\@M
在有问题的位置插入一个新的空白页(并且\leavevmode
在同一位置也没有采取任何措施来纠正这种情况)
答案1
好的,FWIW(没有适当的 MWE),我解决了我的问题\unskip
(因为我听说某处它会重置跳过),并且\vspace*
- 但是“重置顶部”命令的问题仍然存在。
首先,我尝试插入一个 ,\unskip
而不是有问题的\cleardoublepage
; ,这产生了“有问题的”页面部分测量值:
% t=28.68004 g=591.5302 b=10000 p=0 c=100000#
% t=3.51996 g=591.5302 b=10000 p=-300 c=100000#
% t=49.59358 plus 0.15234 g=591.5302 b=10000 p=0 c=100000#
因此,我得到了一个3.51996
(很好,没有plus
或minus
组件);并且为了正确对齐,我应该有-10.76009
;所以我需要 3.51996-(-10.76009)向上偏移,所以我只需输入这个序列而不是有问题的\cleardoublepage
:
...
\unskip
\vspace*{-14.28pt}
...
...现在(最终)页面尺寸为:
% t=14.40004 g=591.5302 b=10000 p=0 c=100000#
% t=-10.76004 g=591.5302 b=10000 p=-300 c=100000#
% t=35.31358 plus 0.15234 g=591.5302 b=10000 p=0 c=100000#
只有 0.0004 pt 的差异,而且我视觉上看不出来 - 所以我对此没意见。
另一件事是,提到的\mysection
实际上是一个titlesec
自定义切片命令;还有另一件我上面没有提到的事情是,该序列更准确地看起来像这样:
\newcommand{\SetMyVar}[1]{%
\def\MyVar{#1} %
}
...
\includepdf{...}
\cleardoublepage
\SetMyVar{1}
\tracingpages=1
mysection*{Section X} \tracingpages=0
....
(是的,\SetMyVar
宏是这很简单 - 它只是为了与我使用的其他宏保持语法一致性)
现在这是诀窍 - 如果我替换\cleardoublepage
“原样” - 像这样:
\includepdf{...}
\unskip
\vspace*{-14.28pt}
\SetMyVar{1}
\tracingpages=1
mysection*{Section X} \tracingpages=0
...事实上,我在日志文件中看不到任何预期的位移!然而,当我放置\cleardoublepage
替换后宏\SetMyVar
调用:
\includepdf{...}
\SetMyVar{1}
\unskip
\vspace*{-14.28pt}
\tracingpages=1
mysection*{Section X} \tracingpages=0
...然后它终于开始工作了 - 我得到了上面提到的(最终)页面测量值。
我仍然希望我可以通过命令重置,而不是“手动”进行“补偿”——但只要这种方法继续有效,我就会很高兴:)
希望这可以帮助到别人,
干杯!