【问题标题】:Bengali words printing out all wrong in manim孟加拉语单词在 manim 中打印全错
【发布时间】:2020-04-29 22:17:27
【问题描述】:

我一直在尝试使用 Manim 为孟加拉语角色制作动画。我使用this method 在 Manim 中使用 pc 字体。在我看到输出之前,一切似乎都运行良好。例如,如果我写 বাংলা লেখা,我会得到输出(仔细查看输出)বাংলা লখো。大多数时候它会吐出毫无意义的词。

使用的代码是:

class test_3(Scene):
    def construct(self):
        text1 = Text('বাংলা লেখা', font='Akaash')       
        text2 = Text('english text', font='Arial').move_to(DOWN)
        self.play(Write(text1), Write(text2))
        self.wait()

【问题讨论】:

  • 连字没有正确呈现,对吧?您可能应该在 Manim 提交错误。
  • @lenz 我不认为它与渲染有关。 unicode 编码好像坏了。
  • 连错误码都没有,怎么找bug?
  • 对我来说这看起来不像是编码问题。在一个版本中,缺少 KHA 并且 AA 更改为 O。提交错误意味着您 open an issue at Manim,说明您做了什么,您希望看到什么以及您实际看到了什么。然后由 Manim 开发人员来查找并修复错误,如果他们认为这是一个错误。

标签: python unicode python-unicode manim


【解决方案1】:

只需在Text()MarkupText() 中指定Bangla 字体即可正确显示Bangla 文本。

例如,如果我想以Kalpurush 字体显示孟加拉语文本আইনস্টাইনের সমীকরণ,可以通过以下方式完成:

from manim import *

class bangla(Scene):
    def construct(self):
        text = Text("আইনস্টাইনের সমীকরণ", font="Kalpurush")
        self.play(Write(text))

这里,字体是本地安装的。许多fonts可以通过python包manim-fonts直接从网上使用。


如果您想很好地显示包含内联数学的孟加拉语文本/句子,您可以使用 LaTeX 包latexbangla

这是一个示例代码:

from manim import *

class bangla(Scene):
    def construct(self):
        myTemplate = TexTemplate(tex_compiler="xelatex", output_format=".pdf", preamble=r"\usepackage[banglamainfont=Kalpurush, banglattfont=Kalpurush]{latexbangla}")
        tex = Tex(r"আইনস্টাইনের সমীকরণ, $E^2=(mc^2)^2+(pc)^2$", tex_template=myTemplate)
        self.play(Write(tex))

输出:

注意该问题也在 Github 存储库中进行了讨论:ManimCommunity/manim3b1b/maim

【讨论】:

    【解决方案2】:

    这是因为字体类型。
    你应该使用bangli字体。尝试here中的任何字体

    【讨论】:

      【解决方案3】:

      尝试使用 ANSI Bangla 字体,例如“SutonnyMJ”。如果您使用的是 Avro 键盘,您可以像这样使用 Output as ANSI 选项,

      如果你选择了“SutonnyMJ”这样的字体,你的代码应该是这样的,

      class test_3(Scene):
          def construct(self):
              text1 = Text('evsjv †jKAv', font='SutonnyMJ')       
              text2 = Text('english text', font='Arial').move_to(DOWN)
              self.play(Write(text1), Write(text2))
              self.wait()
      

      在这里,我将বাংলা লেখা 替换为evsjv †jKAv(只是相同Unicode 文本的ANSI 形式),这将呈现বাংলা লেখা,因为字体现在是ANSI。希望 Manim 能尽快支持 unicode 字体。


      编辑


      我发现孟加拉语 Unicode 字体现在可以用于 Manim。 (2021 年 3 月 24 日)。我是用 Kalpurush 字体做的。

      代码是

      class FirstScene(Scene):
          def construct(self):
              text = Text("বাংলা অক্ষরে লেখা", font="Kalpurush")
              text2 = Text("Another text")
              self.play(Write(text), run_time=1)
              self.wait(3)
              self.remove(text)
              self.play(Write(text2))
      

      请看下面的截图,

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-17
        • 1970-01-01
        • 2021-11-15
        • 2016-09-07
        • 2013-05-02
        • 2021-12-05
        • 2017-09-06
        • 1970-01-01
        相关资源
        最近更新 更多