Babel 的意大利语选项出现奇怪的连字符行为

Babel 的意大利语选项出现奇怪的连字符行为

与许多以前的文档(以及随后的反复试验)一样,我注意到,在这种默认的情况下,MWE 会降低:

\documentclass[a4paper]{article}
%
\usepackage[OT1]{fontenc}
\usepackage[utf8]{inputenx}
%
%\usepackage{amsmath,amssymb,amsthm}
%
%\usepackage{fixltx2e}
%
%\numberwithin{equation}{section}
%\numberwithin{figure}{section}
%\numberwithin{table}{section}
%
\usepackage[english,italian]{babel}
%
\begin{document}
%
All'interno di una semicirconferenza vi è uniformemente distribuita una carica $Q$, definibile 
%
\end{document}

某些文本行的单词之间明显包含太多空格;正如输出所清楚显示的那样:

在此处输入图片描述

对我来说,很难想象babel无法识别最后一行单词的正确连字符carica,因为合法的断字ca-ri-ca应该足以减少第一行的单词间距。

删除该选项后出现了相当令人惊讶的部分italian,因为一开始显示了这个错误:

! Package babel Error: You haven't loaded the option italian yet.
See the babel package documentation for explanation.
Type  H <return>  for immediate help.
...                                            
l.3 \select@language{italian}                      
? 

我真的不知道为什么这个错误信息本来是应该存在的。然而,忽略这个错误信息,生成的输出是:

在此处输入图片描述

现在,该行的最后一个单词的连字符被错误地连接了(正如怀疑的那样);但这仍然引出了最后一个问题:为什么babel不能简单地使用连字符caricaca-获得正确的单词间距,而是留下那些难看的空白?。我知道这个词并不深奥,应该被收录进连字符词典中。

为了完整起见,为什么我删除语言选项时会出现这样的错误?我对此的想法可能是,每当修改一个选项时,*.aux文件就会以某种方式干扰新的声明,从而指出错误;但我不确定。

答案1

连字符被考虑在内,但没有使用,因为它会导致更高的扣分。这是我得到的

@firstpass
@secondpass
[]\T1/cmr/m/n/10 All'interno di una se-mi-cir-con-fe-ren-za vi <E8> uni-for-me-men
-te di-stri-bui-ta una 
@ via @@0 b=189 p=0 d=49601
@@1: line 1.0 t=49601 -> @@0
ca-
@\discretionary via @@0 b=0 p=50 d=2600
@@2: line 1.2- t=2600 -> @@0
ri-
@\discretionary via @@0 b=25 p=50 d=3725
@@3: line 1.3- t=3725 -> @@0
ca $\OML/cmm/m/it/10 Q$\T1/cmr/m/n/10 , de-fi-ni-bi-le 
@\par via @@1 b=0 p=-10000 d=10100
@\par via @@2 b=0 p=-10000 d=50000100
@\par via @@3 b=0 p=-10000 d=50000100
@@4: line 2.2- t=59701 -> @@1

(我只是加载了T1,但结果与OT1几乎相同)。

问题出在哪里?如您所见,添加的\finalhyphendemerits设置babel-italian为非常高的值(50000000),导致最后一行出现不必要的连字符。使用默认值 5000,会添加连字符。


这个列表是什么意思?它代表 TeX 的换行计算。

  • \@firstpass意味着 TeX 在没有尝试连字的情况下所做的事情;什么都没有显示,因为没有办法遵守 的值给出的约束\pretolerance

  • \@secondpass显示真实的计算;第一个可行点在之后una;在它之前,找不到合适的换行位置;注意@@0代表段落的开始。

  • @在行首表示断点的候选;然后显示糟糕程度、可用的惩罚和缺点。

  • @@1表示找到的这条线路断点;该线路分类为1.0,即线路1为“松散”;

  • @@2是另一个适合换行的句子,总扣分 2600 分;line 1.2-表示这是一行“还行”,但最后有一个连字符。

  • @@3会产生更高的缺点,并且带有以连字符结尾的“紧线”。

“definibile” 后面是\par,因此 TeX 会尝试寻找“最短路径”,同时添加“全局缺点”,特别是\finalhyphendemerits如果倒数第二行带连字符。因此路线是从@@4(由 强制的最后一个断点\par@@1@@0

相关内容