处理稍微溢出的 \hbox

处理稍微溢出的 \hbox

一般来说,当已经启用微排版时,您如何处理稍微悬垂的行,并且没有办法用连字符连接悬垂单词并且不想将其放在下一行,留下难看的空白(特别是如果单词在段落的第一行)?

以下是两个悬挂词的示例:

悬垂线示例

我能想到两种解决方法:

  • 边距调整:我把线宽稍微加大一些。
  • 负面跟踪:我减少了相关行的字母间距。

在给定的限制内还有其他方法吗?哪一种是更好的做法?

编辑:我能够使用\kerncharacters命令在 ConTeXt 中实现负向跟踪,它看起来相当不错:

修复了悬垂文本

% ConTeXt code
\setuppapersize[A5]
\setupbackgrounds[text] [rightframe=on,framecolor=red,rulethickness=0.1pt]

\setupalign[hz,hanging] % microtypography enabled
\definefontfeature[default][default][protrusion=quality,expansion=quality]

\definetypeface[mainface][rm][specserif][Linux Libertine O] [default]
\setupbodyfont[mainface,14pt]

\mainlanguage[russian]
\setupindenting[yes,medium,first]

\starttext
{ \kerncharacters[-0.02] Здесь будет длинный-предлинный текст, \mbox{в~коем}} никак нельзя перенести строку. 
Запрещено {\kerncharacters[-0.01] разрывать телефонные номера, например, \mbox{(000)1234-5678}}, многозначные числа и дефисные написания.
\stoptext

答案1

您可以将已经发现的轻微负字距调整与字体扩展中的极端收缩结合起来。

\setuppapersize[A5]
\setupbackgrounds[text] [rightframe=on,framecolor=red,rulethickness=0.1pt]

\setupfontexpansion
  [extremeshrink]
  [stretch=2,shrink=4,step=.5,vector=quality,factor=1]

\setupalign[hz,hanging] % microtypography enabled
\definefontfeature[default][default][protrusion=quality,expansion=extremeshrink]

\definetypeface[mainface][rm][specserif][Linux Libertine O] [default]
\setupbodyfont[mainface,14pt]

\mainlanguage[russian]
\setupindenting[yes,medium,first]

\definecharacterkerning [shrinkkern] [factor=-.01]
\setcharacterkerning [shrinkkern]

\starttext
Здесь будет длинный-предлинный текст, \mbox{в~коем} никак нельзя перенести строку. 
Запрещено разрывать телефонные номера, например, \mbox{(000)1234-5678}, многозначные числа и дефисные написания.
\stoptext

相关内容