我使用 babel 和 polyglossia 编译了大致相同的内容:
\documentclass{article}
\usepackage{fontspec}
\usepackage[italian]{babel}
\babelfont{rm}[Ligatures=TeX,Numbers=OldStyle]{Garamond Premier Pro}
\begin{document}
\textbf{Babel}
avvedutezza avanti l'articolo away ayo l'abaco l'accidente l'acerrimo adirato aedo
un'affranta afisico afoso l'agone ahhhh l'aiuto ajta alternativa ambedue ancora
annichilire aorta appurare acqua Aristarco artistica L'albero l'alternativa
l'enfasi l'eccezionalità l'altra l'ircocervo l'Illiria l'omeopatia astrattismo atroce
automobile avere avicola awak ayno l'azalea l'uguaglianza l'umanità l'abecedario
accoliti l'acqua l'addomesticare l'aereoplano affidare l'agone l'aiuto aja l'assurdo l'abaco
l'elemento l'eccezionalità l'inedia l'inutilità l'occasione l'Occitania allampanato
un'ampolla annoso un'aorta l'artatamente l'astrologia l'attenzione autore avanti avventure
away ayo azzardo L'Australia L'Europa l'uguaglianza l'umanità
\end{document}
和
\documentclass{article}
\usepackage{fontspec}
\setmainfont[Ligatures=TeX,Numbers=OldStyle]{Garamond Premier Pro}
\usepackage{polyglossia}
\setmainlanguage[babelshorthands=true]{italian}
\begin{document}
\textbf{Polyglossia}
l'avvedutezza avanti l'articolo away ayo abaco l'accidente acerrimo l'adirato aedo
un'affranta afisico afoso l'agone ahhhh l'aiuto ajta alternativa ambedue ancora
annichilire l'aorta l'appurare acqua Aristarco artistica L'albero l'alternativa
l'enfasi l'eccezionalità l'altra l'ircocervo l'Illiria l'omeopatia l'astrattismo atroce
un'automobile avere avicola awak ayno l'azalea l'uguaglianza un'umanità l'abecedario
accolito un'acqua l'addomesticare l'aereoplano affidare l'agone l'aiuto l'assurdo l'abaco
un elemento un'eccezionalità un'inedia un'aorta un'occasione l'Occitania l'allampanato
ampolla annoso l'inutilità l'artatamente l'astrologia l'attenzione autore avanti avventure
away ayo azzardo L'Australia L'Europa l'uguaglianza l'umanità
\end{document}
结果如下:
很明显,撇号的存在会阻碍与 babel 的连字。
我的代码有什么错误或缺失吗?如何解决?谢谢
答案1
babel
意大利语模块确实应该将撇号设置为\lccode
U+2019。
\documentclass{article}
\usepackage{fontspec}
\usepackage[italian]{babel}
\babelfont{rm}[Ligatures=TeX,Numbers=OldStyle]{EB Garamond}
\makeatletter
\addto\extrasitalian{%
\babel@savevariable{\lccode"2019}%
\lccode"2019="2019
}
\makeatother
\begin{document}
\parbox{0pt}{
\hspace{0pt}%
avvedutezza avanti l'articolo away ayo l'abaco
%l'accidente l'acerrimo adirato aedo
%un'affranta afisico afoso l'agone ahhhh l'aiuto ajta alternativa ambedue ancora
%annichilire aorta appurare acqua Aristarco artistica L'albero l'alternativa
%l'enfasi l'eccezionalità l'altra l'ircocervo l'Illiria l'omeopatia astrattismo atroce
%automobile avere avicola awak ayno l'azalea l'uguaglianza l'umanità l'abecedario
%accoliti l'acqua l'addomesticare l'aereoplano affidare l'agone l'aiuto aja l'assurdo l'abaco
%l'elemento l'eccezionalità l'inedia l'inutilità l'occasione l'Occitania allampanato
%un'ampolla annoso un'aorta l'artatamente l'astrologia l'attenzione autore avanti avventure
%away ayo azzardo L'Australia L'Europa l'uguaglianza l'umanità
}
\end{document}
让我们看看这是否尊重语言变化。\lccode
无需为法语设置,因为它已在中处理french.ldf
。
\documentclass{article}
\usepackage{fontspec}
\usepackage[english,french,italian]{babel}
\babelfont{rm}[Ligatures=TeX,Numbers=OldStyle]{EB Garamond}
\makeatletter
\addto\extrasitalian{%
\babel@savevariable{\lccode"2019}%
\lccode"2019="2019
}
\makeatother
\begin{document}
Italian: \the\lccode"2019
{\selectlanguage{english} English: \the\lccode"2019}
{\selectlanguage{french} French: \the\lccode"2019}
{\selectlanguage{english} English: \the\lccode"2019}
{\selectlanguage{italian} Italian: \the\lccode"2019}
{\selectlanguage{french} French: \the\lccode"2019}
{\selectlanguage{english} English: \the\lccode"2019}
\languagename
\parbox{0pt}{
\hspace{0pt}%
avvedutezza avanti l'articolo away ayo l'abaco
%l'accidente l'acerrimo adirato aedo
%un'affranta afisico afoso l'agone ahhhh l'aiuto ajta alternativa ambedue ancora
%annichilire aorta appurare acqua Aristarco artistica L'albero l'alternativa
%l'enfasi l'eccezionalità l'altra l'ircocervo l'Illiria l'omeopatia astrattismo atroce
%automobile avere avicola awak ayno l'azalea l'uguaglianza l'umanità l'abecedario
%accoliti l'acqua l'addomesticare l'aereoplano affidare l'agone l'aiuto aja l'assurdo l'abaco
%l'elemento l'eccezionalità l'inedia l'inutilità l'occasione l'Occitania allampanato
%un'ampolla annoso un'aorta l'artatamente l'astrologia l'attenzione autore avanti avventure
%away ayo azzardo L'Australia L'Europa l'uguaglianza l'umanità
}
\end{document}
答案2
经过一番寻找,我找到了这个解决方案:
\lccode"2019="2019
Unicode 右单引号(或撇号)字符 U+2019 尚未被赋予非零 \lccode,因此连字程序将其视为非字母。
我也读过:
复制模式是可行的(如果你告诉我应该这样做,我会实现它),但对我来说这似乎又是一个丑陋的黑客行为。我仍然认为干净的一件事是将模式中的所有“27”替换为“2019”,并在 8 位引擎中正确读取输入。但这不是最终答案,因为人们可能会抱怨“27 在 XeTeX 中不能正确连字符。
我会多得多更愿意向连字符引擎解释,如果可能的话,“2019”应该与“27”相同处理。
但是,我不明白具体应该怎么做才能避免出现“重复模式的丑陋解决方案”。
但是我们是否应该将这个看作是一个 Babel Bug 呢?