![如何定义仅对特定页面起作用的“thispage”宏?](https://linux22.com/image/460608/%E5%A6%82%E4%BD%95%E5%AE%9A%E4%B9%89%E4%BB%85%E5%AF%B9%E7%89%B9%E5%AE%9A%E9%A1%B5%E9%9D%A2%E8%B5%B7%E4%BD%9C%E7%94%A8%E7%9A%84%E2%80%9Cthispage%E2%80%9D%E5%AE%8F%EF%BC%9F.png)
有时我会用它\vbadness=10000
来抑制警告
Underfull \vbox (badness ...) has occurred while \output is active...
我\vbadness=10000
把发生警告的页面放在了\vbadness=1000
下一个页面。我对 也做了同样的操作\hbadness
。
我知道这只能从日志中删除警告而不能解决任何问题,但是当我无法修复出现问题的页面时,我只是让警告消失,这样它就不会再困扰我了(我是一名专业排字员,我不允许根据自己的喜好更改文本和/或布局,所以有时这是摆脱警告的最后机会)。
我知道我可以使用\vbadness=10000
after\begin{document}
和\vbadness=1000
before\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}