Opened 9 years ago

Closed 9 years ago

#14664 closed enhancement (fixed)

Enable type1 fonts in matplotlib

Reported by: ppurka Owned by: jason, was
Priority: major Milestone: sage-5.11
Component: graphics Keywords:
Cc: Merged in: sage-5.11.beta0
Authors: Punarbasu Purkayastha Reviewers: Volker Braun
Report Upstream: N/A Work issues:
Branch: Commit:
Dependencies: #14640 Stopgaps:

Status badges

Description (last modified by ppurka)

Essentially what the ticket title says. Some publications require all the fonts to be embedded in the document and require the use of type-1 fonts. It is not very hard to enable these fonts.


Apply trac_14664-type1-fonts.patch to devel/sage

Attachments (1)

trac_14664-type1-fonts.patch (8.0 KB) - added by ppurka 9 years ago.
Apply to devel/sage

Download all attachments as: .zip

Change History (24)

comment:1 Changed 9 years ago by ppurka

  • Authors set to Punarbasu Purkayastha
  • Description modified (diff)
  • Status changed from new to needs_review

comment:2 Changed 9 years ago by vbraun

This isn't really about type 1 fonts, right? You are switching TeXing labels on/off. How about calling it plot(latex=bool).

It would be nice if we could autodetect the prerequisites and default to the right thing.

Last edited 9 years ago by vbraun (previous) (diff)

comment:3 Changed 9 years ago by ppurka

It is about type 1 fonts, as far as I can tell. The first thing publications tell is that type 3 fonts should not be present in the document. Some of them silently fail when you try to upload your document - the upload website just says that the upload didn't succeed.

As for references, I found these links earlier:

About using latex=bool: Unless someone knows that matplotlib has its own math renderer and doesn't use latex by default for rendering math, it will not be clear that something like latex=True will switch fonts to type 1 fonts.

Last edited 9 years ago by ppurka (previous) (diff)

comment:4 Changed 9 years ago by vbraun

rcParams['text.usetex'] = False means that you disable TeX entirely, right? Maybe we want separate plot(usetex=<bool>, type1_fonts=<bool>)? Or plot(tex=[None(default)|True|False|"type1"])?

comment:5 Changed 9 years ago by ppurka

False is the default. You can try the following in your sage installation

sage: from matplotlib import rcParams
sage: rcParams['text.usetex']
False

matplotlib does not require latex to render math fonts.

comment:6 follow-up: Changed 9 years ago by vbraun

What I'm saying is: Whether or not to use LaTeX is completely orthogonal to which fonts to use. But your patch links type1_fonts to both. You should be a able to use LaTeX without Type1 and the built-in renderer with Type1 fonts.

comment:7 follow-up: Changed 9 years ago by vbraun

The following setting might be relevant:

sage: matplotlib.rcParams['pdf.fonttype']
3

comment:8 in reply to: ↑ 6 Changed 9 years ago by ppurka

  • Status changed from needs_review to needs_work

Replying to vbraun:

What I'm saying is: Whether or not to use LaTeX is completely orthogonal to which fonts to use. But your patch links type1_fonts to both. You should be a able to use LaTeX without Type1 and the built-in renderer with Type1 fonts.

I am not sure if the latter is possible.

But you are right about decoupling latex from type1. I will make that change.

comment:9 in reply to: ↑ 7 Changed 9 years ago by ppurka

Replying to vbraun:

The following setting might be relevant:

sage: matplotlib.rcParams['pdf.fonttype']
3

From an initial reading, I believe this is something completely different and is only used with the internal matplotlib tex engine.

comment:10 Changed 9 years ago by ppurka

  • Status changed from needs_work to needs_review

I changed the option to font_style. It take three strings now, "type1", "latex" and "default". In my limited testing just turning on "latex" by itself gives me embedded type 1 fonts, but maybe there are cases where this is not true.

comment:11 Changed 9 years ago by vbraun

Font style means serif/sans serif. How about typeset="latex"?

comment:12 Changed 9 years ago by ppurka

Thanks. I have changed it to typeset.

comment:13 Changed 9 years ago by vbraun

I get fuzz 2 with sage-5.10.rc0

comment:14 follow-up: Changed 9 years ago by vbraun

  • can we get a ValueError if typeset is not one of the allowed values?
  • If you change matplotlib rcParams then you should switch it back when you are finished

comment:15 in reply to: ↑ 14 Changed 9 years ago by ppurka

Replying to vbraun:

  • can we get a ValueError if typeset is not one of the allowed values?

I will do that in a day or two. I need to compile 5.10rc0 first.

  • If you change matplotlib rcParams then you should switch it back when you are finished

Not resetting the rcParams actually affects only those plots which are a mixture of Sage and (direct) matplotlib calls. Currently, there is nothing in Sage that actually does this. I will make the change nevertheless because there might be someone doing this manually.

comment:16 Changed 9 years ago by ppurka

Updated the patch. The "default" does not mess with the settings at all now.

comment:17 Changed 9 years ago by vbraun

  • Dependencies set to #14640

Looks good but unfortunately conflicts with #14640. The latter has already positive review, so you'll have to rebase your patch.

comment:18 Changed 9 years ago by ppurka

Done. Thanks.

comment:19 Changed 9 years ago by vbraun

You are restoring rc_backup before saving it; The fuzz 2 ended up inserting a hunk at the wrong place.

comment:20 Changed 9 years ago by ppurka

So sorry. I should have checked the git diff. Thanks for catching this.

Changed 9 years ago by ppurka

Apply to devel/sage

comment:21 Changed 9 years ago by ppurka

ok. Now it should be done.

comment:22 Changed 9 years ago by vbraun

  • Reviewers set to Volker Braun
  • Status changed from needs_review to positive_review

Looks good to me

comment:23 Changed 9 years ago by jdemeyer

  • Merged in set to sage-5.11.beta0
  • Resolution set to fixed
  • Status changed from positive_review to closed
Note: See TracTickets for help on using tickets.