Menu

#65 PyX crashes when trying to write a non-ascii character

PyX
closed
nobody
None
1
2016-02-09
2016-02-09
mmb
No

Hi all,

PyX fails, when trying to write non-ascii-characters.
PyX-Version is 14.1
Python-Version is 3.4.3

A minimal example and the corresponding Traceback follow:

 # -*- coding: utf-8 -*-

from pyx import *
c = canvas.canvas()
c.text(0, 1, r"Test ä")
c.writeEPSfile("Test")

Traceback:

File "Test.py", line 7, in <module>
c.text(0, 1, r"Test ä")
File "/usr/lib/python3.4/site-packages/pyx/canvas.py", line 409, in text
return self.insert(self.texrunner.text(x, y, atext, args, kwargs))
File "/usr/lib/python3.4/site-packages/pyx/text.py", line 1428, in wrapped
return f(self,
args, kwargs)
File "/usr/lib/python3.4/site-packages/pyx/text.py", line 1464, in text
return self.instance.text(*args,
kwargs)
File "/usr/lib/python3.4/site-packages/pyx/text.py", line 1304, in text
return self.text_pt(unit.topt(x), unit.topt(y), args, *kwargs)
File "/usr/lib/python3.4/site-packages/pyx/text.py", line 1278, in text_pt
left_pt, right_pt, height_pt, depth_pt = self.do_typeset(expr, self.texmessages_run_default + self.texmessages_run + texmessages)
File "/usr/lib/python3.4/site-packages/pyx/text.py", line 1204, in do_typeset
return self._execute(expr, texmessages, STATE_TYPESET, STATE_TYPESET)
File "/usr/lib/python3.4/site-packages/pyx/text.py", line 1073, in _execute
self.texinput.write(expr)
UnicodeEncodeError: 'ascii' codec can't encode character '\xe4' in position 20: ordinal not in range(128)
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
File "/usr/lib/python3.4/site-packages/pyx/text.py", line 1022, in _cleanup
self.do_finish()
File "/usr/lib/python3.4/site-packages/pyx/text.py", line 1212, in do_finish
self.go_finish()
File "/usr/lib/python3.4/site-packages/pyx/text.py", line 1338, in go_finish
self._execute("\end%\n", self.texmessages_end_default + self.texmessages_end, STATE_TYPESET, STATE_DONE)
File "/usr/lib/python3.4/site-packages/pyx/text.py", line 1064, in _execute
self.texoutput.expect(None)
File "/usr/lib/python3.4/site-packages/pyx/text.py", line 647, in expect
self._expect.put_nowait(s)
File "/usr/lib/python3.4/queue.py", line 187, in put_nowait
return self.put(item, block=False)
File "/usr/lib/python3.4/queue.py", line 133, in put
raise Full
queue.Full</module>

Discussion

  • Andre Wobst

    Andre Wobst - 2016-02-09
    • status: open --> closed
     
  • Andre Wobst

    Andre Wobst - 2016-02-09

    While the traceback doesn't look nice (and the error in atexit is probably to be addressed), PyX is doing fine here. By default PyX encodes the text passed to TeX using the ascii encoding. You can change it by setting a proper texenc. At the same time you need to configure TeX (or better LaTeX) to accept those characters. Adding two lines to make this settings, your example will run fine:

    from pyx import *
    text.set(cls=text.LatexRunner, texenc='utf-8')
    text.preamble(r'\usepackage[utf8]{inputenc}')
    c = canvas.canvas()
    c.text(0, 1, r"Test ä")
    c.writeEPSfile("Test")
    

    Not a bug, closing.

     
  • damiano

    damiano - 2018-02-16
    Post awaiting moderation.
  • damiano

    damiano - 2018-02-17
    Post awaiting moderation.
  • damiano

    damiano - 2018-02-18
    Post awaiting moderation.
  • damiano

    damiano - 2018-02-19
    Post awaiting moderation.

Log in to post a comment.

MongoDB Logo MongoDB