在过去的几天里,我一直在尝试让 xterm 显示与过去几年我在 konsole 中习惯使用的相同的字体——即使字体尺寸相对较小,它对我来说也运行得很好。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 设置以及rgb
、grb
、拍摄的 xterm 屏幕截图示例vrgb
。它们都具有不同的清晰度、色彩保真度和表观亮度。
还有Xft.antialias
、Xft.hinting
、和其他旋钮。有关详细信息,请Xft.hintstyle
参阅Xft.lcdfilter
fontconfig 文档。
答案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。)
默认值:
上面的配置: