1

我有一组 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)
4

3 回答 3

1

您可以设置 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'\usepackage{newunicodechar}')
text.preamble(r"\newunicodechar{あ}{{\usefont{U}{min}{m}{n}\symbol{'102}}}") 
text.preamble(r'\DeclareFontFamily{U}{min}{}')
text.preamble(r'\DeclareFontShape{U}{min}{m}{n}{<-> 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 本身中一样。祝你好运!

于 2014-10-24T16:25:20.643 回答
1

尝试这个:

# -*- coding: utf-8 -*-
c = canvas.canvas()
txt = u'aあä'.encode('utf-8')
c.text(1, 4, "UID: %s"%(txt))
c.writeEPSfile("filename.eps")
于 2014-10-21T08:44:35.033 回答
1

也许你可以从 babel 包中找到一个相应的集合,当我尝试插入德语ä(变音符号)时遇到了同样的错误。我只是添加了德国 babel 包:

text.preamble(r"\usepackage[ngerman]{babel}")

之后,这可能没有错误:

c.text(12, 34, "äöüßß")

我还使用了 utf8 输入编码,我认为这也是必要的。

进一步阅读:
https ://en.wikibooks.org/wiki/LaTeX/Internationalization
https://en.wikibooks.org/wiki/LaTeX/Fonts

于 2016-05-13T12:06:09.687 回答