From: Hagai C. <ha...@gm...> - 2005-10-20 11:30:11
|
I entered this code, for showing text on the canvas: from pyx import * c =3D canvas.canvas() t=3D"u"+"\ufeff\u05d9\u05d5" c.text(2,2,t) c.writePDFfile("2") but the compiler say an error. can't I done this thing? I also have tried: t=3D"\usepackage{ucs} \usepackage[utf8x]{inputenc}"+"u"+"\ufeff\u05d9\u05d5= " which I saw in google, but it doew't work neither Sorry for my english & thanks, Hagai |
From: Andre W. <wo...@us...> - 2005-10-20 15:54:17
|
Hi Hagai, On 20.10.05, Hagai Cohen wrote: > I entered this code, for showing text on the canvas: > from pyx import * > > c = canvas.canvas() > t="u"+"\ufeff\u05d9\u05d5" > c.text(2,2,t) > c.writePDFfile("2") > > but the compiler say an error. > can't I done this thing? > I also have tried: > t="\usepackage{ucs} \usepackage[utf8x]{inputenc}"+"u"+"\ufeff\u05d9\u05d5" > which I saw in google, but it doew't work neither Well, it's not that wrong. Let me show you an working example: import re from pyx import * text.texmessage.loadfd.pattern = re.compile(r"\((?P<filename>[^)]+(\.fd|\.def))\)") text.set(mode="latex") text.preamble(r"\usepackage{ucs}") text.preamble(r"\usepackage[utf8x]{inputenc}") c = canvas.canvas() t = u"Andr\u00e9".encode("utf8") c.text(0, 0, t) c.writePDFfile("ucs") The import re and tex.texmessage.loadfd.pattern thing is need to monkey path a messageparser in the text module, since the ucs-package loads various def-packages on demand. This is quite similar to the font description files which are also loaded at some random time (not really random, but for PyX it looks like that). We can just ignore the loading of those files. (I'll add this patch to the CVS version as well, since it makes perfect sense to add it to the distribution.) Now, you go to LaTeX mode, than load the two packages and than you pass an unicode string in the proper encoding into the TeX interface of PyX. (You may want to read a bit about Pythons unicode support to get an idea of what this "".encode("utf8") means.) Basically, when you properly set up your LaTeX system, you can easily typeset even Chinese or whatever you want that way ... André -- by _ _ _ Dr. André Wobst / \ \ / ) wo...@us..., http://www.wobsta.de/ / _ \ \/\/ / PyX - High quality PostScript and PDF figures (_/ \_)_/\_/ with Python & TeX: visit http://pyx.sourceforge.net/ |
From: Joerg L. <jo...@us...> - 2005-10-20 16:56:02
|
Hi André, On 20.10.05, Andre Wobst wrote: > Now, you go to LaTeX mode, than load the two packages and than you > pass an unicode string in the proper encoding into the TeX interface > of PyX. (You may want to read a bit about Pythons unicode support to > get an idea of what this "".encode("utf8") means.) Basically, when you > properly set up your LaTeX system, you can easily typeset even Chinese > or whatever you want that way ... In view of the fact that things like this may become more common in the future, wouldn't it be nice if one could specify an encoding for the string passed by the texrunner to the LaTeX instance? Jörg |
From: Gert I. <Gert.Ingold@Physik.Uni-Augsburg.DE> - 2005-10-20 17:14:55
|
Hi, > In view of the fact that things like this may become more common in the > future, wouldn't it be nice if one could specify an encoding for the > string passed by the texrunner to the LaTeX instance? let me know when you consider a solution of this problem (semi?)stable, because I would like to insert it into the FAQ. Best regards, Gert --=20 Gert-Ludwig Ingold email: Gert.Ingold@Physik.Uni-Augsburg.DE Institut f=FCr Physik Phone: +49-821-598-3234 Universit=E4t Augsburg Fax : +49-821-598-3222 D-86135 Augsburg WWW : www.physik.uni-augsburg.de/theo1/ingold Germany PGP : 86FF5A93, key available from homepage |
From: Andre W. <wo...@us...> - 2005-10-21 06:31:09
|
Hi, On 20.10.05, Gert Ingold wrote: > > In view of the fact that things like this may become more common in the > > future, wouldn't it be nice if one could specify an encoding for the > > string passed by the texrunner to the LaTeX instance? > > let me know when you consider a solution of this problem (semi?)stable, > because I would like to insert it into the FAQ. I consider this to be stable. It's just The Right Thing (tm) to use a certain encoding and pass this around (and configure latex appropriately). Note, that you may also want to use different encodings. You could replace the utf8 by latin1 for example and would not need to use the ucs-package (just inputencoding). The only problem which then might happen to you, is, that the u"".encode("latin1") might fail when the characters are not available in that encoding. But that's absolutely correct. As a first step I just checked in a small modification of texmessage.loadfd (and renamed it to loaddef) to make the monkey patch unnecessary. We should think about this great idea of Jörg to introduce an encoding, such that we can pass a unicode-string to text.text() without needing to encode this manually before passing it to text.text(). The default encoding could be "ascii". I think, this will not harm too many people in the way they're using the system right not (i.e. by sticking to ASCII in text.text() anyway). We could also do an encoding=None to fully create the old behaviour, but I think it would be better to not even do that. The only problem with this would be, that passing an encoded unicode string (i.e. not just ascii) would break. I think, we can even "convert" the people by having a encoding=None raising warnings for non-ascii usage for an intermediate version. Maybe that's best ... I'll work that out ... André -- by _ _ _ Dr. André Wobst / \ \ / ) wo...@us..., http://www.wobsta.de/ / _ \ \/\/ / PyX - High quality PostScript and PDF figures (_/ \_)_/\_/ with Python & TeX: visit http://pyx.sourceforge.net/ |
From: Hagai C. <ha...@gm...> - 2005-10-21 13:35:53
|
I have tried a lot of combination with your example, but It always throws the error below: Traceback (most recent call last): File "C:\Programs\Python\Lib\site-packages\pythonwin\pywin\framework\scri= ptutils.py", line 310, in RunScript exec codeObject in __main__.__dict__ File "D:\tar\Mekorot\mekorot_python\Hebrew2.py", line 4, in ? text.texmessage.loadfd.pattern =3D re.compile(r"\((?P[^)]+(\.fd|\.def))= \)") File "C:\Programs\Python\Lib\sre.py", line 179, in compile return _compile(pattern, flags) File "C:\Programs\Python\Lib\sre.py", line 230, in _compile raise error, v # invalid expression error: unknown specifier: ?P[ Sorry about my stupidity, but what is my problem? |
From: Andre W. <wo...@us...> - 2005-10-21 14:03:01
|
Hi, On 21.10.05, Hagai Cohen wrote: > I have tried a lot of combination with your example, > but It always throws the error below: > > Traceback (most recent call last): > File "C:\Programs\Python\Lib\site-packages\pythonwin\pywin\framework\scriptutils.py", > line 310, in RunScript > exec codeObject in __main__.__dict__ > File "D:\tar\Mekorot\mekorot_python\Hebrew2.py", line 4, in ? > text.texmessage.loadfd.pattern = re.compile(r"\((?P[^)]+(\.fd|\.def))\)") > File "C:\Programs\Python\Lib\sre.py", line 179, in compile > return _compile(pattern, flags) > File "C:\Programs\Python\Lib\sre.py", line 230, in _compile > raise error, v # invalid expression > error: unknown specifier: ?P[ > > Sorry about my stupidity, but what is my problem? This is a regular expression problem. The proper regular expression has a lowerthan-character, the string "filename", and a greaterthan-character immedately after the capital P. It might be a problem related to the email-system, which might strip away this string, since it is html-like (just a wild guess). I include the proper regular expression again ... maybe you can properly extract it now: pattern = re.compile(r"\((?P<filename>[^)]+(\.fd|\.def))\)") (You can also take a look in the CVS (using the ViewCVS for example), where the proper regular expression is now inserted in the file pyx/text.py. Note also, that the P<filename>-part is not changed compared to the version you can find in pyx/text.py in the 0.8.1 source distribution of PyX.) Beside that -- this is another but also important issue -- you could try whether your LaTeX system is able to handle utf8 input encoding. You need the ucs-package installed for that and than a file like \documentclass{article} \usepackage{ucs} \usepackage[utf8x]{inputenc} \begin{document} ... some unicode characters in utf-8 encoding ... \end{document} should be smoothly processed by latex. HTH, André -- by _ _ _ Dr. André Wobst / \ \ / ) wo...@us..., http://www.wobsta.de/ / _ \ \/\/ / PyX - High quality PostScript and PDF figures (_/ \_)_/\_/ with Python & TeX: visit http://pyx.sourceforge.net/ |