假设我想将文本设置为右边不规则,但不阻止连字符,因此,说
\rightskip=0pt plus 4em
(或使用ragged2e
和其他类似的包来获得更多的灵活性,为简单起见,这里我将仅使用最基本的参数来显示我所面临的问题)
但是,这偶尔会导致框过满。我想在不将容差提高到过高的情况下防止框过满。因此,我使用\emergencystretch
。现在,在第三遍中,对有问题的线条添加了一个有点“假想”的拉伸。但是,这会导致框未满。
我真正想要的是,如果 TeX 无法制作段落,我希望它暂时增加\rightskip
可拉伸性。也就是说,我宁愿偶尔有几个段落比平时更“粗糙”一些。我可以手动完成。但是,有没有可能自动完成这个?或者其他方法来实现类似的效果?我正在使用 LuaTeX,所以基于 lua 的解决方案也是可以接受的。
例子,
\hsize=1in
\rightskip=0pt plus 0.5em % for demonstration purpose only
\overfullrule=1ex
% \emergencystretch=0.5in
A wonderful serenity has taken possession of my entire soul, like these sweet
mornings of spring which I enjoy with my whole heart. I am alone, and feel
the charm of existence in this spot, which was created for the bliss of souls
like mine.
\end
添加注释掉的行,
\emergencystretch=0.5in
我们进入了满满的箱子,
不完美的解决方案 基于http://wiki.luatex.org/index.php/Post_linebreak_filter
\directlua{
function mclass_ragged (head)
for line in node.traverse_id(node.id("hlist"), head) do
if line.glue_order == 0 then
line.list = node.hpack(line.list)
end
end
return head
end
luatexbase.add_to_callback(
"post_linebreak_filter", mclass_ragged, "mclass_ragged")
}
\rightskip=0pt plus 2em
\dim_set:Nn\emergencystretch{0.5\textwidth}
如果将尖叫线设置为自然宽度,这将导致较小的“overfullbox”。但是,我认为在不规则的设置下,它几乎不会被注意到。甚至单词空间也更好。(或者,可以先消除可收缩性)
它以某种方式干扰titletoc
和hyperref
。由于我习惯于\filright
将 toc 条目设置为完全不规则的,因此我只在 toc 之后添加回调。特别是,我将其挂接到 may\mainmatter
定义中。