您可以使用该selnolig
包自动拆分不适当的连字。例如,“leaflet”可能没有 fl 连字,而这可以通过 来防止\nolig{leaflet}{leaf|let}
。但对于许多字体,拆分此连字(使用selnolig
)仍然无法防止f
接触l
。我甚至尝试使用fl
fontforge 调整该对的字距,但似乎selnolig
不使用字体的字距调整。以下将以越来越适当的程度打印“leaflet”(我认为;不形成连字的字母不应接触,这不是排版规则吗?)。
\documentclass{article}
\usepackage{fontspec}
\usepackage{selnolig}
\setmainfont{ebgaramond}
\begin{document}
leaflet
\nolig{leaflet}{leaf|let}
leaflet
leaf\kern1.3333ptlet
\end{document}
如果没有明确的字距,我怎样才能得到最后的结果?
附言:这种打破-连字符的方式fl
可以在尼采的《Werke in drei Baenden》(卡尔汉瑟出版社,1977 年出版)中看到:
答案1
我认为你永远不会在英语中这样做,但在其他喜欢复合词的语言中,这更是一个问题。
\documentclass{article}
\directlua{
function breaklig (s)
return
string.gsub(
string.gsub(
s,
'leaflet','leaf\string\\kern.5em let'),
'shelfful','shelf\string\\kern.5em ful')
end
luatexbase.add_to_callback('process_input_buffer',breaklig,'break ligatures in specified words')
}
\begin{document}
I once wrote a leaflet that (or was it a pamphlet) that had a flipped flyleaf.
Actually I have a shelfful of them.
\end{document}
答案2
在拆分印刷上不合适的连字时,一个主要且坦率地说令人烦恼的实际问题fl
是ffl
,应在f
(或)ff
和之间插入多少空格(如果有的话) l
。拆分连字时不会出现此问题(参见“shelfful”和下面的屏幕截图),并且在拆分(例如德语中的“aufisst”)和(例如“Stoffisolierung”)连字ff
时,这通常是一个不那么令人烦恼的问题。fi
ffi
f
应该在(或ff
)和之间插入的“正确”空白量l
恰好取决于f
和ff
字形的确切形状。对于某些字体,例如 Palatino、Aldus 和 Dante,根本不需要额外的空白,因为这些字体的f
和字形具有相当短的“臂” ,即使不插入空白也ff
不会与字形相撞。(另外:这可能是这些字体故意设计的特点。)该包的方法被编程为插入的空白。虽然这个量对于 Computer Modern 和 Latin Modern 来说是可以的,但实际上一方面对于 Palatino 来说太多了,另一方面对于 EB Garamond、Caslon、Sabon 和 Linux Liberine O 等字体来说又不够。例如,对于 EB Garamond,如果和字形绝对不能相互接触,则看起来——或者说是用 的方法插入的量的三倍以上——是必须插入的空白量。在我看来,如果插入 0.1em 的空白,排版后的单词“Verzweiflung”看起来就很糟糕:一个问题——不合适的连字符——已被另一个问题——单词内部难看的间隙所取代——这几乎同样糟糕!(另外:也许您提到的“排版规则”,即相邻的非连字符不能接触,必须重新考虑。)l
babel
"|
0.03em
0.1em
babel
"|
f
l
fl
那么,拆分fl
和连字时真正的解决方案是使用具有“短”臂ffl
的字形f
和变体,即,臂不会向右突出(太多),因此不会与“高”字形(如)发生冲突。不幸的是,目前很少有字体提供这种短臂字形。我知道只有 EB Garamond 和 Linux Libertine 字体系列提供它们。(遗憾的是,EB Garamond 和 Linux Libertine 存储其短臂 f 变体的“插槽”并不相同。这使得编写自动使用短臂字形的程序变得相当繁琐且容易出错。这也是为什么我还没有在包中实现短 f 方法的原因……)ff
l
selnolig
另一种解决方案(您可能可用或不可用)是使用诸如 Palatino 之类的字体,其f
和ff
字形的臂较短,因此不会与尾随l
字形发生冲突。
下表比较了各种拆分连字符的方法的输出fl
。请注意,下面使用的“新”方法与 David Carlisle 在其回答中使用的方法类似,只是它使用所谓的“自由裁量”来继续允许在单词“Verzweiflung”中出现换行符(带连字符)。还请注意,对于此处考虑的任何字体,f
在 中的两个字形之间不必插入空格shelfful
。
\documentclass[english,ngerman]{article}
\usepackage{fontspec,babel,selnolig,booktabs,array,geometry}
\providecommand\xx{}
\newcolumntype{L}{>{\xx}l}
\newcolumntype{R}{>{\xx}r}
\setlength\tabcolsep{4pt}
\usepackage{luacode}
\begin{luacode}
function breaklig (s)
s = s:gsub ( 'Verzweiflung' ,
'Ver\\-zweif\\discretionary{-}{}{\\kern0.10em}lung' )
return s
end
luatexbase.add_to_callback( 'process_input_buffer' ,
breaklig , 'break ligatures in specified words' )
\end{luacode}
\begin{document}
\begin{tabular}{@{}lRLLLLLL@{}}
&& \multicolumn{2}{c}{\ttfamily selnolig} &
\multicolumn{1}{c}{\ttfamily babel "|} &
\multicolumn{1}{c}{\ttfamily "new"\ meth.} &
\multicolumn{1}{c@{}}{\ttfamily f.short}\\
&& \multicolumn{2}{c}{\ttfamily ("whatsit")} &
\multicolumn{1}{c}{\ttfamily (0.03em)} &
\multicolumn{1}{c}{\ttfamily (0.10em)} &
\multicolumn{1}{c@{}}{(if available)} \\
\cmidrule(lr){3-4} \cmidrule(lr){5-5} \cmidrule(lr){6-6} \cmidrule(l){7-7}
% start with default font (Latin Modern)
\setmainfont{Latin Modern Roman}
Latin Modern
&ff fl & shelfful & {V}erzweiflung & Verzweif"|lung & Verzweiflung \\
\gdef\xx{\setmainfont{EB Garamond}[Scale=MatchLowercase]}
\xx EB Garamond
&ff fl & shelfful & {V}erzweiflung & Verzweif"|lung & Verzweiflung &
Verzwei\symbol{983911}lung\\
\gdef\xx{\setmainfont{Adobe Caslon Pro}[Scale=MatchLowercase]}
\xx Caslon
&ff fl & shelfful & {V}erzweiflung & Verzweif"|lung & Verzweiflung \\
\gdef\xx{\setmainfont{Sabon Next LT Pro}[Scale=MatchLowercase]}
\xx Sabon
&ff fl & shelfful & {V}erzweiflung & Verzweif"|lung & Verzweiflung \\
\gdef\xx{\setmainfont{Palatino Linotype}[Scale=MatchLowercase]}
\xx Palatino
&ff fl & shelfful & {V}erzweiflung & Verzweif"|lung & Verzweiflung \\
\gdef\xx{\setmainfont{Linux Libertine O}[Scale=MatchLowercase]}
\xx Linux Lib.\ O
&ff fl & shelfful & {V}erzweiflung & Verzweif"|lung & Verzweiflung &
Verzwei\symbol{57568}\-lung\\
\end{tabular}
\bigskip
\setmainfont{EB Garamond}
Another comparison of the methods' outputs (EB Garmond only):
\begin{tabular}{@{}llll@{}}
\uselig{höflich} & \uselig{trefflich} & \uselig{aufisst} & bad!\\
höflich & trefflich & aufisst & selnolig \\
höf"|lich & treff"|lich & auf"|isst & babel \verb+"|+ \\
höf\discretionary{-}{}{\kern0.10em}lich
& treff\discretionary{-}{}{\kern0.10em}lich
& auf\discretionary{-}{}{\kern0.10em}isst
& ``new'' method --- not good either \\
hö\symbol{983911}\-lich
& tre\symbol{983904}\-lich
& au\symbol{983911}\-isst
& f.short \& f\_f.short --- best!
\end{tabular}
\end{document}