2014-10-21 2 views
0

У меня есть набор символов UTF-8, которые я хотел бы вставить в файл сгенерированный файл PyX. Я включил # -*- coding: utf-8 -*- в начало файла. Код несколько похож на следующий:Вставка текста юникода в холст pyx

# -*- 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) 
+0

Покажите нам код о вставки некоторого содержимого в файл PDF. –

+0

Я добавил код к вопросу. – pariwesh

ответ

0

Попробуйте это:

# -*- coding: utf-8 -*- 
c = canvas.canvas() 
txt = u'aあä'.encode('utf-8') 
c.text(1, 4, "UID: %s"%(txt)) 
c.writeEPSfile("filename.eps") 
+0

Я снова получаю ошибку: 'ascii' codec не может декодировать байт 0xe3 в позиции 3: порядковый номер не в диапазоне (128) – pariwesh

+0

@ user3280299 Проверьте мое обновление. Вы должны сделать кодирование с помощью юникодного объекта. –

+0

Я добавил ваше редактирование в код, но я все равно получаю вышеуказанную ошибку. – pariwesh

0

Вы можете настроить Pyx передать Юникода в (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, загруженные здесь): program output

Обратите внимание, что это было сделано с помощью Pyx 0.13 на Python 3 и довольно стандартная установка LaTeX. Кроме того, я использовал некоторую информацию от https://tex.stackexchange.com/questions/171611/how-to-write-a-single-hiragana-character-in-latex о создании этих символов в LaTeX. Кажется, что такие решения, как CJKutf8, для настройки всех типов символов для непосредственного использования в качестве символов Unicode в LaTeX, но это выход из моего опыта. Во всяком случае, все должно работать нормально в PyX, как и в LaTeX, если все настройки выполнены правильно. Удачи!

0

Возможно, вы найдете соответствующий набор из пакета babel Я столкнулся с той же ошибкой, когда попытался вставить немецкий ä (umlaut). Я просто добавил немецкий Бабель пакет:

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