@@ -263,21 +263,42 @@ def _draw_mathtext(self, gc, x, y, s, prop, angle):
263263 svg_lines = svg_elements .svg_lines
264264 color = rgb2hex (gc .get_rgb ())
265265
266- svg = ""
267266 self .open_group ("mathtext" )
268- for fontname , fontsize , thetext , ox , oy , metrics in svg_glyphs :
269- style = 'font-size: %f; font-family: %s; fill: %s;' % (fontsize ,
270- fontname , color )
271- if angle != 0 :
272- transform = 'transform="translate(%f,%f) rotate(%1.1f) translate(%f,%f)"' % (x ,y ,- angle ,- x ,- y ) # Inkscape doesn't support rotate(angle x y)
273- else : transform = ''
267+
268+ svg = '<text style="fill: %s" x="%f" y="%f"' % (color ,x ,y )
269+
270+ if angle != 0 :
271+ svg += ( ' transform="translate(%f,%f) rotate(%1.1f) translate(%f,%f)"'
272+ % (x ,y ,- angle ,- x ,- y ) ) # Inkscape doesn't support rotate(angle x y)
273+ svg += '>\n '
274+
275+ curr_x ,curr_y = 0.0 ,0.0
276+
277+ for fontname , fontsize , thetext , new_x , new_y_mtc , metrics in svg_glyphs :
274278 if rcParams ["mathtext.mathtext2" ]:
275- newx , newy = x + ox , y + oy - height
279+ new_y = new_y_mtc - height
276280 else :
277- newx , newy = x + ox , y - oy
278- svg += """\
279- <text style="%(style)s" x="%(newx)f" y="%(newy)f" %(transform)s>%(thetext)s</text>
280- """ % locals ()
281+ new_y = - new_y_mtc
282+
283+ svg += '<tspan'
284+ svg += ' style="font-size: %f; font-family: %s"' % (fontsize , fontname )
285+ xadvance = metrics .advance
286+ svg += ' textLength="%f"' % xadvance
287+
288+ dx = new_x - curr_x
289+ if dx != 0.0 :
290+ svg += ' dx="%f"' % dx
291+
292+ dy = new_y - curr_y
293+ if dy != 0.0 :
294+ svg += ' dy="%f"' % dy
295+
296+ svg += '>%s</tspan>\n ' % thetext
297+
298+ curr_x = new_x + xadvance
299+ curr_y = new_y
300+
301+ svg += '</text>\n '
281302
282303 self ._svgwriter .write (svg )
283304 rgbFace = gc .get_rgb ()
0 commit comments