![Babel 的意大利语选项出现奇怪的连字符行为](https://linux22.com/image/290800/Babel%20%E7%9A%84%E6%84%8F%E5%A4%A7%E5%88%A9%E8%AF%AD%E9%80%89%E9%A1%B9%E5%87%BA%E7%8E%B0%E5%A5%87%E6%80%AA%E7%9A%84%E8%BF%9E%E5%AD%97%E7%AC%A6%E8%A1%8C%E4%B8%BA.png)
与许多以前的文档(以及随后的反复试验)一样,我注意到,在这种默认的情况下,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
不能简单地使用连字符carica
,ca-
获得正确的单词间距,而是留下那些难看的空白?。我知道这个词并不深奥,应该被收录进连字符词典中。
为了完整起见,为什么我删除语言选项时会出现这样的错误?我对此的想法可能是,每当修改一个选项时,*.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
。