为什么 LaTeX 不能按照我明确设置的方式(即“e-sco”)对“esco”进行连字符连接?
我注意到这种行为对于任何单字母的首音节都存在。
以下是一个 MWE,它通过将左右页边距设置为纸张宽度的 50% 来强制连字。该示例重点介绍意大利语单词“esco”(我出去),其音节为“e-sco”:
\documentclass[italian]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{geometry}
\geometry{verbose,tmargin=1cm,bmargin=1cm,lmargin=0.5\paperwidth,rmargin=0.5\paperwidth}
\pagestyle{empty}
\usepackage[italian]{babel}
% if uncommented, this has no effect: produces "esco"
% \hyphenation{e-sco}
% if uncommented, this test produces "es-co" as requested (but I want "e-sco"!)
% \hyphenation{es-co}
\begin{document}
\noindent\hspace{0pt}
esco % by default, this produces "esco" (while the correct Italian hyphenation is "e-sco")
coro % by default, this produces "co-ro" (which is correct in Italian)
\end{document}
这是因为某种惩罚导致一开始就不打断单词吗?如果是,我该如何解决?还请注意,这并\hyphenpenalty=0
不能解决问题。
e\-sco
还要注意,通过在文档中键入,连字将正确执行,但显然我想避免这种情况,因为我正在寻找一种利用特定于语言的连字规则的更“通用”的解决方案。
我在 Windows 10 上使用 TeXLive 2019。提前感谢这个伟大的社区!
答案1
TeX 有一个参数,\lefthyphenmin
它告诉它一个单词必须至少在连字点左侧留出多少个字符才能将其视为有效。此参数默认设置为 2,因此e-sco
无法使用,因为连字点左侧只剩下 1 个字符。
您可以将 改为\lefthyphenmin
1\AtBeginDocument
以获取仅在首字母后才有有效连字点的带连字的单词:
\documentclass[italian]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{geometry}
\geometry{verbose,tmargin=1cm,bmargin=1cm,lmargin=0.5\paperwidth,rmargin=0.5\paperwidth}
\pagestyle{empty}
\usepackage[italian]{babel}
% if uncommented, this has no effect: produces "esco"
%\hyphenation{e-sco}
% if uncommented, this test produces "es-co" as requested (but I want "e-sco"!)
% \hyphenation{es-co}
\AtBeginDocument{\lefthyphenmin=1 }
\begin{document}
\noindent\hspace{0pt}
esco % by default, this produces "esco" (while the correct Italian hyphenation is "e-sco")
coro % by default, this produces "co-ro" (which is correct in Italian)
\end{document}