当 3 个字母的连字符适用时,抑制 2 个字母的连字符

当 3 个字母的连字符适用时,抑制 2 个字母的连字符

TeX 中连字的自动处理臭名昭著 难的ff但我想知道,在有和fl连字但没有连字的字体中ffl,是否有可能抑制文本中出现“ffl”时使用任何连字。示例如下:

\documentclass[a5paper,12pt]{article}
\renewcommand*{\sfdefault}{uop}
\renewcommand{\familydefault}{\sfdefault}
\begin{document}
\thispagestyle{empty}
Muffling affluent waffles baffles sniffling Mifflin.

Muf{}f{}ling af{}f{}luent waf{}f{}les baf{}f{}les snif{}f{}ling Mif{}f{}lin.
\end{document}

许多有或没有连字符的 ffl 单词

就目前情况来看,“ffl”这个词似乎不平衡因为它们包含的连字不合适(“fl”比“ff”更紧密)。手动修复每个单词并不是我所期待的解决方案。

答案1

该字体只有fifl连字,这实际上是不必要的;虚拟字体中的ffffi和连字是分别通过将两个 或与或放在一起获得的;以下是 的相关部分:fflfffiflffl

tftopl uopr7t

首先,让我们看一下f

(CHARACTER C f
   (CHARWD R 0.276)
   (CHARHT R 0.745999)
   (CHARDP R 0.0055)
   (COMMENT
      (LIG C i O 14)
      (LIG C f O 13)
      (LIG C l O 15)
   [...]

八进制 13也是如此ff

(CHARACTER O 13
   (CHARWD R 0.573)
   (CHARHT R 0.745999)
   (CHARDP R 0.0055)
   (COMMENT
      (LIG C i O 16)
      (LIG C l O 17)
   [...]

因此ffl位于八进制 17 位置。

vptovf uopr7t

[...]
(DESIGNSIZE R 10.0)
[...]
(MAPFONT D 0
   (FONTNAME uopr8r)
   (FONTCHECKSUM O 35406442446)
   (FONTAT R 1.0)
   (FONTDSIZE R 10.0)
   )

这说明字形取自哪种字体。让我们看看八进制 17:

(CHARACTER O 17
   (CHARWD R 0.834)
   (CHARHT R 0.745999)
   (CHARDP R 0.0055)
   (COMMENT
      (KRN C v R -0.019)
      (KRN C y R -0.021)
      )
   (MAP
      (SETCHAR C f)
      (MOVERIGHT R 0.021)
      (SETCHAR O 3)
      )
   )

这表示该字符f已排版,字距为 0.21pt(设计大小为 10pt),然后使用字符八进制 3;在原始字体中,fl有连字。

构建连字符时应用了相同的字距调整ff。但是,这会导致两个f' 之间的距离比没有连字符时要远,如您的图片所示。

这似乎做得不太仔细;我的建议是禁用所有f连字符。

\documentclass[a5paper,12pt]{article}
\usepackage{microtype}

\DisableLigatures[f]{encoding=*,family=uop}

\renewcommand*{\sfdefault}{uop}

\begin{document}
\thispagestyle{empty}

\noindent % show that ligatures are not disabled altogether
Muffling affluent waffles\\
baffles sniffling Mifflin.

\sffamily
\noindent % but only for the classico font
Muffling affluent waffles\\
baffles sniffling Mifflin.

\end{document}

在此处输入图片描述

答案2

如果你愿意从 pdfLaTeX 切换到 LuaLaTeX,你可以使用塞尔诺利格包——完全披露:我是这个包的作者 :-)——轻松禁用包含三元组的单词的ff和连字。(包含 just或 的单词将保留相应的连字。)可以通过包的和宏关闭和重新打开连字抑制。flfflfffl\selnoligoff\selnoligon

在此处输入图片描述

% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{fontspec}
\setmainfont[Ligatures=TeX]{Latin Modern Roman} 
\usepackage{selnolig} % for this example, load the package *without* a language option
\nolig{ffl}{f|f|l} % suppress both ff and fl ligatures in words that contain ffl
\begin{document}
``ffl'' ligature disabled:

Muffling affluent waffles baffles sniffling Mifflin

\medskip
but ``ff'' and ``fl'' ligatures still work:

off fly

\selnoligoff % turn off selnolig's work, i.e., re-enable ffl ligature
\bigskip
``ffl'' ligature can be re-enabled:

Muffling affluent waffles baffles sniffling Mifflin
\end{document}

补充一下:由于我的系统上没有“Classico”字体,因此我在此示例中使用了“标准”拉丁现代字体。假设存在一个名为“classico.sty”的包,该包加载 Classico 字体系列,您应该能够执行宏(加载后fontspec\usepackage{classico}\renewcommand{\familydefault}{\sfdefault}在 LuaLaTeX 下使用此 Classico 字体。

相关内容