当箱子过满或不足时如何采取行动?

当箱子过满或不足时如何采取行动?

对于一个相当长的文档(基于book类别)的修订,我不仅想标记过满的水平盒子(得益于draft类别选项,这很容易),而且当遇到过满的水平盒子时,还想添加特定的 TOC 条目(比如说“查看此页面上的过满水平盒子!”)。

此外,我想对过满的垂直盒子以及未满的水平盒子和垂直盒子执行类似的操作。

我看了LaTeX2e 来源并在LaTeX2e 的标准文档类但当箱子过满或未满时,无法找到任何执行操作的方法。你知道这是如何实现的吗?

答案1

在此处输入图片描述

这个仅限 luatex 的答案插入了一些代码(我从 chickenize 包中偷来的)以将文本作为字形列表和粘合节点插入到 hpack 回调报告为过满或欠满的任何框的末尾。

它实际上只是一个草图但或多或少可以用于这个例子。

\documentclass{article}
\makeatletter

\directlua{
GLYPH = node.id("glyph")
GLUE  = node.id("glue")
%
function hpackshow (indicator,num,nd,f,l)
print('HPACK: ' .. indicator .. ' ' .. num)
if (indicator == 'overfull' or indicator == 'underfull' ) then
if (indicator == 'overfull') then
local pt = num / 65536.0
str = string.format("| overfull \@percentchar #.2fpt",pt)
else
str = string.format("| underfull badness " .. num)
end
nds = {}
nds[0]=node.new(GLYPH,1)
    for i = 1,string.len(str) do
      nds[i] = node.new(GLYPH,1)
      nds[i].font = font.current()
      nds[i-1].next = nds[i]
    end

    j = 1
    for s in string.utfvalues(str) do
      local char = unicode.utf8.char(s)
      nds[j].char = s
      if unicode.utf8.match(char,"\@percentchar s") then
        nds[j] = node.new(GLUE)
        nds[j].width = space
        nds[j].shrink = shrink
        nds[j].stretch = stretch
      end
      j = j+1
    end
return nds[0]
end
end
%
luatexbase.add_to_callback('hpack_quality',hpackshow,'my hpack logger')
}
\begin{document}

somelongtextsomelongtext somelongtextsomelongtext somelongtextsomelongtext 
somelongtextsomelongtext somelongtextsomelongtext somelongtextsomelongtext 
somelongtextsomelongtext somelongtextsomelongtext somelongtextsomelongtext 
somelongtextsomelongtext somelongtextsomelongtext somelongtextsomelongtext 
somelongtextsomelongtext somelongtextsomelongtext somelongtextsomelongtext 


\begin{minipage}{5cm}\fussy\parfillskip=0pt
onetwothree onetwothree
onezztzzzwothree onetwothree
onetwothree onetzzzzzwothree
onetzzzzwothree onetwothree
\end{minipage}

\end{document}

相关内容