60 如何使 \listoffigures 的盒子强制`shipped out`?

发布于 2025-12-26 09:58:18

配置

Win11; TeXLive2025; VSCode.

问题描述

如下以图目录(\listoffigures)为例,表目录(\listoftables)同理。

在实际工程中需要获取图目录(listoffigures)所在的最后一页的页码值(e.g. 最后一个条目在第n页,则所获取的页码值为n),然后将其用于其他命令中。但对于图目录的最后若干项被断到下一页中的情形,基于如下语句:

\listoffigures
\thepage %获取当前页码值的位置,这里临时换成\thepage来展示获取结果

会出现“最后一个条目在第n页,但所获取的页码值却为n-1”,例如文末MWE的运行结果为:
image.png

问了下AI,得到的回答大致意思是:计数器的取值命令(\the<counter>, \value{<counter>}, etc)比 \listoffigures, \listoftablesship out 行为先一步展开。于是,图/表目录的盒子在计数器机制下仍属于第n-1页。

目前只想到了一种解决方案:在对计数器取值之前添加空盒子,使取值行为的时机被挪到了空盒子之后,从而被挪到了第n页当中。这也相当于:\listoffigures盒子的ship out行为被提前结束了。例如:

\listoffigures
\mbox{}
\thepage

但不足在于:无论添加哪种类型的盒子,都会产生一定额外空白。例如上述修改的结果为:
image.png

这可能会导致:原本不会换页的条目因为这一空白触发了断页的罚函数机制而被断到了下一页

因此问题为:如何在不产生额外内容的前提下让\listoffigures盒子的ship out行为被提前结束呢?

希望尽可能不用到额外宏包。当然,对于不得不用宏包的情形,也欢迎发表。

MWE

\documentclass{article}
\usepackage{graphicx}
\usepackage{lipsum}
\usepackage{showframe}

\begin{document}

% ----- 这部分是为了模拟 图目录之前还有其他内容填充 的情形 ----- %
\lipsum[1-4]

This is Text. This is Text. This is Text. This is Text. This is Text. This is Text. This is Text. This is Text. This is Text. This is Text. This is Text. This is Text. This is Text. This is Text. This is Text. This is Text. This is Text. This is Text. This is Text. This is Text. This is Text. This is Text. This is Text. This is Text.
% =================================================== %

\listoffigures
\thepage

\begin{figure}[ht]
\centering
\includegraphics[width=.48\linewidth]{example-image-a}
\caption{This is text}
\end{figure}

\begin{figure}[ht]
\centering
\includegraphics[width=.48\linewidth]{example-image-a}
\caption{This is text}
\end{figure}

\end{document}

查看更多

关注者
0
被浏览
30
1 个回答
雾月
雾月 51分钟前
这家伙很懒,什么也没写!
\listoffigures
\goodbreak\thepage

\thepage 这行一般不能包含 typesetting material,否则它可能不会和 \listoffigures 保持在同一页。

\listoffigures
\mbox{}
\thepage

有空格是因为 \mbox{} 离开水平模式,并且有了一个空盒子,导致它后面的空格不会被忽略,从而 \thepage 前面多了个空格。加上注释符就没有空格了。当然这可能会出现不想要的空行。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览