Movatterモバイル変換


[0]ホーム

URL:


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

Sign up
Appearance settings

Commitb1c5b53

Browse files
committed
Fix baseline alignment when using usetex.
Previously we inferred the baseline of usetex strings with the baselineof the character with the lowest baseline, which is wrong in thepresence of indices (see usetex_baseline_test.py). There was an optionto use the "preview" latex package to fix that, but that was never madethe default and likely cannot as the package is GPL.Instead I can infer the baseline position by "reverse-engineering"the starting instructions of the dvi stream (this was done withoutconsulting the approach in "preview"). The results can be checkedusing usetex_baseline_test.py (preview=False now looks the same aspreview=True; likewise, the output of test_usetex was changed.The text.latex.preview rc can now be deprecated (in a future PR).The test was also updated to include the strings of theusetex_baseline_test example (which may go away once text.latex.previewis removed).
1 parent3aa72b1 commitb1c5b53

File tree

6 files changed

+37
-12
lines changed

6 files changed

+37
-12
lines changed

‎lib/matplotlib/backends/backend_ps.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -484,8 +484,7 @@ def draw_tex(self, gc, x, y, s, prop, angle, ismath='TeX!', mtext=None):
484484
r'\psfrag{%s}[Bl][Bl][1][%f]{\fontsize{%f}{%f}%s}'% (
485485
thetext,angle,fontsize,fontsize*1.25,tex))
486486
else:
487-
# Stick to the bottom alignment, but this may give incorrect
488-
# baseline some times.
487+
# Stick to the bottom alignment.
489488
pos=_nums_to_str(x-corr,y-bl)
490489
self.psfrag.append(
491490
r'\psfrag{%s}[bl][bl][1][%f]{\fontsize{%f}{%f}%s}'% (

‎lib/matplotlib/dviread.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,8 @@ def _output(self):
263263
maxx=max(maxx,x+w)
264264
maxy=max(maxy,y+e)
265265
maxy_pure=max(maxy_pure,y)
266+
ifself._baseline_visnotNone:
267+
maxy_pure=self._baseline_v# This should normally be the case.
266268

267269
ifself.dpiisNone:
268270
# special case for ease of debugging: output raw dvi coordinates
@@ -290,9 +292,24 @@ def _read(self):
290292
Read one page from the file. Return True if successful,
291293
False if there were no more pages.
292294
"""
295+
# Pages appear to start with the sequence
296+
# bop (begin of page)
297+
# xxx comment
298+
# down
299+
# push
300+
# down, down
301+
# push
302+
# down (possibly multiple)
303+
# push <= here, v is the baseline position.
304+
# etc.
305+
# (dviasm is useful to explore this structure.)
306+
self._baseline_v=None
293307
whileTrue:
294308
byte=self.file.read(1)[0]
295309
self._dtable[byte](self,byte)
310+
if (self._baseline_visNone
311+
andlen(getattr(self,"stack", []))==3):
312+
self._baseline_v=self.v
296313
ifbyte==140:# end of page
297314
returnTrue
298315
ifself.stateis_dvistate.post_post:# end of file
Binary file not shown.

‎lib/matplotlib/tests/test_usetex.py

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,24 +12,33 @@
1212
pytestmark=pytest.mark.skip('Missing TeX of Ghostscript or dvipng')
1313

1414

15-
@image_comparison(baseline_images=['test_usetex'],
16-
extensions=['pdf','png'],
17-
tol={'aarch64':2.868,'x86_64':2.868}.get(
18-
platform.machine(),0.3
19-
))
15+
@image_comparison(
16+
baseline_images=['test_usetex'],
17+
extensions=['pdf','png'],
18+
tol={'aarch64':2.868,'x86_64':2.868}.get(platform.machine(),0.3),
19+
style="mpl20")
2020
deftest_usetex():
2121
mpl.rcParams['text.usetex']=True
2222
fig=plt.figure()
2323
ax=fig.add_subplot(111)
24-
ax.text(0.1,0.2,
24+
kwargs= {"verticalalignment":"baseline","size":24,
25+
"bbox":dict(pad=0,edgecolor="k",facecolor="none")}
26+
ax.text(0.2,0.7,
2527
# the \LaTeX macro exercises character sizing and placement,
2628
# \left[ ... \right\} draw some variable-height characters,
2729
# \sqrt and \frac draw horizontal rules, \mathrm changes the font
2830
r'\LaTeX\ $\left[\int\limits_e^{2e}'
2931
r'\sqrt\frac{\log^3 x}{x}\,\mathrm{d}x \right\}$',
30-
fontsize=24)
31-
ax.set_xticks([])
32-
ax.set_yticks([])
32+
**kwargs)
33+
ax.text(0.2,0.3,"lg",**kwargs)
34+
ax.text(0.4,0.3,r"$\frac{1}{2}\pi$",**kwargs)
35+
ax.text(0.6,0.3,"$p^{3^A}$",**kwargs)
36+
ax.text(0.8,0.3,"$p_{3_2}$",**kwargs)
37+
forxin {t.get_position()[0]fortinax.texts}:
38+
ax.axvline(x)
39+
foryin {t.get_position()[1]fortinax.texts}:
40+
ax.axhline(y)
41+
ax.set_axis_off()
3342

3443

3544
@check_figures_equal()

‎lib/matplotlib/texmanager.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,7 @@ def get_text_width_height_descent(self, tex, fontsize, renderer=None):
411411
returnwidth,height+depth,depth
412412

413413
else:
414-
# use dviread. It sometimes returns a wrong descent.
414+
# use dviread.
415415
dvifile=self.make_dvi(tex,fontsize)
416416
withdviread.Dvi(dvifile,72*dpi_fraction)asdvi:
417417
page,=dvi

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp