Description
Bug report
Bug summary
Kerning is not applied in the PDF output of pure single-byte strings which leads to inconsistencies between PDF and other output formats.
Code for reproduction
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.text(0.1, 0.5, "ATL", size=120)
fig.savefig("atl.pdf")
fig.savefig("atl.png", dpi=300)
Expected outcome
I expected that the spacing between A
and T
is consistent between both formats. Besides this minor visual issues, I use get_window_extent()
to place a second text item in bold next to the first one. The space between the two texts varies significantly between output formats. get_window_extent()
considers the kerning information, so the space looks correct in PNG but is usually too small in PDF files.
The issue is related to #18282. Here the same issue was fixed for strings with multi-byte chars. I don't see the changes from #18282 in version 3.3.4, but they will not effect the single-byte string case.
Unaware of #18282, I've implemented a fix for the single-byte case. I will open a PR, but you might have other ideas on how to implementation a fix.
Matplotlib version
- Operating system: Ubuntu 16.04
- Matplotlib version: 3.3.4
- Matplotlib backend: TkAgg (but actually PDF?)
- Python version: 3.7.5
- Font: DejaVuSans Type 3
I've installed matplotlib in a virtualenv with pip.