Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 4ea309a

Browse filesBrowse files
committed
Pick TeX cache name based on entire TeX source.
This allows invalidating the cache when the source generation algorithm changes.
1 parent 157b0be commit 4ea309a
Copy full SHA for 4ea309a

File tree

Expand file treeCollapse file tree

1 file changed

+20
-28
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+20
-28
lines changed

‎lib/matplotlib/texmanager.py

Copy file name to clipboardExpand all lines: lib/matplotlib/texmanager.py
+20-28Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -161,10 +161,9 @@ def get_basefile(self, tex, fontsize, dpi=None):
161161
"""
162162
Return a filename based on a hash of the string, fontsize, and dpi.
163163
"""
164-
s = ''.join([tex, self.get_font_config(), '%f' % fontsize,
165-
self.get_custom_preamble(), str(dpi or '')])
164+
src = self._get_tex_source(tex, fontsize) + str(dpi)
166165
return os.path.join(
167-
self.texcache, hashlib.md5(s.encode('utf-8')).hexdigest())
166+
self.texcache, hashlib.md5(src.encode('utf-8')).hexdigest())
168167

169168
def get_font_preamble(self):
170169
"""
@@ -176,7 +175,13 @@ def get_custom_preamble(self):
176175
"""Return a string containing user additions to the tex preamble."""
177176
return rcParams['text.latex.preamble']
178177

179-
def _get_preamble(self):
178+
def _get_tex_source(self, tex, fontsize):
179+
"""Return the complete TeX source for processing a TeX string."""
180+
self.get_font_config() # Updates self._font_preamble.
181+
baselineskip = 1.25 * fontsize
182+
fontcmd = (r'\sffamily' if self._font_family == 'sans-serif' else
183+
r'\ttfamily' if self._font_family == 'monospace' else
184+
r'\rmfamily')
180185
return "\n".join([
181186
r"\documentclass{article}",
182187
# Pass-through \mathdefault, which is used in non-usetex mode to
@@ -196,6 +201,15 @@ def _get_preamble(self):
196201
# Custom packages (e.g. newtxtext) may already have loaded textcomp
197202
# with different options.
198203
_usepackage_if_not_loaded("textcomp"),
204+
r"\pagestyle{empty}",
205+
r"\begin{document}",
206+
r"% The empty hbox ensures that a page is printed even for empty ",
207+
r"% inputs, except when using psfrag which gets confused by it.",
208+
r"\fontsize{%f}{%f}%%" % (fontsize, baselineskip),
209+
r"\ifdefined\psfrag\else\hbox{}\fi%",
210+
r"{\obeylines%s %s}\special{matplotlibbaselinemarker}"
211+
% (fontcmd, tex),
212+
r"\end{document}",
199213
])
200214

201215
def make_tex(self, tex, fontsize):
@@ -204,30 +218,8 @@ def make_tex(self, tex, fontsize):
204218
205219
Return the file name.
206220
"""
207-
basefile = self.get_basefile(tex, fontsize)
208-
texfile = '%s.tex' % basefile
209-
fontcmd = (r'\sffamily' if self._font_family == 'sans-serif' else
210-
r'\ttfamily' if self._font_family == 'monospace' else
211-
r'\rmfamily')
212-
tex_template = r"""
213-
%(preamble)s
214-
\pagestyle{empty}
215-
\begin{document}
216-
%% The empty hbox ensures that a page is printed even for empty inputs, except
217-
%% when using psfrag which gets confused by it.
218-
\fontsize{%(fontsize)f}{%(baselineskip)f}%%
219-
\ifdefined\psfrag\else\hbox{}\fi%%
220-
{\obeylines%(fontcmd)s %(tex)s}\special{matplotlibbaselinemarker}
221-
\end{document}
222-
"""
223-
Path(texfile).write_text(tex_template % {
224-
"preamble": self._get_preamble(),
225-
"fontsize": fontsize,
226-
"baselineskip": fontsize * 1.25,
227-
"fontcmd": fontcmd,
228-
"tex": tex,
229-
}, encoding="utf-8")
230-
221+
texfile = self.get_basefile(tex, fontsize) + ".tex"
222+
Path(texfile).write_text(self._get_tex_source(tex, fontsize))
231223
return texfile
232224

233225
def _run_checked_subprocess(self, command, tex, *, cwd=None):

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.