如何在Firefox中修复TTF字体的连字(tt,ti,fi,ff等)?


24

对于某些Windows字体,存在一个显示问题,连字字距调整似乎会翻转并使两个字母加粗。这是在Firefox中使用Helvetica的电子邮件的屏幕截图:

在此处输入图片说明

如您所见,这似乎与交叉字符(tf)相互连接以及类似的方式有关i

我(在多个系统上)遇到这个问题已经很长时间了,想知道是否有人出现过类似的问题并找到了解决问题的方法。

注意:我认为这只会影响Firefox。Chrome和LibreOffice都很好。

Answers:


27

aldeby提供了另一个适用于所有应用程序(包括Libre Office)的解决方案:

编辑或创建文件~/.fonts.conf并将此代码粘贴到其中:

<match target="font" >
<edit name="embeddedbitmap" mode="assign">
<bool>false</bool>
</edit>
</match>

确保保留XML结构。

注销并再次登录,Calibri(可能还有其他一些字体)看起来会好得多(实际上比这里给出的其他答案还要好,因为丑陋的位图替换已完全禁用)。


3
与以前的解决方案相比,这是一个更好的解决方案,因为它是全局解决方案,并且消除连字是一个大难题。那里的连接符使文本更令人愉悦,并且关闭它们以解决配置问题并不理想。
13年

任何略带OCD或保留肛门的人都足以关心正确格式化此XML文件的内容(当然,您Linux的人永远不会关心这些事情;<?xml version="1.0"?><!DOCTYPE fontconfig SYSTEM "fonts.dtd"><fontconfig><match target="font"><edit name="embeddedbitmap" mode="assign"><bool>false</bool></edit></match></fontconfig>
Adam Plocher

链接到aldeby现在会导致某些网络钓鱼诈骗站点
charsi 18'Oct

1
@charsi谢谢,我将其替换为Web存档的链接。
Calimo

我什至不必注销并再次登录。只需刷新页面(在Firefox中)并重新启动应用程序(LibreOffice)就足够了。
Marc.2377

9

禁用连字(请参见Calimo的fonts.conf答案是错误的方向!它可能会消除Calibri等字体中过分锯齿的“粗体”连字,但同时也会消除某些排版的美感。这与缩小字体非常相似,直到您无法分辨出区别为止。

我通过删除Calibri字体,安装“ 与Calibri 度量兼容 ”并与“到fontconfig的映射项(local.conf)打包在一起”的Carlito并刷新字体缓存来解决我的系统问题:

$ rm ~/.fonts/microsoft/CALIBRI*
$ sudo apt install fonts-crosextra-carlito
$ fc-cache

然后,您可以验证Carlito代表Calibri:

$ fc-match Calibri
Carlito-Regular.ttf: "Carlito" "Regular"

(如果这不起作用,sudo rm /usr/share/fonts/truetype/msttcorefonts/calibri*尽管情况和确切位置可能有所不同,但是您可能需要类似的东西。)

在删除Microsoft的Calibri之前,我在使用Calibri的LibreOffice中保存了一个测试文档,并进行了截屏。之后,我退出LibreOffice,再次打开它,然后加载我的测试文档。“ Calibri”字体名称用斜体表示,表示已被替换。我拍摄了该替代版本的屏幕截图,并将其粘贴到原始版本下方:

校准测试

上面的文本是一对13pt Calibri的屏幕截图,Microsoft的Calibri在Carlito上方,并通过fontconfig进行了匹配。没有使用LibreOffice 5.0.5.1呈现的粗体,无格式“对字距调整”。

Carlito非常接近Calibri,连字正确渲染,并且整体上更漂亮。

您可以使用Caladea for Cambria进行相同的操作fonts-crosextra-caladea,也可以将Google的Croscore字体 Arimo,Tinos和Cousine用于ArialTimes New RomanCourier Newfonts-croscore。在Debian的替代Calibri和Cambria字体 Wiki中了解更多信息。

但是Helvetica呢?

该问题询问Helvetica字体,这是Apple首选的sans-serif字体。在更改为Calibri之前,Microsoft更喜欢Arial。默认的Linux映射因发行版而异,但通常为Nimbus Sans LLiberation Sans,例如

$ fc-match Helvetica
n019003l.pfb: "Nimbus Sans L" "Regular"

如果运行该命令并获得Arial,则这是出现上述连字问题的一个很好的理由-Arial并不是很好的字体。

Helvetica具有相当的文化底蕴,我找不到与Helvetica完全公制兼容的字体。Arial(以及与Arial 公制兼容的字体,包括Liberation Sans及其fork Arimo,具有相同的字符宽度(这意味着它们“主要”与公制兼容;文本将使用与Helvetica相同的包装方式)。在免费字体中, Liberation Sans和Nimbus Sans 似乎具有最相似的美学。

还有IBM Plex,这是一种背后有很多钱的新字体[ 1 ] [ 2 ]。Plex旨在代替IBM的所有材料中的Helvetica(它也压缩了sans以及衬线和等宽字体),尽管它与Helvetica或其他字体在度量上完全不兼容。Font Squirrel可以很好地查看Plex字体示例

Fontconfig别名

要将Helvetica手动别名为另一种字体(因此不需要删除Calibri和/或Arial,尽管在这种情况下,您还应该手动别名那些字体),请编辑~/.config/fontconfig/fonts.conf文件(对于较旧的系统,即~/.fonts.conf。为避免混淆,我将后者符号化前者)作为注意到这个答案,加入了新的<alias>。对于黑体(此人使用阿里莫部分请确保您有它安装):

<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>

  <alias>
    <family>Helvetica</family>
    <prefer><family>Arimo</family></prefer>
  </alias>

</fontconfig>

1
这是一个比公认的更好的答案。我想指出的是,在Arch
Xananax

第一行现在应该是sudo rm -R / usr / share / fonts / truetype / calibri
dez93_2000

如果在linux上fc-match Helvetica的结果是arial,您知道如何强制进行Sans解放吗?只是删除Arial?谢谢
dez93_2000

@ dez93_2000 –大概是/usr/share/fonts/truetype/msttcorefonts/callibri*。我将更新我的答案以解决字体别名问题,因为它不会包含在注释中。
亚当·卡兹

我仔细检查了接受答案的渲染结果(使用字体Calibri),发现与已知的良好渲染器没有任何区别。绝对没有美不容错过。
Marc.2377

6

lgarzo的答案将工作只能在具有上的文字是“noligs”类网站(大部分网站都没有)。

要全局禁用所有网站上的连字,请将以下行添加到您的userChrome.css

* { -moz-font-feature-settings: "liga" 0; }

最简单的方法是使用时尚扩展名创建新样式。


为时尚建议+1。AFAIR我引用了Mozilla文档(因为我曾期望OP能够按照他的意愿进行转换:))我的意图是将规则包括在页面的CSS中。(不过,无法检查来源。它似乎已关闭了ATM。)
lgarzo

1
根据stackoverflow.com/a/15161336/4464570,该语法仅在Firefox 14之前有效,并且现在已不再被浏览器识别。我编辑了您的帖子,以使用当前语法对其进行更新。
字节指挥官

4

看图片时,我想到了几句话:

  • 连字似乎是抗锯齿的,而本文的其余部分则没有。因此,它看起来比普通文本更胖(尽管我不能否认它看起来也大胆)。
  • AFAIK Helvetica字体是非标准字体,即默认Windows安装中没有。是否已安装,或者它是其他字体?

我认为问题是由于字体不正确支持连字/字距调整。

您可以使用以下CSS规则禁用FF中的连字:

/* disable common ligatures, usually on by default */
.noligs { -moz-font-feature-settings: "liga" 0; }

来源:CSS参考:Mozilla扩展


根据stackoverflow.com/a/15161336/4464570,该语法仅在Firefox 14之前有效,并且现在已不再被浏览器识别。我编辑了您的帖子,以使用当前语法对其进行更新。
字节指挥官

1

除了Calimo的答案外,Archlinux用户还可以找到帮助https://wiki.archlinux.org/index.php/font_configuration-禁用位图字体

它建议创建一个本地配置文件〜/ .config / fontconfig / conf.d / 20-no-embedded.conf,但是我选择了系统范围的选项

sudo touch /etc/fonts/conf.d/20-no-embedded.conf
sudo chmod 777 /etc/fonts/conf.d/20-no-embedded.conf
nano 777 /etc/fonts/conf.d/20-no-embedded.conf

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
  <match target="font">
    <edit name="embeddedbitmap" mode="assign">
      <bool>false</bool>
    </edit>
  </match>
</fontconfig>

然后重新启动应用程序(在我的情况下是雷鸟)


如果在“ <match target =“ font”>”行的正下方添加:<test name =“ family”> <string> Calibri </ string> </ test>或其他字体名称(Helvetica),您将仅编辑该特定字体的字体设置。
zeehio

权限应为644,而不是777,因为您要在其中放置文件(而不是符号链接)。
Marc.2377
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.