Skip to content

Commit c81bb9d

Browse files
committed
When latex fails, make sure it does not write a dvi.
PR 10180 added some tests checking that when the latex subprocess used by usetex fails, a RuntimeError does propagate up to the Python process. It originally passed the CI, but since its merge, various CIs have been failing on the test that a text with `$22_2_2$` (an invalid tex construct) fails when usetex is set. This is because while `latex --interaction=nonstopmode` does exit with error code 1 when processing a file with that construct, the error is "benign" enough that it still writes a dvi before exiting (the contents are simply as if the input was `$22_{22}$`). The dvi goes into the tex cache and later CI runs pick up the cached dvi instead of running the subprocess, thus failing the test. The solution is to use --halt-on-error on top of nonstopmode, see e.g. https://tex.stackexchange.com/questions/258814/what-is-the-difference-between-interaction-nonstopmode-and-halt-on-error (and to clear your tex cache). Note that before the PR, there would similarly be the weird behavior (for the user) that the first attempt to use a "benignly" invalid tex construct would trigger an exception, but latter attempts would not (for the same reason as above).
1 parent 44a9036 commit c81bb9d

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

lib/matplotlib/texmanager.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,8 @@ def make_dvi(self, tex, fontsize):
361361
texfile = self.make_tex(tex, fontsize)
362362
with Locked(self.texcache):
363363
self._run_checked_subprocess(
364-
["latex", "-interaction=nonstopmode", texfile], tex)
364+
["latex", "-interaction=nonstopmode", "--halt-on-error",
365+
texfile], tex)
365366
for fname in glob.glob(basefile + '*'):
366367
if not fname.endswith(('dvi', 'tex')):
367368
try:
@@ -387,7 +388,8 @@ def make_dvi_preview(self, tex, fontsize):
387388
if not os.path.exists(dvifile) or not os.path.exists(baselinefile):
388389
texfile = self.make_tex_preview(tex, fontsize)
389390
report = self._run_checked_subprocess(
390-
["latex", "-interaction=nonstopmode", texfile], tex)
391+
["latex", "-interaction=nonstopmode", "--halt-on-error",
392+
texfile], tex)
391393

392394
# find the box extent information in the latex output
393395
# file and store them in ".baseline" file

0 commit comments

Comments
 (0)