将 unicode 文本插入 pyx 画布
Posted
技术标签:
【中文标题】将 unicode 文本插入 pyx 画布【英文标题】:Inserting a unicode text into pyx canvas 【发布时间】:2014-10-21 08:18:36 【问题描述】:我有一组 UTF-8 字符,我想插入到PyX
生成的 pdf 文件中。
我已将# -*- coding: utf-8 -*-
包含在文件顶部。代码有点类似于以下:
# -*- coding: utf-8 -*-
c = canvas.canvas()
txt = "u'aあä'"
c.text(2, 2, "ID: %s"%txt)
c.writeEPSfile("filename.eps")
但我仍然无法理解这一点。
错误:
'ascii' codec can't encode character u'\xae' in position 47: ordinal not in range(128)
【问题讨论】:
向我们展示将一些内容插入 pdf 文件的代码。 我已将代码添加到问题中。 【参考方案1】:试试这个:
# -*- coding: utf-8 -*-
c = canvas.canvas()
txt = u'aあä'.encode('utf-8')
c.text(1, 4, "UID: %s"%(txt))
c.writeEPSfile("filename.eps")
【讨论】:
我再次收到错误:'ascii' 编解码器无法解码位置 3 的字节 0xe3:序数不在范围内(128) @user3280299 检查我的更新。您必须使用 unicode 对象进行编码。 我将您的编辑添加到代码中,但我仍然收到上述错误 @user3280299 您能否更新问题中的整个回溯错误消息,以告诉我错误发生在哪里?【参考方案2】:您可以设置 PyX 以将 unicode 字符传递给 (La)TeX。然后,在 TeX/LaTeX 中生成有问题的字符就成了一个问题。这是产生相关输出的一个相当简单的解决方案:
from pyx import *
text.set(cls=text.LatexRunner, texenc='utf-8')
text.preamble(r'\usepackage[utf8]inputenc')
text.preamble(r'\usepackagenewunicodechar')
text.preamble(r"\newunicodecharあ\usefontUminmn\symbol'102")
text.preamble(r'\DeclareFontFamilyUmin')
text.preamble(r'\DeclareFontShapeUminmn<-> udmj30')
c = canvas.canvas()
c.text(0, 0, 'UID: aあä')
c.writeGSfile('utf8.png')
这直接导致输出(这里上传的 PNG):
请注意,这是在 Python 3 上使用 PyX 0.13 和相当标准的 LaTeX 安装完成的。另外,我使用了来自https://tex.stackexchange.com/questions/171611/how-to-write-a-single-hiragana-character-in-latex 的一些关于在 LaTeX 中创建这些字符的信息。似乎有像 CJKutf8 这样的解决方案来设置各种字符以在 LaTeX 中直接用作 unicode 字符,但这超出了我的经验。无论如何,如果所有设置都已正确完成,它应该在 PyX 中一切正常,就像在 LaTeX 本身中一样。祝你好运!
【讨论】:
【参考方案3】:也许你可以从 babel 包中找到相应的集合
当我尝试插入德语 ä
(变音符号)时遇到了同样的错误。我只是添加了德国 babel 包:
text.preamble(r"\usepackage[ngerman]babel")
之后,这可能没有错误:
c.text(12, 34, "äöüßß")
我也使用了utf8输入编码,我觉得这也是必要的。
延伸阅读:https://en.wikibooks.org/wiki/LaTeX/Internationalizationhttps://en.wikibooks.org/wiki/LaTeX/Fonts
【讨论】:
以上是关于将 unicode 文本插入 pyx 画布的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法可以将 unicode 文本添加到 MBCS MFC 菜单