我正在使用 ubuntu 21.04(包 xterm361-1ubuntu3)附带的 xterm 版本,某些字符(例如带圆圈的数字)无法正确显示:字符的右半部分被剪切/截断。
在 bash 提示符下:
$ echo $'\u2460\u2461\u2462' etc.
我只看到圆圈的左半部分和 1、2、3 等数字的一部分。右半部分被以下字符覆盖(在本例中为左半部分)。
当我在 gnome-terminal 或 KDE 的 Konsole(在同一系统上)上运行相同的命令时,我可以看到整个字符/字形紧密排列且相互接触但易于阅读。
我使用以下标志启动 xterm:
$ xterm -name xterm -u8 +vb -tn "xterm-256color" -fa 'Inconsolata for Powerline' -fs 6 -maximize
我可以看到同一范围内的许多字符(括号内的字母、旧式黑白笑脸、一些星星、箭头……其他伪图形和符号……)的行为也类似。
我尝试过其他轮廓字体(Inconsolata、DejaVuSansMono、Unifont……),结果相同。
这是预期的行为吗?还是我需要使用特定标志/X 资源(或者可能是编译时配置选项)运行 xterm,以便正确呈现这些字符?
答案1
这很正常。这些角色是更宽,因为它们是从完全不同的字体加载的。
DejaVu Sans Mono 其实没有带圆圈数字的字形,您可以在编辑器(例如 FontForge)中打开字体来查看。因此,当程序需要显示它们时,它们将从不同的字体加载 - 可能是具有不同度量的字体,也可能根本不是等宽字体。
如何处理结果取决于每个终端的内部文本渲染方法。(有些终端可能会单独绘制每个网格单元,其他终端可能会尝试将每行绘制为一个单元;有些终端会绘制实心背景,其他终端会直接在前一个字符之上绘制。)
主要字体确实会影响正在使用的后备字体(在某种程度上,例如,一些等宽字体实际上没有正确分类,并且 fontconfig 最终建议为它们使用非等宽字体作为后备字体)。每个终端使用的文本绘制库之间也可能存在差异(Xterm 使用 Xft 接口到 FreeType;gnome-terminal 使用 Pango;等等)。