Hi again, I didn't see any on-list answer, but got an off-list suggestion to use an rc parameter to set a LaTeX preamble. I played around a little and thought I should report on what I found, especially since it seems that there is room for improvement here and I'd be interested to help.
Here are the relevant rc params that I have set:
"font.size" : 17,
"font.family" : "serif",
"font.serif" : ["TeX Gyre Pagella"],
"pgf.rcfonts" : True,
"pgf.preamble": [r"\usepackage{amsmath,amssymb}",
r"\usepackage{fontspec}", r"\defaultfontfeatures{Numbers=OldStyle}"],
A couple of points to note here:
* I'm using the PGF backend -- this ran a bit faster and produced much
smaller files than MPL rendering with TeX labels (text.usetex = True).
Also, I have data files with labels using macros like \text which MPL
MathText doesn't support, so I need to be able to include amsmath.
* I've had to set TeX Gyre Pagella rather than Palatino, since this SE
question points out that fontspec's Palatino doesn't support small-caps
and old-style
figures:http://tex.stackexchange.com/questions/2994/fontspec-palatino-with-small-caps-and-old-style-figures
* Although the backend uses fontspec, I have to import it explicitly in
my preamble, because the MPL import and use of fontspec happens _after_
where the pgf.preamble key is inserted. Actually, given that I found
fontspec doesn't seem to do the right thing for most math fonts, maybe I
need to ignore the rcfonts setting and do it a bit more manually if I
want full control -- pity.
If I ask this configuration to output a PDF file, though, I don't get
old-style figures as intended. So I started looking at the generated TeX
source by outputting as .pgf and wrapping in a little LaTeX file like this:
\documentclass[12pt,minimal]{standalone}
\usepackage{pgf}
\usepackage{amsmath,amssymb}
\usepackage{fontspec}
\setmainfont[Numbers=OldStyle]{TeX Gyre Pagella}
\begin{document}
\input{plot.pgf}
\end{document}
I've attached the result of this with the default MPL .pgf output as
plot-mpldefault.pdf. A couple of things are notable in that plot:
* Old-style figures are used in the legend (where math mode is not
used), but the axis tick labels are not.
* The full-size figures on the axes are very thin weight compared to
the text axis labels -- I knew something had looked a bit wrong in the
default output!
Looking in the .pgf file, the reason is clear. The axis ticks are in
display math mode, like this:
\pgftext[x=0.987638in,y=1.778400in,right,]{{\rmfamily\fontsize{17.000000}{20.400000}\selectfont
\(\displaystyle 1.05\)}}%
^^^^^^^^^^^^^^^^^^^^^^
I removed the \(\displaystyle and \) from the file and then recompiled
with and without the Numbers=OldStyle spec in the wrapper, producing the
attached plot-textoldstyle.pdf and plot-textlining.pdf figures. In both
of these the weight of the tick labels is much more balanced with the
other labels than in the default; the old-style or lining figure style
is more a matter of personal preference, but I would like to have the
option.
Apologies for the long email! I'd appreciate any feedback. It seems that
there are a couple of small tweaks which would greatly improve the MPL
TeX/PGF output, although they probably have side-effects of which I'm
unaware:
* Don't put tick labels in math mode by default (i.e. unless a special
ticker is used). In our previous code, which I'm trying to reproduce in
MPL, even exponent-format tick labels were typeset as "10$^\text{exp}$"
which automatically gets the font weights and styles correct. Is the
current \(\displaystyle etc. specified by the default ticker or is it
specific to the PGF backend?
* I checked a bit, and fontspec seems a bit ropey when it comes to
changing math fonts to match the text font; I had to
\usepackage[osf]{mathpazo} before importing fontspec to get a correctly
weighted math font. mathspec is maybe worth investigation.
Thanks in advance, and thanks for tolerating this plot-cosmetics
obsessiveness ;-)
Andy
On 27/10/14 14:35, Andy Buckley wrote:
> Hi,
>
> I'm using MPL to implement a new plotter for a project has so far been
> using a custom-written LaTeX+pstricks script. Despite being slow and a
> bit hacky, the output is really quite nice and I want to try and emulate
> it as closely as possible via MPL; for example:
>
> https://users.hepforge.org/~buckley/atlas-py8-shower-e/ATLAS_2012_I1094568/d03-x02-y01.pdf
>
> I more or less have this working, but would really like to be able to
> use the "old-style figures" (OSF) numerals with variable baseline (aka
> lower-case or text figures cf.
> http://en.wikipedia.org/wiki/Text_figures), which give those plots quite
> a bit of their character.
>
> Probably this will anyway be possible only with the TeX or PGF backend
> to MPL, but what would be the best way to enable OSF figures from MPL?
> If I correctly understand the backend, the rc params font.family & e.g.
> font.serif are passed to the LaTeX fontspec package -- and in the
> fontspec documentation
> http://mirror.utexas.edu/ctan/macros/latex/contrib/fontspec/fontspec.pdf
> it seems that passing the Numbers=(OldStyle) option to the \fontspec
> command (or as the arg to \addfontfeature) would be the fontspec version
> of, for example, \usepackage[osf]{mathpazo}. Is there a way to pass
> options like this to fontspec? In general this would seem a useful thing
> to be able to do, since fontspec controls far more than OSFs, but I
> couldn't find a discussion of it in the docs.
>
> Hope you can help; thanks!
> Andy
>
--
Dr Andy Buckley, Royal Society University Research Fellow
Particle Physics Expt Group, University of Glasgow / PH Dept, CERN
plot-mpldefault.pdf
Description: Adobe PDF document
plot-textlining.pdf
Description: Adobe PDF document
plot-textoldstyle.pdf
Description: Adobe PDF document
------------------------------------------------------------------------------
_______________________________________________ Matplotlib-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/matplotlib-users
