如何在Unicode中漂亮地显示分数15/16?

8
我今天了解到,虽然常见分数有专用的Unicode值,但要形成像³/₁₆这样不常见的分数,您必须使用上标/下标字符后跟斜杠。 这在这里这里得到确认。
这适用于¹¹/₁₆和¹³/₁₆,但是在¹⁵/₁₆中会出现问题。你看到5比1高吗?我想这是因为为了清晰地显示数字5作为上标,它需要比1和3更高的高度。
好吧,这就产生了一个问题。如何将分数15/16以Unicode字符的方式漂亮地显示?不幸的是,我不能使用sup和sub标记。我没有在HTML页面中显示它。相反,我们正在向一个Java应用程序传递一个字符串,该应用程序将渲染这些值。 我知道它可以很好地呈现Unicode值,但它不会识别HTML标记。 是否有Unicode解决方案?

12
你看五比一高吗?不,我没有看到。这里看起来没问题,听起来你的问题可能是字体而不是 Unicode 的问题。 - user3942918
6
注意,最好使用U+2044 ⁄ 分数斜杆,因为一些字体渲染器能够正确地显示它,如果在斜杠前后使用上标和下标的话⁷⁄₂₃。 - phuclv
4个回答

22

在Unicode中,组成任意分数的“正确”方法是不使用下标和上标数字,而是利用U+2044 FRACTION SLASH字符的特殊属性。您只需键入常规ASCII数字,并用斜杠将它们分开,例如:15⁄16。渲染引擎将自动选择正确的数字形式,产生干净、统一的外观。

我在引号中放置了“正确”一词,因为这种方法不能保证在所有系统上都受到支持,有些支持该方法的系统支持不完全或存在错误。如果您确实需要确保100%的接收者无论使用何种系统都能够看到更或多或少正确的内容,则仍然(勉强)建议使用预格式化的下标和上标作为替代方案。正如其他答案所解释的那样,您遇到的问题是字体问题,如果您无法控制字体设置,则无法解决该问题。


2
好的,假设您编写1 \u2044 16(无空格)以尝试显示1/16作为分数符号。渲染引擎如何知道分数在16之后结束而不是在1之后结束?也就是说,它如何知道这是1/16而不是1/1后跟着6? - ktm5124
3
分数结束于文本渲染器遇到一个不能成为分数一部分的字符,即不是ASCII数字的字符。 - CharlotteBuff
1
延伸这个问题,如果我想显示1又15/16,而不是115/16怎么办?是否有Unicode字符可以用来分隔“1”和“15”,以便呈现引擎知道“1”与“15/16”是分开的? - M. Justin
9
@M.Justin 任何零宽度的不可见字符都可以达到效果。我个人更喜欢使用 U+2064 不可见加号,因为它被编码表示确切的语义概念,但像 U+200C 零宽度非连接符或 U+2060 单词连接器这样的字符也可以起到同样的作用。 - CharlotteBuff

7
我发现了这个网站,Unicode分数生成器:https://lights0123.com/fractions/ 以下是一个示例:³⁄₂
它由以下三个Unicode字符组成:
U+00B3 上标数字三
U+2044 分数线
U+2082 下标数字二

6
这确实是一个字体问题,然而问题出在Unicode中,¹²³属于Latin-1 Supplement块,而其他上标数字属于Superscripts and Subscripts块,因此发生了一些字体替换。
请参见为什么上标数字的Unicode字符显示高度不同?获取额外细节;它被标记为iOS,但我在macOS上也有同样的问题。

2
那么数字 123 可能会以完全不同的字体显示,这肯定会导致一些一致性问题。 - Mark Ransom

2

对于如何美观地显示分数的一般性答案,请复制、粘贴并更改。

ASCII字符 名称 十六进制值
分数斜杠 8260
0 数字0 48
1 数字1 49
2 数字2 50
3 数字3 51
4 数字4 52
5 数字5 53
6 数字6 54
7 数字7 55
8 数字8 56
9 数字9 57

例子:1/0 =

   1⁄0


2
这些值不是“十六进制值”,而只是普通的十进制值。 - Peilonrayz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接