如何在 xterm 中微调 TTF 渲染?

如何在 xterm 中微调 TTF 渲染?

在过去的几天里,我一直在尝试让 xterm 显示与过去几年我在 konsole 中习惯使用的相同的字体——即使字体尺寸相对较小,它对我来说也运行得很好。xterm 似乎以一种让我更难阅读的方式呈现字体。

这里有一些截图,以供比较。

xterm:
xterm 渲染

控制台:
控制台渲染

有问题的字体是 DejaVu Sans Mono 8。显​​然,两者都是抗锯齿的。我甚至将 konsole 的配色方案应用到了 xterm,以为这可能是造成差异的原因,但事实并非如此。此外,在 konsole 中,我启用了“以粗体字体绘制浓烈颜色”复选框,但粗体和常规字体的差异都很明显。

区别似乎在于每个应用程序对字体进行抗锯齿处理的程度。在 xterm 中,文本更加模糊,也更加难以阅读,至少对我来说是这样。字符 可能最明显m,在非粗体版本中,xterm 中的第一个“腿”跨两个像素,而在 konsole 中,它又好又清晰。

我在 Gentoo 和 Ubuntu 上都得到了相同的结果,并且在 Gentoo 笔记本电脑上采用了保守设置/etc/fonts/conf.d,而在 Ubuntu 上采用了一体化设置。

如果你能弄清楚为什么 xterm 无法显示某些非拉丁字符,那么你将获得加分,尽管我对此并不介意。这对我来说毫无意义。不过,这可能是一个线索...

这是我的相关部分.Xresources

XTerm*faceName: DejaVu Sans Mono
XTerm*faceSize: 8
XTerm*background: #000000
XTerm*foreground: #B2B2B2
XTerm*color0:  #000000
XTerm*color1:  #B21818
XTerm*color2:  #18B218
XTerm*color3:  #B26818
XTerm*color4:  #1818B2
XTerm*color5:  #B218B2
XTerm*color6:  #18B2B2
XTerm*color7:  #B2B2B2
XTerm*color8:  #686868
XTerm*color9:  #FF5454
XTerm*color10: #54FF54
XTerm*color11: #FFFF54
XTerm*color12: #5454FF
XTerm*color13: #FF54FF
XTerm*color14: #54FFFF
XTerm*color15: #FFFFFF
XTerm*boldColors: true

更新:澄清一下,让 xterm 使用 TTF 很简单;我正在寻找一种方法来微调 xterm 中 TTF 的呈现方式,以匹配 konsole(以及几乎任何其他 X11 应用程序)使用的设置。出于某种原因,xterm 似乎忽略了除了我尝试设置的 TTF 字体的字体名称和字体大小之外的所有内容,无论是在 Xresources 中,还是在我的字体配置设置中(其余系统都会正确获取)。

答案1

在 xterm(1) 中,您可以通过按住 CTRL 键并在窗口中单击鼠标右键来更改字体类型。我说“有点”是因为您没有太多选择。单击“TrueType”选项将为您提供更接近所需结果的结果。我相信您知道,您可以通过编辑 Xresources 文件来获得更多控制权 - 请参阅:https://wiki.archlinux.org/index.php/Xterm有关如何修改以满足您的需要的示例。

xterm(1) 默认不显示大多数非拉丁字符。您可以使用 -u8 选项或使用 uxterm(1) 包装器

尝试此命令,您可以调整大小以满足您的需要,或者忽略它并按住 CTRL 键右键单击以更改字体大小

xterm -u8 -fn 7x13 -fa “DejaVu Sans Mono:size=8:antialias=true”

答案2

这是因为 GTK 应用程序和 xterm 使用截然不同的方式来配置字体。GTK 使用 font-config,而 xterm/Xft 使用 X 资源。

要使用 X 资源配置 Xft 字体,请将其添加到您的~/.Xresources

  Xft.rgba: rgb

此设置修改抗锯齿类型。以下是使用xmag、没有任何 rgba 设置以及rgbgrb、拍摄的 xterm 屏幕截图示例vrgb。它们都具有不同的清晰度、色彩保真度和表观亮度。

在此处输入图片描述 在此处输入图片描述 在此处输入图片描述 在此处输入图片描述

还有Xft.antialiasXft.hinting、和其他旋钮。有关详细信息,请Xft.hintstyle参阅Xft.lcdfilterfontconfig 文档

答案3

您看到的 Konsole 和 xterm 之间的渲染差异归结于字体配置提示设置。如果您比较两个屏幕截图之间的字形形状,就会发现其中涉及提示;Konsole 中的零形状略有不同,因为它已被对齐到像素网格(这是字体提示所做的操作之一)。

Konsole 可能会从 KDE 配置的某些附加层中获取设置,而 xterm 仅遵守低级字体配置设置。

我最近一直在我的 Arch 系统上研究这个问题,最接近您在 Konsole 中看到的设置组合是(将其放入您的.Xresources):

Xft.antialias: 1
Xft.autohint: 1
Xft.hintstyle: hintslight

有些字体包含字体设计者提供的提示信息。有些则不包含。freetype 自动提示器 ( Xft.autohint: 1) 将为字体生成提示,hintslight如果存在提示,提示级别将回退到包含的提示。它可能也值得一试hintfull;这取决于您的偏好,以及您使用的字体中存在的提示质量。

(您没有在这些屏幕截图中使用子像素抗锯齿,另一位评论者已经解释了如果您愿意如何开始使用它。)

以下是我在每个提示级别的前后截图。(192dpi 显示屏上的 7pt Anonymous Pro。)

默认值:

具有默认提示的 ASCII 字符集

上面的配置:

带轻微提示的 ASCII 字符集

相关内容