使用 selnolig 调整字距

使用 selnolig 调整字距

您可以使用该selnolig包自动拆分不适当的连字。例如,“leaflet”可能没有 fl 连字,而这可以通过 来防止\nolig{leaflet}{leaf|let}。但对于许多字体,拆分此连字(使用selnolig)仍然无法防止f接触l。我甚至尝试使用flfontforge 调整该对的字距,但似乎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

在拆分印刷上不合适的连字时,一个主要且坦率地说令人烦恼的实际问题flffl,应在f(或)ff和之间插入多少空格(如果有的话) l。拆分连字时不会出现此问题(参见“shelfful”和下面的屏幕截图),并且在拆分(例如德语中的“aufisst”)和(例如“Stoffisolierung”)连字ff时,这通常是一个不那么令人烦恼的问题。fiffi

f应该在(或ff)和之间插入的“正确”空白量l恰好取决于fff字形的确切形状。对于某些字体,例如 Palatino、Aldus 和 Dante,根本不需要额外的空白,因为这些字体的f和字形具有相当短的“臂” ,即使不插入空白也ff不会与字形相撞。(另外:这可能是这些字体故意设计的特点。)该包的方法被编程为插入的空白。虽然这个量对于 Computer Modern 和 Latin Modern 来说是可以的,但实际上一方面对于 Palatino 来说太多了,另一方面对于 EB Garamond、Caslon、Sabon 和 Linux Liberine O 等字体来说又不够。例如,对于 EB Garamond,如果和字形绝对不能相互接触,则看起来——或者说是用 的方法插入的量的三倍以上——是必须插入的空白量。在我看来,如果插入 0.1em 的空白,排版后的单词“Verzweiflung”看起来就很糟糕:一个问题——不合适的连字符——已被另一个问题——单词内部难看的间隙所取代——这几乎同样糟糕!(另外:也许您提到的“排版规则”,即相邻的非连字符不能接触,必须重新考虑。)lbabel"|0.03em0.1embabel"|flfl

那么,拆分fl和连字时真正的解决方案是使用具有“短”臂ffl的字形f和变体,即,臂不会向右突出(太多),因此不会与“高”字形(如)发生冲突。不幸的是,目前很少有字体提供这种短臂字形。我知道只有 EB Garamond 和 Linux Libertine 字体系列提供它们。(遗憾的是,EB Garamond 和 Linux Libertine 存储其短臂 f 变体的“插槽”并不相同。这使得编写自动使用短臂字形的程序变得相当繁琐且容易出错。这也是为什么我还没有在包中实现短 f 方法的原因……)fflselnolig

另一种解决方案(您可能可用或不可用)是使用诸如 Palatino 之类的字体,其fff字形的臂较短,因此不会与尾随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}

相关内容