Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Pyx unicode文本_Python 3.x_Unicode_Pyx - Fatal编程技术网

Python 3.x Pyx unicode文本

Python 3.x Pyx unicode文本,python-3.x,unicode,pyx,Python 3.x,Unicode,Pyx,所以我尝试从Python生成postscript。 目前正在Python3.4.2上试用PyX 0.14.1, 但如果你知道更简单的事情,我愿意接受建议 我主要遵循PyX上的建议 邮件列表。这是蟒蛇2,很古老。 下面显示了经过多次更改后的当前代码: from pyx import * text.set(cls=text.LatexRunner, texenc='utf-8') text.preamble(r'\usepackage{ucs}') text.preamble(r'\usepack

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

我主要遵循PyX上的建议 邮件列表。这是蟒蛇2,很古老。 下面显示了经过多次更改后的当前代码:

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停止时发出恐怖的声音。错误中有趣的部分 显示在TeX中发生的情况:

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)
pyx.text.TexResultError:未处理的TeX响应(可能是错误)
传递给TeX的表达式为:
\ProcessPyXBox{b的\xc3\xb6ren Sundstr\xc3\xb8m'%
}{1}%
\PyXInput{7}%
在解析来自TeX的返回消息后,留下以下内容:
*
*! 未定义的控制序列。
在这里,
但是除了太复杂之外,它对我也不起作用。
(在本例中,PyX似乎不理解metafont消息)

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

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

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

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
的引用。更改的文本模块设置不会影响画布实例。因此,在创建要在其中绘制文本的画布之前,必须设置文本模块


感谢所有对此进行调查的人。

找到了解决方案,我会很快回答自己。