首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pyx unicode文本

Pyx unicode文本
EN

Stack Overflow用户
提问于 2016-11-01 05:06:14
回答 1查看 330关注 0票数 2

因此,我正在尝试从Python生成postscript。目前正在尝试Python3.4.2上的PyX 0.14.1,但如果你知道更简单的东西,我愿意接受建议。

我主要按照在this thread的PyX邮件列表上找到的建议。这是Python2,而且很老了。下面显示了经过多次更改后的当前代码:

代码语言:javascript
复制
from pyx import *

text.set(cls=text.LatexRunner, texenc='utf-8')
text.preamble(r'\usepackage{ucs}')
text.preamble(r'\usepackage[utf8x]{inputenc}')

c = canvas.canvas()
c.text(5, 5, "Sören Sundstrøm".encode("utf8"))

p = document.page(c, paperformat=document.paperformat.A4,
    centered=0)
d = document.document([p])
d.writePSfile('test.ps')

PyX以一个TexResultError结束。错误中有趣的部分显示了TeX中发生的事情:

代码语言:javascript
复制
pyx.text.TexResultError: unhandled TeX response (might be an error)
The expression passed to TeX was:
  \ProcessPyXBox{b'S\xc3\xb6ren Sundstr\xc3\xb8m'%
  }{1}%
  \PyXInput{7}%
After parsing the return message from TeX, the following was left:
  *
  *! Undefined control sequence.
  <argument> b'S\xc 
                    3\xb 6ren Sundstr\xc 3\xb 8m'
  <*> }{1}
  (cut after 5 lines; use errordetail.full for all output)

所以看起来latex接收的不是utf-8,而是utf-8的转义表示。我的问题是:如何正确地将字符串传递给canvas.text?还是我的开场白错了?

我也试着在SO上关注this answer by wobsta,但除了太复杂之外,它对我也不起作用。(在这种情况下,看起来PyX不理解metafont消息)。

顺便说一下,直接在具有相同前导的简单utf-8输入文件上运行latex工作得很好。

EN

回答 1

Stack Overflow用户

发布于 2016-11-03 03:58:01

查看PyX代码发现了问题。文本模块准备一个用于TeX输入的utf-8编码的io.TextIOWrappertext.preamblecanvas.text中的字符串参数是逐字传递给包装器的,因此在Python3中,您只需传递一个字符串,而不需要进行任何编码。编码将由包装器完成。

我最初未简化的代码有另一个问题,这使得解决第一个问题变得困难。因此,为了完整性,这里是第二个问题及其解决方案。我的原始代码的操作顺序如下:

代码语言:javascript
复制
from pyx import *

c = canvas.canvas()
# doing other stuff with canvas

text.set(cls=text.LatexRunner, texenc='utf-8')
text.preamble(r'\usepackage{ucs}')
text.preamble(r'\usepackage[utf8x]{inputenc}')

c.text(5, 5, "Sören Sundstrøm")

p = document.page(c, paperformat=document.paperformat.A4,
    centered=0)
d = document.document([p])
d.writePSfile('test.ps')

这也不起作用,因为在创建画布时,它保留了对使用文本模块的当前设置设置的text.defaulttexrunner的引用。更改后的文本模块设置不会影响画布实例。因此,在创建要在其中绘制文本的画布之前,必须设置文本模块。

感谢所有调查过这件事的人。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40350567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档