如何定义仅对特定页面起作用的“thispage”宏?

如何定义仅对特定页面起作用的“thispage”宏?

有时我会用它\vbadness=10000来抑制警告

Underfull \vbox (badness ...) has occurred while \output is active...

\vbadness=10000把发生警告的页面放在了\vbadness=1000下一个页面。我对 也做了同样的操作\hbadness

我知道这只能从日志中删除警告而不能解决任何问题,但是当我无法修复出现问题的页面时,我只是让警告消失,这样它就不会再困扰我了(我是一名专业排字员,我不允许根据自己的喜好更改文本和/或布局,所以有时这是摆脱警告的最后机会)。

我知道我可以使用\vbadness=10000after\begin{document}\vbadness=1000before\end{document}一劳永逸地消除所有这些警告,但我更愿意逐一抑制它们,以防作者要求进行更多更改,而这可能会搞乱布局并导致更多此类警告(这种情况确实会发生)。

为了节省时间,有一个只在需要的地方改变的宏会非常有用\vbadness。像这样:

The quick brown fox jumps over the lazy dog.

\thispagevbadness

Time's up! Three bucks off!

可以这样做吗?很抱歉没有发布任何尝试,但我不知道从哪里开始做这件事。

答案1

我真的不推荐这样做,但是有两个未满的页面,您可以取消注释或注释页码测试以查看或不查看警告。

\documentclass{article}
\AddToHook{shipout/after}{%
\global\vbadness=1000
% page before the issue
\ifnum\value{page}=1 \global\vbadness=10000 \fi
\ifnum\value{page}=2 \global\vbadness=10000 \fi
}
\flushbottom

\begin{document}

aaa

bbb

\newpage

ccc

ddd

\pagebreak

eee

fff

\pagebreak

ggg
\end{document}

答案2

这可以抑制第二页的不良内容。但是必须进行全局分配,这有点可疑。

\documentclass{book}

\begin{document}

1.\rule{1cm}{0.42\textheight}

\rule{1cm}{0.572\textheight}


2.\rule{1cm}{0.42\textheight} 

\AddToHookNext{shipout/before}{%
 \global\vbadness=10000 %set
 \AddToHookNext{shipout/before}{\global\vbadness=1000}%reset
 }  

\rule{1cm}{0.572\textheight}

3.\rule{1cm}{0.42\textheight}

\rule{1cm}{0.572\textheight}

4.\rule{1cm}{0.42\textheight}

\rule{1cm}{0.572\textheight}

\end{document}

相关内容