8000 Merge pull request #14833 from anntzer/convert_psfrags · matplotlib/matplotlib@1f6f05b · GitHub
[go: up one dir, main page]

Skip to content

Commit 1f6f05b

Browse files
authored
Merge pull request #14833 from anntzer/convert_psfrags
MNT: Reuse TexManager implementation in convert_psfrags.
2 parents 9122a45 + 200094d commit 1f6f05b

File tree

1 file changed

+28
-70
lines changed

1 file changed

+28
-70
lines changed

lib/matplotlib/backends/backend_ps.py

Lines changed: 28 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
from matplotlib.mathtext import MathTextParser
3333
from matplotlib._mathtext_data import uni2type1
3434
from matplotlib.path import Path
35+
from matplotlib.texmanager import TexManager
3536
from matplotlib.transforms import Affine2D
3637
from matplotlib.backends.backend_mixed import MixedModeRenderer
3738
from . import _backend_pdf_ps
@@ -1238,67 +1239,32 @@ def convert_psfrags(tmpfile, psfrags, font_preamble, custom_preamble,
12381239
commands to convert those tags to text. LaTeX/dvips produces the postscript
12391240
file that includes the actual text.
12401241
"""
1241-
tmpdir = os.path.split(tmpfile)[0]
1242-
epsfile = tmpfile+'.eps'
1243-
shutil.move(tmpfile, epsfile)
1244-
latexfile = tmpfile+'.tex'
1245-
dvifile = tmpfile+'.dvi'
1246-
psfile = tmpfile+'.ps'
1247-
1248-
if orientation == 'landscape':
1249-
angle = 90
1250-
else:
1251-
angle = 0
1252-
1253-
if rcParams['text.latex.unicode']:
1254-
unicode_preamble = """\\usepackage{ucs}
1255-
\\usepackage[utf8x]{inputenc}"""
1256-
else:
1257-
unicode_preamble = ''
1258-
1259-
s = r"""\documentclass{article}
1260-
%s
1261-
%s
1262-
%s
1263-
\usepackage[
1264-
dvips, papersize={%sin,%sin}, body={%sin,%sin}, margin={0in,0in}]{geometry}
1265-
\usepackage{psfrag}
1266-
\usepackage[dvips]{graphicx}
1267-
\usepackage{color}
1268-
\pagestyle{empty}
1269-
\begin{document}
1270-
\begin{figure}
1271-
\centering
1272-
\leavevmode
1273-
%s
1274-
\includegraphics*[angle=%s]{%s}
1275-
\end{figure}
1276-
\end{document}
1277-
""" % (font_preamble, unicode_preamble, custom_preamble,
1278-
paper_width, paper_height, paper_width, paper_height,
1279-
'\n'.join(psfrags), angle, os.path.split(epsfile)[-1])
1280-
1281-
try:
1282-
pathlib.Path(latexfile).write_text(
1283-
s, encoding='utf-8' if rcParams['text.latex.unicode'] else 'ascii')
1284-
except UnicodeEncodeError:
1285-
_log.info("You are using unicode and latex, but have not enabled the "
1286-
"Matplotlib 'text.latex.unicode' rcParam.")
1287-
raise
1288-
1289-
# Replace \\ for / so latex does not think there is a function call
1290-
latexfile = latexfile.replace("\\", "/")
1291-
# Replace ~ so Latex does not think it is line break
1292-
latexfile = latexfile.replace("~", "\\string~")
1293-
1294-
cbook._check_and_log_subprocess(
1295-
["latex", "-interaction=nonstopmode", '"%s"' % latexfile],
1296-
_log, cwd=tmpdir)
1297-
cbook._check_and_log_subprocess(
1298-
['dvips', '-q', '-R0', '-o', os.path.basename(psfile),
1299-
os.path.basename(dvifile)], _log, cwd=tmpdir)
1300-
os.remove(epsfile)
1301-
shutil.move(psfile, tmpfile)
1242+
with mpl.rc_context({
1243+
"text.latex.preamble":
1244+
rcParams["text.latex.preamble"] +
1245+
r"\usepackage{psfrag,color}"
1246+
r"\usepackage[dvips]{graphicx}"
1247+
r"\PassOptionsToPackage{dvips}{geometry}"}):
1248+
dvifile = TexManager().make_dvi(
1249+
r"\newgeometry{papersize={%(width)sin,%(height)sin},"
1250+
r"body={%(width)sin,%(height)sin}, margin={0in,0in}}""\n"
1251+
r"\begin{figure}"
1252+
r"\centering\leavevmode%(psfrags)s"
1253+
r"\includegraphics*[angle=%(angle)s]{%(epsfile)s}"
1254+
r"\end{figure}"
1255+
% {
1256+
"width": paper_width, "height": paper_height,
1257+
"psfrags": "\n".join(psfrags),
1258+
"angle": 90 if orientation == 'landscape' else 0,
1259+
"epsfile": pathlib.Path(tmpfile).resolve().as_posix(),
1260+
},
1261+
fontsize=10) # tex's default fontsize.
1262+
1263+
with TemporaryDirectory() as tmpdir:
1264+
psfile = os.path.join(tmpdir, "tmp.ps")
1265+
cbook._check_and_log_subprocess(
1266+
['dvips', '-q', '-R0', '-o', psfile, dvifile], _log)
1267+
shutil.move(psfile, tmpfile)
13021268

13031269
# check if the dvips created a ps in landscape paper. Somehow,
13041270
# above latex+dvips results in a ps file in a landscape mode for a
@@ -1308,15 +1274,7 @@ def convert_psfrags(tmpfile, psfrags, font_preamble, custom_preamble,
13081274
# information. The return value is used in pstoeps step to recover
13091275
# the correct bounding box. 2010-06-05 JJL
13101276
with open(tmpfile) as fh:
1311-
if "Landscape" in fh.read(1000):
1312-
psfrag_rotated = True
1313-
else:
1314-
psfrag_rotated = False
1315-
1316-
if not debugPS:
1317-
for fname in glob.glob(tmpfile+'.*'):
1318-
os.remove(fname)
1319-
1277+
psfrag_rotated = "Landscape" in fh.read(1000)
13201278
return psfrag_rotated
13211279

13221280

0 commit comments

Comments
 (0)
101
0