Revision: 6614
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=6614&view=rev
Author:   mdboom
Date:     2008-12-15 18:03:34 +0000 (Mon, 15 Dec 2008)

Log Message:
-----------
Backporting 6613: Making $ work in regular text

Modified Paths:
--------------
    branches/v0_98_5_maint/doc/users/mathtext.rst
    branches/v0_98_5_maint/doc/users/text_intro.rst
    branches/v0_98_5_maint/doc/users/usetex.rst
    branches/v0_98_5_maint/lib/matplotlib/offsetbox.py
    branches/v0_98_5_maint/lib/matplotlib/text.py

Modified: branches/v0_98_5_maint/doc/users/mathtext.rst
===================================================================
--- branches/v0_98_5_maint/doc/users/mathtext.rst       2008-12-15 17:58:43 UTC 
(rev 6613)
+++ branches/v0_98_5_maint/doc/users/mathtext.rst       2008-12-15 18:03:34 UTC 
(rev 6614)
@@ -3,17 +3,19 @@
 Writing mathematical expressions
 ================================
 
-You can use TeX markup in any matplotlib text string.  Note that you
-do not need to have TeX installed, since matplotlib ships its own TeX
-expression parser, layout engine and fonts.  The layout engine is a
-fairly direct adaptation of the layout algorithms in Donald Knuth's
-TeX, so the quality is quite good (matplotlib also provides a
-``usetex`` option for those who do want to call out to TeX to generate
-their text (see :ref:`usetex-tutorial`).
+You can use a subset TeX markup in any matplotlib text string by
+placing it inside a pair of dollar signs ($).
 
-Any text element can use math text.  You need to use raw strings
-(preceed the quotes with an ``'r'``), and surround the string text
-with dollar signs, as in TeX.  Regular text and mathtext can be
+Note that you do not need to have TeX installed, since matplotlib
+ships its own TeX expression parser, layout engine and fonts.  The
+layout engine is a fairly direct adaptation of the layout algorithms
+in Donald Knuth's TeX, so the quality is quite good (matplotlib also
+provides a ``usetex`` option for those who do want to call out to TeX
+to generate their text (see :ref:`usetex-tutorial`).
+
+Any text element can use math text.  You should use raw strings
+(preceed the quotes with an ``'r'``), and surround the math text with
+dollar signs ($), as in TeX.  Regular text and mathtext can be
 interleaved within the same string.  Mathtext can use the Computer
 Modern fonts (from (La)TeX), `STIX <http://www.aip.org/stixfonts/>`_
 fonts (with are designed to blend well with Times) or a Unicode font
@@ -35,6 +37,26 @@
 
 produces ":math:`\alpha > \beta`".
 
+.. note::
+   Mathtext should be placed between a pair of dollar signs ($).  To
+   make it easy to display monetary values, e.g. "$100.00", if a
+   single dollar sign is present in the entire string, it will be
+   displayed verbatim as a dollar sign.  This is a small change from
+   regular TeX, where the dollar sign in non-math text would have to
+   be escaped ('\$').
+
+.. note::
+   While the syntax inside the pair of dollar signs ($) aims to be
+   TeX-like, the text outside does not.  In particular, characters
+   such as::
+
+     # $ % & ~ _ ^ \ { } \( \) \[ \]
+
+   have special meaning outside of math mode in TeX.  Therefore, these
+   characters will behave differently depending on the rcParam
+   ``text.usetex`` flag.  See the :ref:`usetex tutorial
+   <usetex-tutorial>` for more information.
+
 Subscripts and superscripts
 ---------------------------
 

Modified: branches/v0_98_5_maint/doc/users/text_intro.rst
===================================================================
--- branches/v0_98_5_maint/doc/users/text_intro.rst     2008-12-15 17:58:43 UTC 
(rev 6613)
+++ branches/v0_98_5_maint/doc/users/text_intro.rst     2008-12-15 18:03:34 UTC 
(rev 6614)
@@ -18,8 +18,8 @@
 weight, text location and color, etc) with sensible defaults set in
 the rc file.  And significantly for those interested in mathematical
 or scientific figures, matplotlib implements a large number of TeX
-math symbols and commands, to support mathematical expressions
-anywhere in your figure.
+math symbols and commands, to support :ref:`mathematical expressions
+<mathtext-tutorial>` anywhere in your figure.
 
 
 Basic text commands

Modified: branches/v0_98_5_maint/doc/users/usetex.rst
===================================================================
--- branches/v0_98_5_maint/doc/users/usetex.rst 2008-12-15 17:58:43 UTC (rev 
6613)
+++ branches/v0_98_5_maint/doc/users/usetex.rst 2008-12-15 18:03:34 UTC (rev 
6614)
@@ -59,6 +59,14 @@
 command ``\displaystyle``, as in `tex_demo.py`, will produce the same
 results.
 
+.. note::
+   Certain characters require special escaping in TeX, such as::
+
+     # $ % & ~ _ ^ \ { } \( \) \[ \]
+
+   Therefore, these characters will behave differently depending on
+   the rcParam ``text.usetex`` flag.
+
 .. _usetex-unicode:
 
 usetex with unicode

Modified: branches/v0_98_5_maint/lib/matplotlib/offsetbox.py
===================================================================
--- branches/v0_98_5_maint/lib/matplotlib/offsetbox.py  2008-12-15 17:58:43 UTC 
(rev 6613)
+++ branches/v0_98_5_maint/lib/matplotlib/offsetbox.py  2008-12-15 18:03:34 UTC 
(rev 6614)
@@ -548,7 +548,7 @@
 
 
     def get_extent(self, renderer):
-        ismath = self._text.is_math_text(self._text._text)
+        clean_line, ismath = self._text.is_math_text(self._text._text)
         _, h_, d_ = renderer.get_text_width_height_descent(
             "lp", self._text._fontproperties, ismath=False)
 
@@ -558,30 +558,30 @@
         line = info[0][0] # first line
 
         _, hh, dd = renderer.get_text_width_height_descent(
-            line, self._text._fontproperties, ismath=ismath)
+            clean_line, self._text._fontproperties, ismath=ismath)
 
 
         self._baseline_transform.clear()
         if len(info) > 1 and self._multilinebaseline: # multi line
             d = h-(hh-dd)  # the baseline of the first line
             d_new = 0.5 * h  - 0.5 * (h_ - d_)
-            
+
             self._baseline_transform.translate(0, d - d_new)
             d = d_new
-            
+
         else: # single line
 
             h_d = max(h_ - d_, h-dd)
 
             if self.get_minimumdescent():
                 ## to have a minimum descent, #i.e., "l" and "p" have same
-                ## descents. 
+                ## descents.
                 d = max(dd, d_)
             else:
                 d = dd
 
             h = h_d + d
-            
+
         return w, h, 0., d
 
 

Modified: branches/v0_98_5_maint/lib/matplotlib/text.py
===================================================================
--- branches/v0_98_5_maint/lib/matplotlib/text.py       2008-12-15 17:58:43 UTC 
(rev 6613)
+++ branches/v0_98_5_maint/lib/matplotlib/text.py       2008-12-15 18:03:34 UTC 
(rev 6614)
@@ -248,8 +248,9 @@
 
         baseline = None
         for i, line in enumerate(lines):
+            clean_line, ismath = self.is_math_text(line)
             w, h, d = renderer.get_text_width_height_descent(
-                line, self._fontproperties, ismath=self.is_math_text(line))
+                clean_line, self._fontproperties, ismath=ismath)
             if baseline is None:
                 baseline = h - d
             whs[i] = w, h
@@ -480,8 +481,9 @@
                 y = y + posy
                 if renderer.flipy():
                     y = canvash-y
+                clean_line, ismath = self.is_math_text(line)
 
-                renderer.draw_tex(gc, x, y, line,
+                renderer.draw_tex(gc, x, y, clean_line,
                                   self._fontproperties, angle)
             return
 
@@ -490,10 +492,11 @@
             y = y + posy
             if renderer.flipy():
                 y = canvash-y
+            clean_line, ismath = self.is_math_text(line)
 
-            renderer.draw_text(gc, x, y, line,
+            renderer.draw_text(gc, x, y, clean_line,
                                self._fontproperties, angle,
-                               ismath=self.is_math_text(line))
+                               ismath=ismath)
 
     def get_color(self):
         "Return the color of the text"
@@ -873,16 +876,19 @@
         """
         Returns True if the given string *s* contains any mathtext.
         """
-        if rcParams['text.usetex']: return 'TeX'
-
         # Did we find an even number of non-escaped dollar signs?
         # If so, treat is as math text.
         dollar_count = s.count(r'$') - s.count(r'\$')
-        if dollar_count > 0 and dollar_count % 2 == 0:
-            return True
+        even_dollars = (dollar_count > 0 and dollar_count % 2 == 0)
 
-        return False
+        if rcParams['text.usetex']:
+            return s, 'TeX'
 
+        if even_dollars:
+            return s, True
+        else:
+            return s.replace(r'\$', '$'), False
+
     def set_fontproperties(self, fp):
         """
         Set the font properties that control the text.  *fp* must be a


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
SF.Net email is Sponsored by MIX09, March 18-20, 2009 in Las Vegas, Nevada.
The future of the web can't happen without you.  Join us at MIX09 to help
pave the way to the Next Web now. Learn more and register at
http://ad.doubleclick.net/clk;208669438;13503038;i?http://2009.visitmix.com/
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to