Skip to content

Commit 79f9db9

Browse files
committed
Fix auto-sized glyphs with BaKoMa fonts
If the larger glyphs for an auto-sized character in `cmex10` uses a character that is in the `latex_to_bakoma` table, then it will be mapped an extra time into `cmr10` (usually). Thus we end up with a large version of a "normal" character, such as an exclamation point. Instead map these glyphs through the `latex_to_bakoma` table by using their glyph names as "commands". This ensures they don't get double-mapped to the wrong font and fixes the following issues: - slash (/) uses an apostrophe at the largest size - right parenthesis uses an exclamation point at the largest size - left and right braces use parentheses at the largest size - right floor uses a percentage sign at the largest size - left ceiling uses an ampersand at the largest size
1 parent 4c721c3 commit 79f9db9

File tree

5 files changed

+936
-844
lines changed

5 files changed

+936
-844
lines changed

Diff for: lib/matplotlib/_mathtext.py

+29-49
Original file line numberDiff line numberDiff line change
@@ -473,57 +473,37 @@ def _get_glyph(self, fontname: str, font_class: str,
473473
# The Bakoma fonts contain many pre-sized alternatives for the
474474
# delimiters. The AutoSizedChar class will use these alternatives
475475
# and select the best (closest sized) glyph.
476+
_latex_sizes = ('big', 'Big', 'bigg', 'Bigg')
476477
_size_alternatives = {
477-
'(': [('rm', '('), ('ex', '\xa1'), ('ex', '\xb3'),
478-
('ex', '\xb5'), ('ex', '\xc3')],
479-
')': [('rm', ')'), ('ex', '\xa2'), ('ex', '\xb4'),
480-
('ex', '\xb6'), ('ex', '\x21')],
481-
'{': [('cal', '{'), ('ex', '\xa9'), ('ex', '\x6e'),
482-
('ex', '\xbd'), ('ex', '\x28')],
483-
'}': [('cal', '}'), ('ex', '\xaa'), ('ex', '\x6f'),
484-
('ex', '\xbe'), ('ex', '\x29')],
485-
# The fourth size of '[' is mysteriously missing from the BaKoMa
486-
# font, so I've omitted it for both '[' and ']'
487-
'[': [('rm', '['), ('ex', '\xa3'), ('ex', '\x68'),
488-
('ex', '\x22')],
489-
']': [('rm', ']'), ('ex', '\xa4'), ('ex', '\x69'),
490-
('ex', '\x23')],
491-
r'\lfloor': [('ex', '\xa5'), ('ex', '\x6a'),
492-
('ex', '\xb9'), ('ex', '\x24')],
493-
r'\rfloor': [('ex', '\xa6'), ('ex', '\x6b'),
494-
('ex', '\xba'), ('ex', '\x25')],
495-
r'\lceil': [('ex', '\xa7'), ('ex', '\x6c'),
496-
('ex', '\xbb'), ('ex', '\x26')],
497-
r'\rceil': [('ex', '\xa8'), ('ex', '\x6d'),
498-
('ex', '\xbc'), ('ex', '\x27')],
499-
r'\langle': [('ex', '\xad'), ('ex', '\x44'),
500-
('ex', '\xbf'), ('ex', '\x2a')],
501-
r'\rangle': [('ex', '\xae'), ('ex', '\x45'),
502-
('ex', '\xc0'), ('ex', '\x2b')],
503-
r'\__sqrt__': [('ex', '\x70'), ('ex', '\x71'),
504-
('ex', '\x72'), ('ex', '\x73')],
505-
r'\backslash': [('ex', '\xb2'), ('ex', '\x2f'),
506-
('ex', '\xc2'), ('ex', '\x2d')],
507-
r'/': [('rm', '/'), ('ex', '\xb1'), ('ex', '\x2e'),
508-
('ex', '\xcb'), ('ex', '\x2c')],
509-
r'\widehat': [('rm', '\x5e'), ('ex', '\x62'), ('ex', '\x63'),
510-
('ex', '\x64')],
511-
r'\widetilde': [('rm', '\x7e'), ('ex', '\x65'), ('ex', '\x66'),
512-
('ex', '\x67')],
513-
r'<': [('cal', 'h'), ('ex', 'D')],
514-
r'>': [('cal', 'i'), ('ex', 'E')]
515-
}
478+
'(': [('rm', '('), *[('ex', fr'\parenleft{s}') for s in _latex_sizes]],
479+
')': [('rm', ')'), *[('ex', fr'\parenright{s}') for s in _latex_sizes]],
480+
'{': [('cal', '{'), *[('ex', fr'\braceleft{s}') for s in _latex_sizes]],
481+
'}': [('cal', '}'), *[('ex', fr'\braceright{s}') for s in _latex_sizes]],
482+
'[': [('rm', '['), *[('ex', fr'\bracketleft{s}') for s in _latex_sizes]],
483+
']': [('rm', ']'), *[('ex', fr'\bracketright{s}') for s in _latex_sizes]],
484+
'<': [('cal', r'\angbracketleft'),
485+
*[('ex', fr'\angbracketleft{s}') for s in _latex_sizes]],
486+
'>': [('cal', r'\angbracketright'),
487+
*[('ex', fr'\angbracketright{s}') for s in _latex_sizes]],
488+
r'\lfloor': [('ex', fr'\floorleft{s}') for s in _latex_sizes],
489+
r'\rfloor': [('ex', fr'\floorright{s}') for s in _latex_sizes],
490+
r'\lceil': [('ex', fr'\ceilingleft{s}') for s in _latex_sizes],
491+
r'\rceil': [('ex', fr'\ceilingright{s}') for s in _latex_sizes],
492+
r'\__sqrt__': [('ex', fr'\radical{s}') for s in _latex_sizes],
493+
r'\backslash': [('ex', fr'\backslash{s}') for s in _latex_sizes],
494+
r'/': [('rm', '/'), *[('ex', fr'\slash{s}') for s in _latex_sizes]],
495+
r'\widehat': [('rm', '\x5e'), ('ex', r'\hatwide'), ('ex', r'\hatwider'),
496+
('ex', r'\hatwidest')],
497+
r'\widetilde': [('rm', '\x7e'), ('ex', r'\tildewide'), ('ex', r'\tildewider'),
498+
('ex', r'\tildewidest')],
499+
}
516500

517-
for alias, target in [(r'\leftparen', '('),
518-
(r'\rightparen', ')'),
519-
(r'\leftbrace', '{'),
520-
(r'\rightbrace', '}'),
521-
(r'\leftbracket', '['),
522-
(r'\rightbracket', ']'),
523-
(r'\{', '{'),
524-
(r'\}', '}'),
525-
(r'\[', '['),
526-
(r'\]', ']')]:
501+
for alias, target in [(r'\leftparen', '('), (r'\rightparen', ')'),
502+
(r'\leftbrace', '{'), (r'\rightbrace', '}'),
503+
(r'\leftbracket', '['), (r'\rightbracket', ']'),
504+
(r'\langle', '<'), (r'\rangle', '>'),
505+
(r'\{', '{'), (r'\}', '}'),
506+
(r'\[', '['), (r'\]', ']')]:
527507
_size_alternatives[alias] = _size_alternatives[target]
528508

529509
def get_sized_alternatives_for_symbol(self, fontname: str,

Diff for: lib/matplotlib/_mathtext_data.py

+69
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,75 @@
3333
'{' : ('cmex10', 0xa9),
3434
'}' : ('cmex10', 0xaa),
3535

36+
'\\angbracketleft' : ('cmsy10', 0x68),
37+
'\\angbracketright' : ('cmsy10', 0x69),
38+
'\\angbracketleftbig' : ('cmex10', 0xad),
39+
'\\angbracketleftBig' : ('cmex10', 0x44),
40+
'\\angbracketleftbigg' : ('cmex10', 0xbf),
41+
'\\angbracketleftBigg' : ('cmex10', 0x2a),
42+
'\\angbracketrightbig' : ('cmex10', 0xae),
43+
'\\angbracketrightBig' : ('cmex10', 0x45),
44+
'\\angbracketrightbigg' : ('cmex10', 0xc0),
45+
'\\angbracketrightBigg' : ('cmex10', 0x2b),
46+
'\\backslashbig' : ('cmex10', 0xb2),
47+
'\\backslashBig' : ('cmex10', 0x2f),
48+
'\\backslashbigg' : ('cmex10', 0xc2),
49+
'\\backslashBigg' : ('cmex10', 0x2d),
50+
'\\braceleftbig' : ('cmex10', 0xa9),
51+
'\\braceleftBig' : ('cmex10', 0x6e),
52+
'\\braceleftbigg' : ('cmex10', 0xbd),
53+
'\\braceleftBigg' : ('cmex10', 0x28),
54+
'\\bracerightbig' : ('cmex10', 0xaa),
55+
'\\bracerightBig' : ('cmex10', 0x6f),
56+
'\\bracerightbigg' : ('cmex10', 0xbe),
57+
'\\bracerightBigg' : ('cmex10', 0x29),
58+
'\\bracketleftbig' : ('cmex10', 0xa3),
59+
'\\bracketleftBig' : ('cmex10', 0x68),
60+
'\\bracketleftbigg' : ('cmex10', 0x2219),
61+
'\\bracketleftBigg' : ('cmex10', 0x22),
62+
'\\bracketrightbig' : ('cmex10', 0xa4),
63+
'\\bracketrightBig' : ('cmex10', 0x69),
64+
'\\bracketrightbigg' : ('cmex10', 0xb8),
65+
'\\bracketrightBigg' : ('cmex10', 0x23),
66+
'\\ceilingleftbig' : ('cmex10', 0xa7),
67+
'\\ceilingleftBig' : ('cmex10', 0x6c),
68+
'\\ceilingleftbigg' : ('cmex10', 0xbb),
69+
'\\ceilingleftBigg' : ('cmex10', 0x26),
70+
'\\ceilingrightbig' : ('cmex10', 0xa8),
71+
'\\ceilingrightBig' : ('cmex10', 0x6d),
72+
'\\ceilingrightbigg' : ('cmex10', 0xbc),
73+
'\\ceilingrightBigg' : ('cmex10', 0x27),
74+
'\\floorleftbig' : ('cmex10', 0xa5),
75+
'\\floorleftBig' : ('cmex10', 0x6a),
76+
'\\floorleftbigg' : ('cmex10', 0xb9),
77+
'\\floorleftBigg' : ('cmex10', 0x24),
78+
'\\floorrightbig' : ('cmex10', 0xa6),
79+
'\\floorrightBig' : ('cmex10', 0x6b),
80+
'\\floorrightbigg' : ('cmex10', 0xba),
81+
'\\floorrightBigg' : ('cmex10', 0x25),
82+
'\\hatwide' : ('cmex10', 0x62),
83+
'\\hatwider' : ('cmex10', 0x63),
84+
'\\hatwidest' : ('cmex10', 0x64),
85+
'\\parenleftbig' : ('cmex10', 0xa1),
86+
'\\parenleftBig' : ('cmex10', 0xb3),
87+
'\\parenleftbigg' : ('cmex10', 0xb5),
88+
'\\parenleftBigg' : ('cmex10', 0xc3),
89+
'\\parenrightbig' : ('cmex10', 0xa2),
90+
'\\parenrightBig' : ('cmex10', 0xb4),
91+
'\\parenrightbigg' : ('cmex10', 0xb6),
92+
'\\parenrightBigg' : ('cmex10', 0x21),
93+
'\\radicalbig' : ('cmex10', 0x70),
94+
'\\radicalBig' : ('cmex10', 0x71),
95+
'\\radicalbigg' : ('cmex10', 0x72),
96+
'\\radicalBigg' : ('cmex10', 0x73),
97+
'\\slashbig' : ('cmex10', 0xb1),
98+
'\\slashBig' : ('cmex10', 0x2e),
99+
'\\slashbigg' : ('cmex10', 0xc1),
100+
'\\slashBigg' : ('cmex10', 0x2c),
101+
'\\tildewide' : ('cmex10', 0x65),
102+
'\\tildewider' : ('cmex10', 0x66),
103+
'\\tildewidest' : ('cmex10', 0x67),
104+
36105
',' : ('cmmi10', 0x3b),
37106
'.' : ('cmmi10', 0x3a),
38107
'/' : ('cmmi10', 0x3d),
Binary file not shown.
Loading

0 commit comments

Comments
 (0)