这是我的 MWE:
\documentclass{article}
\usepackage{polyglossia}
\disablehyphenation % <-- if I remove this line the word "corrispondente" is not automatically hyphened
\setmainlanguage{italian} % <-- commenting out this line to properly use manual hyphenation
\begin{document}
\parbox{.25\textwidth}{Rimuovere approssimativamente la direzione corrispondente al genere.}
\bigskip
\parbox{.25\textwidth}{Rimuovere appros\-simativamente la direzione corrispondente al genere.}
\bigskip
\parbox{.25\textwidth}{Rimuovere appros\-simativamente la direzione corrispon\-dente al genere.}
\bigskip
\parbox{.25\textwidth}{Rimuovere appros\-simativamente la direzione corrispon-\linebreak{}dente al genere.}
\bigskip
\today % <-- if you comment out the previous line this line is not properly formatted
\end{document}
我用它编译
latexmk -lualatex ./foo.tex
在TexLive2023上更新。
第一个句子\parbox
在禁用连字符的情况下正确拼写:单词“approssimativamente”没有连字符。然后在第二个句子中,\parbox
我手动为该单词加了连字符。到目前为止,一切都正常。但是当我尝试对单词“corrispondente”做同样的事情时,它不起作用。我找到了两个解决方案:
- 注释掉,
\setmainlanguage{italian}
但\today
输出不是更多的翻译和格式化的意大利风格,或 - 创建一个假连字符,
-\linebreak{}
但我发现这个解决方案很糟糕。
有任何想法吗?
更新
我尝试\finalhyphendemerits=0
按照 David 的建议添加。一切正常。但我的目标是使用 Beamer 类而不是文章。我做了同样的事情,但它不起作用,如本 MWE 所示:
\documentclass{beamer}
\usetheme[right]{PaloAlto}
\usepackage{polyglossia}
\disablehyphenation
\usepackage{fontspec}
\setsansfont{DejaVuSans}
\setmainlanguage{italian}
\begin{document}
\begin{frame}
\begin{columns}
\begin{column}{.5\textwidth}
\end{column}
\begin{column}{.5\textwidth}
\begin{itemize}
\item foo
\begin{itemize}
\item {\finalhyphendemerits=0
Rimuovere appros\-simativamente la direzione corrispon\-dente al genere.}
\end{itemize}
\end{itemize}
\end{column}
\end{columns}
\end{frame}
\end{document}
我怀疑column
环境不是一个段落并且因此\finalhyphendemerits=0
不起作用。
答案1
默认情况下,在段落倒数第二行使用连字符会受到很大的惩罚(扣分)。因此,如果您降低空格数,则拉伸空格的成本会较低,然后 \finalhyphendemerits
它会在该点选择连字符。
\documentclass{article}
\usepackage{polyglossia}
\disablehyphenation % <-- if I remove this line the word "corrispondente" is not automatically hyphened
\setmainlanguage{italian} % <-- commenting out this line to properly use manual hyphenation
\begin{document}
\parbox{.25\textwidth}{Rimuovere approssimativamente la direzione corrispondente al genere.}
\bigskip
\parbox{.25\textwidth}{Rimuovere appros\-simativamente la direzione corrispondente al genere.}
\bigskip
\parbox{.25\textwidth}{Rimuovere appros\-simativamente la direzione corrispon\-dente al genere.}
\bigskip
new
\parbox{.25\textwidth}{
\finalhyphendemerits=0
Rimuovere appros\-simativamente la direzione corrispon\-dente al genere.}
\bigskip
\parbox{.25\textwidth}{Rimuovere appros\-simativamente la direzione corrispon-\linebreak{}dente al genere.}
\bigskip
\today % <-- if you comment out the previous line this line is not properly formatted
\end{document}
答案2
问题在于\finalhyphendemerits
,正如 David 所指出的那样。但我提出了一种不同的策略,即添加
\finalhyphendemerits=0
到 的定义\sloppy
。段落下的\sloppy
内容已经是任意糟糕的了,至少这可以让它们变得不那么糟糕。
另一方面,在列非常窄的情况下,右侧参差不齐似乎是最好的选择,而修改后\sloppy
甚至可以获得更好的结果。
\documentclass{article}
\usepackage{polyglossia}
\usepackage{ragged2e} % for the second box
\setmainlanguage{italian}
\AddToHook{cmd/sloppy/before}{\finalhyphendemerits=0 }
\begin{document}
\today
\bigskip
\parbox{.25\textwidth}{%
Rimuovere approssimativamente la direzione corrispondente al genere.%
}
\bigskip
\parbox{.25\textwidth}{%
\RaggedRight
Rimuovere approssimativamente la direzione corrispondente al genere.%
}
\end{document}
作为参考,这是在没有补丁的情况下获得的结果\sloppy
。