xterm:带圆圈的数字(U+2460-U+2470)仅显示字形的左半部分

xterm:带圆圈的数字(U+2460-U+2470)仅显示字形的左半部分

我正在使用 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)中打开字体来查看。因此,当程序需要显示它们时,它们将从不同的字体加载 - 可能是具有不同度量的字体,也可能根本不是等宽字体。

FontForge 中加载的 DejaVuSansMono.ttf 的屏幕截图,显示了围绕“带圆圈的数字”范围的字形网格,其中大多数是完全空的单元格,表示除了一两个之外“不存在于此字体中”。

如何处理结果取决于每个终端的内部文本渲染方法。(有些终端可能会单独绘制每个网格单元,其他终端可能会尝试将每行绘制为一个单元;有些终端会绘制实心背景,其他终端会直接在前一个字符之上绘制。)

主要字体确实会影响正在使用的后备字体(在某种程度上,例如,一些等宽字体实际上没有正确分类,并且 fontconfig 最终建议为它们使用非等宽字体作为后备字体)。每个终端使用的文本绘制库之间也可能存在差异(Xterm 使用 Xft 接口到 FreeType;gnome-terminal 使用 Pango;等等)。

相关内容