为什么等宽字体中的某些字符实际上并不是等宽的?

为什么等宽字体中的某些字符实际上并不是等宽的?

原始问题中此代码段的行长不相等。请参阅下面的更正版本。我不确定这会如何影响相关图像

| entity    | characters    |
| ---       | ---           |
| tab       | <see extends> |
| space     | • ∙ · ⋅ .     |
| nbsp      | ␣ _ ~ +       |
| precedes  | … ◀ ❮ « ‹ ← ⟨ < |
| extends   | … ▶ ❯ » › → ⟩ > |
| eol       | ↲ ¶ $ ❦ ❧     |
| showbreak | ↪ ↳ ^         |

Vim(唯一能够正确显示且不会错位的编辑器!):

在此处输入图片描述

Emacs:

在此处输入图片描述

Sublime Text

在此处输入图片描述

Visual Studio 代码

在此处输入图片描述

记事本

在此处输入图片描述

字体相同:Consolas。

为什么这种情况会发生在 Windows 7 上?您在 Windows 10 上遇到同样的问题吗?我该如何阻止它?

[更新,请参阅 Tetsujin 答案下的评论]以下是我从问题顶部看到的代码示例:

在此处输入图片描述

(浏览器是基于 Chromium 的 Edge。字体是 Consolas。)

编辑
代码部分的行长修正版本……

| entity    | characters      |
| ---       | ---             |
| tab       | <see extends>   |
| space     | • ∙ · ⋅ .       |
| nbsp      | ␣ _ ~ +         |
| precedes  | … ◀ ❮ « ‹ ← ⟨ < |
| extends   | … ▶ ❯ » › → ⟩ > |
| eol       | ↲ ¶ $ ❦ ❧       |
| showbreak | ↪ ↳ ^           |

答案1

初始问题中的行长并不全都相等,因此需要对此答案进行一些修改。

它们都使用不同的字体替代 Consolas 本身不包含的字形 [或在某些情况下无法找到替代字体*] 并且替代字体不是等宽字体 [或不是完全相同大小的等宽字体]。

一种测试方法是在编辑器中打开字体并查看它缺少哪些字形。

在此处输入图片描述

不幸的是,很难说出替代的是什么。

完整的“治愈”方法是使用已经包含所有所需字形的字体,因此不需要任何替代品。

Deja Vu Sans Mono 始终是比其他字体更全面的优秀(并且能够很好地跨平台)候选字体

在此处输入图片描述

维基百科上有一份等宽字体列表,网址为https://en.wikipedia.org/wiki/List_of_monospaced_typefaces

*Vim、emacs、Sublime 和 Notepad 都无法替换所有字符,因此具有讽刺意味的是,Vim“表现最佳”是因为它实际上“失败了最佳”。

顺便说一句,我正在 Mac 上看这个,它“应该擅长这种事情”……证明没有系统是完美的——它使用 Stack Exchange 的标准字体弄乱了两行……

在此处输入图片描述

编辑
我刚刚注意到问题顶部代码部分的行长并不都相等,主要是管道符之间有 15 个字符,但有 2 行有 17 个字符......这会把所有内容都扔出去。

使用 SE 的默认设置修改了 Mac 字体替换的行长校正图片……

在此处输入图片描述

现在可以正确呈现了(我有没有提到 Mac 应该擅长这些东西?;)

Deja Vu Sans、Menlo [似乎是 SE Mac 默认设置] 和 Consolas [在此比较中表现不佳] 的行长校正图像。

在此处输入图片描述

答案2

每当我处理 ASCII 艺术流程图等对齐至关重要的内容时,我喜欢将内容粘贴到 Word 等程序中以进行健全性检查。粘贴问题中的内容,按 Ctrl+A,然后将字体更改为 Consolas,结果如下:

在此处输入图片描述

现在,将光标放在一个字符后面,屏幕顶部的字体选择器将显示该字符使用的字体。我现在可以看到“空格”行上的倒数第二个点使用的是 Cambria Math,“nbsp”中的第一个条目使用的是 MS Gothic,呈现为蓝色框的字形是 Segoe UI Emoji,等等。这些都表示 Consolas 中没有的字符。这使得测试各种字体选择并找到具有您需要的所有字形的字体变得相当容易。

在上面的截图中,我还告诉 Word 显示空格字符的格式标记(文件 > 选项 > 显示)。这通常会使哪些字符的宽度与其他字符不同变得非常明显。在这个特定的例子中,标记与“空格”线上的点混合在一起,但仍然足以看到“扩展”中“x”下方的点比其他点更窄。

相关内容