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”这个词似乎不平衡因为它们包含的连字不合适(“fl”比“ff”更紧密)。手动修复每个单词并不是我所期待的解决方案。
答案1
该字体只有fi
和fl
连字,这实际上是不必要的;虚拟字体中的ff
、ffi
和连字是分别通过将两个 或与或放在一起获得的;以下是 的相关部分:ffl
f
f
fi
fl
ffl
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或 的单词将保留相应的连字。)可以通过包的和宏关闭和重新打开连字抑制。fl
ffl
ff
fl
\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 字体。