# Latex, Labels and PDF

Hi,

I ran into some troubles when trying to do the following with
matplotlib:
- plotting a figure
- using latex for axis labels
- (getting acceptable fonts)
- getting a pdf in the end
I've not been able to solve this.

In the documentation I found 2 ways to do this. First, when a string is
enclosed in $signs, matplotlib has its own way of rendering latex code. Thats ok for mathematical expressions, but I can't print normal text at all. The documentation says that \rm{} should be used, but "$\rm{some label text} (\mu V)$" becomes "somelabeltext\muV" so I searched again and found another documentation, telling me to enable 'text.usetex' so all text is handled by latex. This way, the text is rendered correctly, but then the font used for the tick numbers switches to some ugly looking font. Because Latex mode does not seem to work with the pdf output, I saved these figures as EPS, using epstopdf in oder to get a pdf. Normally this process gives me perfect results, but the ugly-font-ticks problem is getting even worse, because in the pdf some of them are just missing. I upped the eps and pdf files here: http://www.staff.uni-mainz.de/wuertz/matplotlib/ There is also a png file with a screenshot from the "ugly" and missing ticks. Plotting a reasonable figure seems to be hard, is there any chance of solving this problem? Thanks in advance, Peter Hoi Peter, "$\rm{some label text} (\mu V)$" becomes "somelabeltext\muV" You could try r"$\rm{some\ label\ text} (\mu V)$" instead. (Note the backslashes and the 'raw' r in front of the string.) This way the string should be interpreted fine. You can use the '\ ' to force a space, but whether it's necessary depends on the string you want to display, of course. Possible statements in the head of your programs might be: from matplotlib import rcParams rcParams['text.fontname'] = 'cmr10' rcParams['lines.markerfacecolor'] = None from matplotlib import rc rc('text', usetex=True) rc('axes', hold=True) (From a current program of mine. Of course, some statements have nothing to do with your problem, but they might illustrate some options you have.) The wiki/Cookbook has some info (on pitfalls, too): http://www.scipy.org/Cookbook/Matplotlib/UsingTex http://www.scipy.org/Cookbook/Matplotlib/LaTeX_Examples You probably know the mathtex module: http://matplotlib.sourceforge.net/matplotlib.mathtext.html the wheeler_demo: http://matplotlib.sourceforge.net/screenshots/wheeler_demo.py and the tex_demo: http://matplotlib.sourceforge.net/screenshots/tex_demo.py ? As for your eps2pdf-problem: I don't know any straightforward solution (one that always gives a pleasant output) for it, but had a similar problem lately. It seems that MPLs eps-output is not well read in by many viewers / converters (that statement correct?). Correcting the eps with eps2eps or trying to convert the eps with some other software did not work well for me. My solution was: Producing plots in formats other then eps/ps (e. g. png), with sufficient resolution and converting to the format the publisher wanted with other software (e.g. gimp or see what's on our terminal server ). Currently I'm only using eps figures for import into LaTeX - works fine. HTH Christian Hi, I ran into some troubles when trying to do the following with matplotlib: - plotting a figure - using latex for axis labels - (getting acceptable fonts) - getting a pdf in the end I've not been able to solve this. In the documentation I found 2 ways to do this. First, when a string is enclosed in$ signs, matplotlib has its own way of rendering latex code.
Thats ok for mathematical expressions, but I can't print normal text at
all. The documentation says that \rm{} should be used, but

"$\rm{some label text} (\mu V)$" becomes "somelabeltext\muV"

I think you need to use raw strings so your \'s are interpretted as \'s and
not as special characters (like \n is newline). We know it is inconvenient
that you cant do something like r'This example: $a=e^{i\pi}$' with the
existing mathtext, but it is a difficult problem and remains unsolved.

so I searched again and found another documentation, telling me to
enable 'text.usetex' so all text is handled by latex. This way, the text
is rendered correctly, but then the font used for the tick numbers
switches to some ugly looking font.

For starters, see http://www.scipy.org/Cookbook/Matplotlib/UsingTex. I suggest
changing your serif rc settings to use the PSNFSS fonts described in that

Because Latex mode does not seem to work with the pdf output,

It doesn't, not yet.

I saved
these figures as EPS, using epstopdf in oder to get a pdf. Normally this
process gives me perfect results, but the ugly-font-ticks problem is
getting even worse, because in the pdf some of them are just missing.

Try getting your system set up to use the xpdf distiller, that has always
given me excellent results.

I upped the eps and pdf files here:
http://www.staff.uni-mainz.de/wuertz/matplotlib/
There is also a png file with a screenshot from the "ugly" and missing
ticks.

Plotting a reasonable figure seems to be hard, is there any chance of
solving this problem?

There have been many problems reported on this mailing list that concern latex
markup. Most often, people have difficulty getting usetex to work because
matplotlib depends on latex, dvipng, ghostscript, and optionally xpdf (more
precisely, xpdf's pdftops utility). If those dependencies are not working
properly, or if you are missing latex packages or fonts, then it shows up in
mpl's output.

Darren

···

On Tuesday 24 July 2007 9:50:46 am Peter Würtz wrote:

Hi,

Try getting your system set up to use the xpdf distiller, that has always
given me excellent results.

Thanks alot! Using xpdf gives perfect results!
http://www.staff.uni-mainz.de/wuertz/matplotlib/xpdf_tof_spectrum_bec_500ns.eps
http://www.staff.uni-mainz.de/wuertz/matplotlib/xpdf_tof_spectrum_bec_500ns.pdf

There have been many problems reported on this mailing list that concern latex
markup. Most often, people have difficulty getting usetex to work because
matplotlib depends on latex, dvipng, ghostscript, and optionally xpdf (more
precisely, xpdf's pdftops utility).

The problem is, the whole plot/ps/eps/dvi/ghostscript/pdf/xpdf/distiller
process is totally obscure to a normal user. For example, i don't have
xpdf installed... but choosing the xpdf setting gives me perfect results
now. If I understand you correctly, I just need the "pdftops" utility
included in "poppler-utils".

Well, thanks again!

···

-
Peter

Hi,

> Try getting your system set up to use the xpdf distiller, that has always
> given me excellent results.

Thanks alot! Using xpdf gives perfect results!
http://www.staff.uni-mainz.de/wuertz/matplotlib/xpdf_tof_spectrum_bec_500ns
.eps
http://www.staff.uni-mainz.de/wuertz/matplotlib/xpdf_tof_spectrum_bec_500ns
.pdf

Good. If you insert those into another latex document and create a pdf, the
text in your figure will even be searchable!

> There have been many problems reported on this mailing list that concern
> latex markup. Most often, people have difficulty getting usetex to work
> because matplotlib depends on latex, dvipng, ghostscript, and optionally
> xpdf (more precisely, xpdf's pdftops utility).

The problem is, the whole plot/ps/eps/dvi/ghostscript/pdf/xpdf/distiller
process is totally obscure to a normal user.

We know, but it is the best we have been able to do so far. It is a difficult
problem to solve. We document what we have, as best we can, at the usetex
wiki page, but it sometimes gets overlooked. There has been some effort to
produce a utility to parse the dvi file and use that information directly,
which would cut the external deps back to only latex.

For example, i don't have
xpdf installed... but choosing the xpdf setting gives me perfect results
now. If I understand you correctly, I just need the "pdftops" utility
included in "poppler-utils".

Thats right. Maybe I should change the rc keyword, which was named when
pdftops was part of xpdf.

Darren

···

On Tuesday 24 July 2007 12:59:54 pm Peter Würtz wrote: