From: Thomas P. <Tho...@rr...> - 2006-11-15 11:14:14
|
Hi, when I combine the output of text in a parbox with manual newlines ('//') and some horizontal alignment other then left-aligned, the output is not what I would expect. Please have a look at the example below which is based on one of the examples from the PyX web pages with some additional newlines: ######################################################################### #!/usr/bin/env python from pyx import * text.set(mode='latex') text.preamble(r'\setlength{\parindent}{0pt}') c = canvas.canvas() c.stroke(path.line(-5, -6, -5, 4)) c.stroke(path.line(0, -6, 0, 4)) c.stroke(path.line(5, -6, 5, 4)) ##### WRONG RESULTS ##### c.text(0, 4, r"boxcenter\\and flushleft", [text.parbox(3), text.halign.boxcenter, text.halign.flushleft]) c.text(0, 3, r"boxcenter\\and flushcenter", [text.parbox(3), text.halign.boxcenter, text.halign.flushcenter]) c.text(0, 2, r"boxcenter\\and flushright", [text.parbox(3), text.halign.boxcenter, text.halign.flushright]) c.text(-5, 0, r"left:\\boxleft and flushleft", [text.parbox(3), text.halign.left]) c.text(0, 0, r"center:\\boxcenter and flushcenter", [text.parbox(3), text.halign.center]) c.text(5, 0, r"right:\\boxright and flushright", [text.parbox(3), text.halign.right]) ##### EXPECTED RESULTS ##### c.text(0, -2, r"\raggedright boxcenter\\and flushleft", [text.parbox(3), text.halign.boxcenter, text.halign.flushleft]) c.text(0, -3, r"\centering boxcenter\\and flushcenter", [text.parbox(3), text.halign.boxcenter, text.halign.flushcenter]) c.text(0, -4, r"\raggedleft boxcenter\\and flushright", [text.parbox(3), text.halign.boxcenter, text.halign.flushright]) c.text(-5, -6, r"\raggedright left:\\boxleft and flushleft", [text.parbox(3), text.halign.left]) c.text(0, -6, r"\centering center:\\boxcenter and flushcenter", [text.parbox(3), text.halign.center]) c.text(5, -6, r"\raggedleft right:\\boxright and flushright", [text.parbox(3), text.halign.right]) c.writePDFfile("halign") ######################################################################### Without explicitly specifying the alignment, the output is rather strange. Or am I missing something and everyting works as expected? Thanks for any hint, Tom |
From: Michael J G. <mic...@fa...> - 2006-11-15 12:22:07
|
Thomas Pohl venit, vidit, dixit 2006-11-15 13:15: > Hi, when I combine the output of text in a parbox with manual > newlines ('//') and some horizontal alignment other then > left-aligned, the output is not what I would expect. Please have a > look at the example below which is based on one of the examples from > the PyX web pages with some additional newlines: ... > Without explicitly specifying the alignment, the output is rather > strange. Or am I missing something and everyting works as expected? Interestingly, things behave differently in PyX 0.8.1 but still "incorrect". I assume you use 0.9 or svn? In order to achieve text alignment PyX sets \leftskip and \rightskip. \\ resets those. If you use \linebreak instead of \\ then everything comes out as expected. \\ is just a brutal thing to to ;) Cheers, Michael |
From: Thomas P. <Tho...@rr...> - 2006-11-15 12:53:36
|
Sorry, I forgot to mention which version I use. It's 0.9 just as you suspected. Thanks for the hint with the \linebreak. So we have a bunch of workarounds now. :-) I'd recommend to add some hints about this issue in the example that I used to illustrate the problem, if the PyX code stays like this. Thanks, Tom Michael J Gruber wrote: > Thomas Pohl venit, vidit, dixit 2006-11-15 13:15: >> Hi, when I combine the output of text in a parbox with manual >> newlines ('//') and some horizontal alignment other then >> left-aligned, the output is not what I would expect. Please have a >> look at the example below which is based on one of the examples from >> the PyX web pages with some additional newlines: > ... >> Without explicitly specifying the alignment, the output is rather >> strange. Or am I missing something and everyting works as expected? > > Interestingly, things behave differently in PyX 0.8.1 but still > "incorrect". I assume you use 0.9 or svn? > > In order to achieve text alignment PyX sets \leftskip and \rightskip. \\ > resets those. If you use \linebreak instead of \\ then everything comes > out as expected. \\ is just a brutal thing to to ;) > > Cheers, > Michael |
From: Michael J G. <mic...@fa...> - 2006-11-15 13:14:24
|
Thomas Pohl venit, vidit, dixit 2006-11-15 14:54: > Sorry, I forgot to mention which version I use. It's 0.9 > just as you suspected. > > Thanks for the hint with the \linebreak. So we have a bunch > of workarounds now. :-) > > I'd recommend to add some hints about this issue in the > example that I used to illustrate the problem, if the PyX > code stays like this. Well, "\\" is "\newline" which is different from "\linebreak". "\newline" prevents stretching of the line which is exactly what PyX uses for the alignment. "\\" is often recommended for linebreaks although it's "not the right thing to do". It's a TeX issue, but still a warning on http://pyx.sourceforge.net/examples/text/halign.html might be warranted. Michael |