如何使用 Unicode 在从右到左的文本上排列拉丁和弦名称?
How do I use Unicode to line up latin chord names over right-to-left text?
我想显示一些阿拉伯语歌词的和弦。在英语中,我使用的是一种常用的系统,使用 monospaced 字体,并使用 spaces 排列和弦,如下所示:
G C D
From all my heart
在阿拉伯语中,这样做有困难,因为阿拉伯语是从右到左的,但和弦是从左到右的。这是我在图片中寻找的结果:
此外,我希望用户能够按逻辑顺序输入和弦和歌词。用户应先键入 G,然后键入 C,然后键入 D。我可以使用特殊的 Unicode 字符,但不能更改逻辑顺序。
我试过这个:
<div dir="rtl" style="font-family: monospace">
G
C
D
<br>
من كل قلبي
</div>
(在此示例中,我利用 HTML 将换行符视为 space,以明确和弦的顺序。)
如您所见,当您 运行 按逻辑顺序输入的片段、和弦以错误的顺序显示。 Unicode 算法识别出这些是由 space 分隔的从左到右的词,因此从左到右显示它们,即使整个上下文是从右到左的。有什么办法可以在 Unicode 中关闭此行为?
让我们尝试使用 U+202B RIGHT-TO-LEFT EMBEDDING,使用 U+202C POP DIRECTIONAL FORMATTING 终止块:
<div dir="rtl" style="font-family: monospace">
‫
G
C
D
‬
<br>
من كل قلبي
</div>
不,这行不通。 U+202B 只影响 weak 字符,像 !
和 .
这样没有继承方向性的字符。字符 G
、C
和 D
继承了从左到右的方向性,因此它们不受影响。
好的,那么,让我们尝试使用 U+202E RIGHT-TO-LEFT OVERRIDE,再次使用 U+202C 终止块:
<div dir="rtl" style="font-family: monospace">
‮
G
C
D
‬
<br>
من كل قلبي
</div>
哇哦!这最终起作用了,给出了问题图像中的结果。不幸的是,它不太管用,因为它会强制同一个词中的字符从右到左移动,这对小调和弦来说是个问题:
<div dir="rtl" style="font-family: monospace">
‮
Gm
Cm
Dm
‬
<br>
من كل قلبي
</div>
要解决这个问题,您需要使用 U+202D LEFT-TO-RIGHT OVERRIDE,此外,代码如下:
<div dir="rtl" style="font-family: monospace">
‮
‭Gm‬
‭Cm‬
‭Dm‬
‬
<br>
من كل قلبي
</div>
我想显示一些阿拉伯语歌词的和弦。在英语中,我使用的是一种常用的系统,使用 monospaced 字体,并使用 spaces 排列和弦,如下所示:
G C D
From all my heart
在阿拉伯语中,这样做有困难,因为阿拉伯语是从右到左的,但和弦是从左到右的。这是我在图片中寻找的结果:
此外,我希望用户能够按逻辑顺序输入和弦和歌词。用户应先键入 G,然后键入 C,然后键入 D。我可以使用特殊的 Unicode 字符,但不能更改逻辑顺序。
我试过这个:
<div dir="rtl" style="font-family: monospace">
G
C
D
<br>
من كل قلبي
</div>
(在此示例中,我利用 HTML 将换行符视为 space,以明确和弦的顺序。)
如您所见,当您 运行 按逻辑顺序输入的片段、和弦以错误的顺序显示。 Unicode 算法识别出这些是由 space 分隔的从左到右的词,因此从左到右显示它们,即使整个上下文是从右到左的。有什么办法可以在 Unicode 中关闭此行为?
让我们尝试使用 U+202B RIGHT-TO-LEFT EMBEDDING,使用 U+202C POP DIRECTIONAL FORMATTING 终止块:
<div dir="rtl" style="font-family: monospace">
‫
G
C
D
‬
<br>
من كل قلبي
</div>
不,这行不通。 U+202B 只影响 weak 字符,像 !
和 .
这样没有继承方向性的字符。字符 G
、C
和 D
继承了从左到右的方向性,因此它们不受影响。
好的,那么,让我们尝试使用 U+202E RIGHT-TO-LEFT OVERRIDE,再次使用 U+202C 终止块:
<div dir="rtl" style="font-family: monospace">
‮
G
C
D
‬
<br>
من كل قلبي
</div>
哇哦!这最终起作用了,给出了问题图像中的结果。不幸的是,它不太管用,因为它会强制同一个词中的字符从右到左移动,这对小调和弦来说是个问题:
<div dir="rtl" style="font-family: monospace">
‮
Gm
Cm
Dm
‬
<br>
من كل قلبي
</div>
要解决这个问题,您需要使用 U+202D LEFT-TO-RIGHT OVERRIDE,此外,代码如下:
<div dir="rtl" style="font-family: monospace">
‮
‭Gm‬
‭Cm‬
‭Dm‬
‬
<br>
من كل قلبي
</div>