排版好奇心:一行上的单词变化不会影响该行的设置方式,但会影响下一行的设置方式

排版好奇心:一行上的单词变化不会影响该行的设置方式,但会影响下一行的设置方式

以下两段唯一的不同之处在于,第一段在第一行使用了“他的”,而第二段使用了“她的”。

\documentclass[12pt]{book}
\RequirePackage[adobe-utopia]{mathdesign}

\textwidth5.5in

\begin{document}

Each producer \(j\), when choosing the output of his production unit (an element in \(T(j)\))
takes as given the price system \((p_1,p_2)\) prevailing in the market and maximizes the value
of this output (the unit's profit).

Each producer \(j\), when choosing the output of her production unit (an element in \(T(j)\))
takes as given the price system \((p_1,p_2)\) prevailing in the market and maximizes the value
of this output (the unit's profit). 
\end{document}

TeX 设置段落如下: 在此处输入图片描述 两个段落中第一行的换行方式相同,但两个段落中第二行的换行方式不同。因此,第一行的差异不会影响第一行的设置方式,但会影响第二行的设置方式。第二行设置好了。为什么 TeX 的段落设置机制会这样做呢?

答案1

我无法重现您显示的输出,但是通过夸大宽度her我可以产生效果,

在此处输入图片描述

\documentclass[12pt]{book}
\RequirePackage[adobe-utopia]{mathdesign}

\textwidth5.5in


\lefthyphenmin=3
\tracingparagraphs2

\begin{document}

Each producer \(j\), when choosing the output of his production unit (an element in \(T(j)\))
takes as given the price system \((p_1,p_2)\) prevailing in the market and maximizes the value
of this output (the unit's profit).

Each producer \(j\), when choosing the output of he\vrule width7.01pt r production unit (an element in \(T(j)\))
takes as given the price system \((p_1,p_2)\) prevailing in the market and maximizes the value
of this output (the unit's profit). 
\end{document}

TeX 尽量避免在非常紧凑的行旁边出现非常松散的行。为了进入and第二行,空白必须非常紧凑,而第一段不允许出现这种情况,但是由于her第二种形式的行距较宽,第一行的空白足够紧凑,可以容纳紧凑的第二行。

日志显示

第一段:

@firstpass
@secondpass
[]\T1/mdput/m/n/12 Each pro-ducer $\OML/mdput/m/it/12 j$\T1/mdput/m/n/12 , when
 choos-ing the out-put of his pro-duc-tion unit (an ele-
@\discretionary via @@0 b=0 p=50 d=2600
@@1: line 1.2- t=2600 -> @@0
ment in $\OML/mdput/m/it/12 T\OT1/mdput/m/n/12 (\OML/mdput/m/it/12 j\OT1/mdput/
m/n/12 )$\T1/mdput/m/n/12 ) takes as given the price sys-tem $\OT1/mdput/m/n/12
 (\OML/mdput/m/it/12 p[]; p[]\OT1/mdput/m/n/12 )$ \T1/mdput/m/n/12 pre-vail-ing
 in the mar-ket 
@ via @@1 b=28 p=0 d=1444
@@2: line 2.1 t=4044 -> @@1
and 
@ via @@1 b=86 p=0 d=9216
@@3: line 2.3 t=11816 -> @@1
max-i-mizes the value of this out-put (the unit's profit). 
@\par via @@2 b=0 p=-10000 d=100
@\par via @@3 b=0 p=-10000 d=100
@@4: line 3.2- t=4144 -> @@2

第二段

@firstpass
@secondpass
[]\T1/mdput/m/n/12 Each pro-ducer $\OML/mdput/m/it/12 j$\T1/mdput/m/n/12 , when
 choos-ing the out-put of he|r pro-duc-tion unit (an 
@ via @@0 b=102 p=0 d=22544
@@1: line 1.0 t=22544 -> @@0
ele-
@\discretionary via @@0 b=38 p=50 d=4804
@@2: line 1.3- t=4804 -> @@0
ment in $\OML/mdput/m/it/12 T\OT1/mdput/m/n/12 (\OML/mdput/m/it/12 j\OT1/mdput/
m/n/12 )$\T1/mdput/m/n/12 ) takes as given the price sys-tem $\OT1/mdput/m/n/12
 (\OML/mdput/m/it/12 p[]; p[]\OT1/mdput/m/n/12 )$ \T1/mdput/m/n/12 pre-vail-ing
 in the mar-
@\discretionary via @@1 b=9 p=50 d=12861
@@3: line 2.2- t=35405 -> @@1
ket 
@ via @@1 b=4 p=0 d=10196
@ via @@2 b=28 p=0 d=11444
@@4: line 2.1 t=16248 -> @@2
and 
@ via @@2 b=86 p=0 d=9216
@@5: line 2.3 t=14020 -> @@2
max-i-mizes the value of this out-put (the unit's profit). 
@\par via @@3 b=0 p=-10000 d=5100
@\par via @@4 b=0 p=-10000 d=100
@\par via @@5 b=0 p=-10000 d=100
@@6: line 3.2- t=14120 -> @@5




马丁向我发送了\tracingall问题中文档的完整日志,并通过 Bakoma TeX 运行,以便我可以调查为什么需要添加规则以使其her更宽.....

与原始版本的日志进行比较\tracingall,bakoma tex 运行中的 LaTeX 宣称自己是

LaTeX2e <2017-04-15>

实际上,使用 texlive 2016 得到的差异最少,但主要差异似乎在于 mathdesign 包设置的细微差异

特别是日志的差异显示

tl2016

Package: mathdesign 2013/08/29 v2.31 Math Design Project
...
{select font mdputr8t at 11.28003pt}
...
OT1/mdput/m/n -><->s*[0.94]mdputr7t

巴科马

Package: mathdesign 2006/01/29 v1.55 Math Design Project
...
{select font mdputr8t at 11.03998pt}
...
OT1/mdput/m/n -><->s*[0.92]mdputr7t

因此字体中使用的比例因子相差 0.02。当然,在这样一个特别敏感的段落中,两种可能的换行选项具有相似的糟糕程度,而 his 和 her 提示之间的宽度差异只是平衡,字体大小的微小差异意味着我必须调整单词宽度才能看到相同的效果,这不足为奇。

答案2

作为现有答案的补充,想法如下。

TeX 将段落中的行分类为

  1. 紧的
  2. 体面的
  3. 松动的
  4. 很宽松
  5. 过满/不足

根据他们的坏处,它是通过查看为了获得对齐需要拉伸或收缩多少单词间空间来计算的;这些名称应该是不言自明的。

将段落分成行的算法考虑到了每行可能的坏处,因为它适用于所有的段落。根据上表,最终结果将是连续的线条相差不超过一度。因此,不会出现松散的线条与紧密的线条相邻,也不会出现非常松散的线条与合适的线条相邻的情况。

如果无法获得结果,您将收到一个警告,提示“框未满”,或者在某些情况下,“框过满”:如果无法按照规定的公差打破段落,就会发生这种情况。

结果是,改变一个词第一的段落的行甚至可能会影响最后的一:如果第一行从体面变为紧密,那么这可能会传播。

相关内容