今天有个朋友像发现新大陆式跟我说,当他输入wifi这个字母时,fi会合成一个字fi。我装作很懂的样子,说这个叫连字(合字),跟你用的字体有关,然后自己赶紧搜索了一波。
合字、连字、连结字或合体字(英语:Ligature),在西方字体排印学中一般表示将多于一个字母的合成一个字形。如印刷品中常常将拉丁字母两个字母fi的i上一点常与f的一钩合并,而德语字母ß原为ss等等。汉字的合字在不同情况下也称作合文或合体字,例如,武则天的“曌”就是个合字,有些输入法打不出的字,也只能靠合字。
为什么会出现合字?
首先一个重要原因:字形与字形之间不能和睦相处。例如,大多数衬线字体中的 f 和 i ,字母i上的点会抵挡到字母f的弧形勾,无法正确排印,所以干脆就制造一个合字铅字,把i的点融入f的勾来直接使用。这就是连字。如”fi”、”fl”、”ffi”:
还有一种所谓的酌情连字,纯粹是一种让设计上具有特点风格,并非因为某些字符相邻会产生干扰。如:”st”、”ct”:
连字对编程有什么影响?
通常情况下,程序员的IDE、编辑器使用的是等宽字体,不会有连字出现。而浏览器通常情况下也不会使用连字,但如果你想使用连字,可以通过Unicode中连字字符编码来实现,比如输入 fi可以得到fi的连字字符。
这里推荐一个Unicode字符搜索网站:http://graphemica.com/,你只要输入’fi’,就会得到连字编码:http://graphemica.com/fi。
当然,这种编码的方案有好些个缺点:
- 显然,它让HTML结构层的代码变得很不好读,而且不好写。(你肯定不认识U+FB01 是什么字符)。
- 如果当前字体并没有为连字字符设计样式,U+FB01与正常显示效果没差别,这就失去用使用编码的意义。
- 并不是所有连字效果都有一个对应的、标准的Unicode字符。
- 字符编码会破坏文本的可访问性,包括对文本的复制、粘贴、搜索。你总不希望复制wifi这个单词时,出现wifi
解决方案
在CSS字体V3(http://w3.org/TR/css3-fonts)中,原有的font-variant被升级成了一个简写属性,由很多新的展开式属性组合而成,其中之一叫作font-variant-ligatures,专门用来控制连字效果的开启和关闭,如果要启动所有可能的连字,需要同时指定这三个标识符:
font-variant-ligatures: common-ligatures
discretionary-ligatures
historical-ligatures;
最后,连字欣赏:
参考资料:
- Lea Verou :《CSS 揭秘》
- https://zh.wikipedia.org/wiki/合字
