为什么我应该将 Unicode 的特殊字符用于罗马数字?

平面设计 字体 排版 最佳实践
2022-01-04 00:14:50

这是为了回答这个问题的评论中出现的关于罗马数字的 Unicode 字符的问题:

为什么这比通常输入 ai、ai-ai、ai-ai-ai、vee-ai 等的方式更必要或更受欢迎?

从一开始,在 Unicode 的数字形式块中,存在罗马数字的代码点,乍一看,这些代码点在外观上与标准大写拉丁字母或其组合 (U+2160 – U+217F) 非常相似。例如,U+2165(罗马数字六)看起来很像VI(拉丁文大写字母 V 和拉丁文大写字母 I)。

因此,问题出现了,为什么不应该使用后者来表示这些数字,例如,使用 typeLouis VII而不是Louis Ⅶ. 显然,不使用特殊字符可以避免与不支持它们的字体的兼容性问题。但即使我知道文本将使用支持这些字符的字体呈现,我为什么还要费心使用它们呢?

3个回答

在许多字体中,您确实会发现将 Unicode 字符用于罗马数字和仅使用标准拉丁字母组合它们之间几乎没有任何区别。例如,下图显示了使用 FreeSans 渲染的Louis VII(顶部)和(底部,使用罗马数字的代码点):Louis Ⅶ

在此处输入图像描述

除了间距的微小差异(这可能不是故意的)之外,输出是相同的。

这是使用 DejaVu Sans 呈现的相同文本:

在此处输入图像描述

虽然字符看起来仍然相同,但间距存在很大差异。后者是否更适合罗马数字可能是一个品味问题,但对于常规全大写字母来说,它肯定不是一个好的字距调整选择。

Linux Libertine 更进一步:

在此处输入图像描述

这里的罗马数字略小于大写字母,因此与字体的阿拉伯数字相匹配。最重要的是,它们相互关联,再现了手绘罗马数字中常见的特征。

现在,有些人可能仍然认为上述内容没有任何改进,或者它们不值得付出努力。所以这里有一个例子,不使用 Unicode 字符会产生可怕的结果:

在此处输入图像描述

(请注意,数字的小尺寸反映了一些实际的历史排版。)脚本或书法字体可能会发生类似的情况。

如果没有罗马数字的特定 Unicode 点,则只能通过以下方式解决后一个问题:

  • 使用复杂的 OpenType 功能(或类似功能)来尝试检测大写字母序列是否为罗马数字。这将不可避免地导致同样是有效罗马数字的单词出现问题。

  • 使用简单的 OpenType 功能,需要为每个罗马数字手动激活。

  • 使用 Unicode 的私人使用区域。即使在两种都支持罗马数字的字体之间切换时,也可能会出现兼容性问题。

从 Unicode 的角度来看,大写拉丁字母和罗马数字之间的巨大语义差异应该已经足以对罗马数字进行单独编码。

TL;DR Unicode 联盟建议尽可能使用拉丁字母而不是数字,其中包含数字是为了与东亚字体兼容。

完整的故事:(与上述断言的理由)

除非您正在做一些东亚排版,否则使用来自 unicode (U+2160 — U+217F) 的(非古代)罗马数字字符是一种 hack。

包含这些字符是为了与 Unicode 之前的东亚标准兼容。在东亚文本从上到下排版的情况下,这些字符保持垂直,而在这种情况下,拉丁字符(例如名称)的文本通常是横向书写的。

引用 Unicode 标准的最新版本(v 7.0,第 22 章,第 20 页)

罗马数字。对于大多数目的,最好由适当的拉丁字母序列组成罗马数字。但是,罗马数字到 12 的大小写变体,加上 L、C、D 和 M,已在数字形式块 (U+2150..U+218F) 中进行编码,以与东亚标准兼容。与拉丁字母序列不同,这些符号在垂直布局中保持直立。此外,在某些语言环境中,紧凑的日期格式使用罗马数字表示月份,但可能期望使用单个字符。

因此,理论上,罗马数字和字母之间的区别在于富文本,如斜体、字体更改或可选连字。也就是说,正如@Wrzlprmft 所示,某些字体使用它来避免每个罗马数字的字体更改,同时保持良好的排版。

XII 和 XIII 的字符的存在意味着同一个数字有几种不同的编码,这导致文本搜索困难:如果你写关于 Louis XII 和 Louis XIII,你可能会将 XIII 写为 X+I+ I+I,但是你会把 XII 写成一个字符吗?或者作为 X+I+I 与 XIII 有一致的显示?在使用罗马数字字符时,这个问题没有一个好的答案,这就是为什么 Unicode 联盟建议尽可能使用拉丁字母而不是数字的原因。

编辑:在开头 添加了TL;DR断言

从外观的角度来看,可能没有太大区别。因此,如果您仅发布印刷材料,则没有区别,除了 Wrzlprmft 在他的出色回答中指出的某些字体。

语义很重要

语义差异很大。通过使用罗马数字,可以清楚地表明您说的是数字 5 而不是字母 V。当然它们看起来相同,但它们的含义不同。这意味着当您搜索“XX 版本 5”时,搜索引擎可能有更高的机会找到“XX 标记 V”。

事实上,有些事情工作不好的原因是因为我们没有嵌入语义信息。如果我们愿意,世界确实会变得更美好。因此,使用正确的语义含义与在文字处理器中使用样式与手动设置样式大致相同。人类方面的差异不大,但自动化方面的力量很大。

字体应该使用不同的罗马数字

字体制造商并没有真正使用这些,因为它们并不经常使用。但是通过使用这些,您可以获得将它们与文本区分开来的字母上的罗马数字板。因此,该功能未得到充分利用,因为它很少见。字体并没有真正实现一切,也不应该。通过使用这些,如果它们存在,您将受益。

结论

这当然是一个鸡和一个鸡蛋类型的问题。如果人们不使用特殊字符范围,则不会对这些范围进行特殊处理。所以字体不支持特殊样式的罗马文字,因为这样做只会浪费精力在没有人使用的功能上。同样适用于搜索:如果没有人使用罗马文字,那么没有搜索引擎会找到罗马文字并且语义会丢失。语义学因没有采用正确的语义含义而受苦。同样的事情当然也适用于更广泛的 Unicode 字符。

至于输入的复杂性,是的,大多数用户不能编写扩展字符,但是如果有道理的话,这不是知识渊博的人跳过这样做的借口。如果没有人让事情变得更好,就永远不会取得进展。Hell even word 具有通过键入 /alpha 来编写 alpha 的模式。所以真的没有理由不能简单地标记数字甚至自动建议它们。同样,如果没有人这样做,那么它将永远不会得到更广泛的采用。