【问题标题】:Right-to-Left and Left-to-Right printed nicely从右到左和从左到右打印得很好
【发布时间】:2017-07-22 05:12:09
【问题描述】:

我希望它在单词旁边生成数字,以便我可以要求用户使用相应的数字来选择单词。

这是我的代码

alt_words = hlst
loopnum = 8
for i in range(loopnum):
        if i < len(alt_words):
            print('{0}. {1:<20}'.format((i+1), alt_words[i]), end =' ')
            if i == 0:
                print('', end=' ')
        if i + 9 <= len(alt_words):
            print('{0}. {1:<20}'.format((i+9), alt_words[i+8]), end =' ')
        if i + 17 <= len(alt_words):
            print('{0}.  {1:<20}'.format((i+17), alt_words[i+16]), end=' ')
        print('\n'+'-'*80)

它产生这个

每行的第一个数字打印在左侧,但单词在右侧,而其余的数字和单词打印 RTL。似乎一旦 python 开始在 LTR 行上打印,它就可以切换到 RTL,但不能从 RTL 回到 LTR。请注意,每行第二组数字的数字右侧是如何打印句点的。

它工作得很好,用英文单词看起来不错:

我猜想解决办法可能涉及在单词后面加上数字,但我认为一定有更好的方法。

【问题讨论】:

  • 你试过this吗?
  • 漂亮的兔子洞。主要答案是“你试过这个……”
  • 正确显示的实际文字,所以我不确定它是否相关。

标签: python python-3.x right-to-left hebrew left-to-right


【解决方案1】:

在每个希伯来语单词的开头放置一个从右到左嵌入字符u'\u202B',以及一个流行方向格式字符u'\u202C',在每个单词的末尾。

这会将希伯来语单词分开为其他 LTR 文档中的 RTL 部分。

(请注意,虽然这会产生正确的输出,但您还依赖于运行此脚本的终端应用程序是否正确实现了Unicode Bidirectional Algorithm。)

【讨论】:

  • 有时(例如,在 Jupyter 中,为 LTR 全局设置)将 RTL 控制字符从上方添加到每个单词(单词 RTL 或 LTR)就足够了。
  • 我认为您想要u'\u2067' RIGHT-TO-LEFT ISOLATE 和u'\u2069' POP 定向隔离,而不是从右到左嵌入和POP 定向格式。从右到左的方向嵌入大致具有强 RTL 字符对周围文本的影响,这可能会导致您想要将 undesirable reordering 的文本与嵌入中 RTL 字符的影响隔离开来。
【解决方案2】:

见Bi-directional (BiDi) layout implementation in pure python。

安装方式:

pip install python-bidi

示例用法:

from bidi.algorithm import get_display
print(get_display('LTR text with RTL text (טקסט לדוגמא) will be printed correctly'))

如果您使用 Django,也可以使用以下软件包: http://pypi.python.org/pypi/django-bidi-utils

【讨论】:

    猜你喜欢
    • 2017-02-21
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    相关资源
    最近更新 更多