// @(#)root/graf:$Id$
// Author: Nicolas Brun, Olivier Couet, Oleksandr Grebenyuk

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#include "Riostream.h"
#include "TROOT.h"
#include "TClass.h"
#include "TLatex.h"
#include "TMathText.h"
#include "TMath.h"
#include "TVirtualPad.h"
#include "TVirtualPS.h"

const Double_t kPI = TMath::Pi();

ClassImp(TLatex)


//______________________________________________________________________________
/* Begin_Html
<center><h2>TLatex : to draw Mathematical Formula</h2></center>

TLatex's purpose is to write mathematical equations.
The syntax is very similar to Latex's.
It provides several functionalities:
<ul>
<li><a href="#L1">  Subscripts and Superscripts</a></li>
<li><a href="#L2">  Fractions</a></li>
<li><a href="#L3">  Splitting Lines</a></li>
<li><a href="#L4">  Roots</a></li>
<li><a href="#L5">  Mathematical Symbols</a></li>
<li><a href="#L6">  Delimiters</a></li>
<li><a href="#L7">  Greek Letters</a></li>
<li><a href="#L8">  Accents</a></li>
<li><a href="#L9">  Changing Style</a></li>
<li><a href="#L10"> Alignment Rules</a></li>
<li><a href="#L11"> Character Adjustement</a></li>
<li><a href="#L12"> Italic and Boldface</a></li>
<li><a href="#L13"> Examples</a></li>
<li><a href="#L14"> Interface to TMathText</a></li>
</ul>

When the font precision (see <tt>TAttText</tt>) is low (0 or 1), TLatex is
painted as a normal TText, the control characters are not interpreted.

<a name="L1"></a><h3>Subscripts and Superscripts</h3>
Subscripts and superscripts are made with the <tt>_</tt> and <tt>^</tt>
commands. These commands can be combined to make complicated subscript and
superscript expressions. You may adjust the display of subscripts and
superscripts by using the two functions <tt>SetIndiceSize(Double_t)</tt>,
which set relative size of subscripts and superscripts, and
<tt>SetLimitIndiceSize(Int_t)</tt>, which set limits for text resizing of
subscipts and superscripts.
<p>Examples:
End_Html
   x^{2y} :    Begin_Latex x^{2y}    End_Latex x_{2y} :    Begin_Latex x_{2y}    End_Latex
   x^{y^{2}} : Begin_Latex x^{y^{2}} End_Latex x^{y_{1}} : Begin_Latex x^{y_{1}} End_Latex
   x^{y}_{1} : Begin_Latex x^{y}_{1} End_Latex x_{1}^{y} : Begin_Latex x_{1}^{y} End_Latex

Begin_Html
The best way to put the subscipts and superscripts before the character and not
after, is to use an empty character:
End_Html
   {}^{40}_{20}Ca : Begin_Latex {}^{40}_{20}Ca End_Latex

Begin_Html
The subscripts and superscripts operators apply not only on one character but
on all the "normal text" preceding them. In the following example the second
<tt>E</tt> is lower than the first one because the operator <tt>_</tt> is
applied on <tt>/f</tt> which has a descending part, and not only on <tt>f</tt>
which as no descending part.
End_Html
   f_{E}/f_{E} : Begin_Latex f_{E}/f_{E} End_Latex

Begin_Html
   To make sure the second operator <tt>_</tt> applies only on <tt>f</tt>
   a dummy operator <tt>^{}</tt> should be introduced to separate the <tt>f</tt>
   from the <tt>/</tt>.
End_Html
   f_{E}/^{}f_{E} : Begin_Latex f_{E}/^{}f_{E} End_Latex

Begin_Html
<a name="L2"></a><h3>Fractions</h3>
Fractions denoted by the <tt>/</tt> symbol are made in the obvious way.
The <tt>#frac</tt> command is used for large fractions in displayed formula;
it has two arguments: the numerator and the denominator.
<p>Examples:
End_Html
   x = #frac{y+z/2}{y^{2}+1} : Begin_Latex x = #frac{y+z/2}{y^{2}+1} End_Latex

Begin_Html
<a name="L3"></a><h3>Splitting Lines</h3>
Text can be split in two lines via the command <tt>#splitline</tt>.
<p>Examples:
End_Html
   #splitline{21 April 2003}{14:02:30} : Begin_Latex #splitline{21 April 2003}{14:02:30} End_Latex

Begin_Html
<a name="L4"></a><h3>Roots</h3>
The <tt>#sqrt</tt> command produces the square root of its argument; it has
an optional first argument for other roots.
<p>Examples:
End_Html
   #sqrt{10} : Begin_Latex #sqrt{10} End_Latex #sqrt[3]{10} : Begin_Latex #sqrt[3]{10} End_Latex

Begin_Html
<a name="L5"></a><h3>Mathematical Symbols</h3>
TLatex can display dozens of special mathematical symbols. A few of them, such
as <tt>+</tt> and <tt>></tt> , are produced by typing the corresponding
keyboard character. Others are obtained with the commands in the following
table:
End_Html
Begin_Macro(source)
mathsymbols.C
End_Macro

Begin_Html
<a name="L6"></a><h3>Delimiters</h3>
TLatex provides 4 kinds of proportional delimiters:
<pre>
   #[]{....} or "a la" Latex #left[.....#right] : big square brackets
   #{}{....} or              #left{.....#right} : big curly brackets
   #||{....} or              #left|.....#right| : big absolute value symbols
   #(){....} or              #left(.....#right) : big parentheses
</pre>

<a name="L7"></a><h3>Greek Letters</h3>
The command to produce a lowercase Greek letter is obtained by adding a
<tt>#</tt> to the name of the letter. For an uppercase Greek letter, just
capitalize the first letter of the command name. Some letters have two
representations. The name of the second one (the "variation") starts with "var".
The following table gives the complete list:
End_Html
Begin_Macro(source)
greekletters.C
End_Macro

Begin_Html
<a name="L8"></a><h3>Accents</h3>
Several kind of accents are available:
End_Html
   #hat    = Begin_Latex #hat{a} End_Latex
   #check  = Begin_Latex #check{a} End_Latex
   #acute  = Begin_Latex #acute{a} End_Latex
   #grave  = Begin_Latex #grave{a} End_Latex
   #dot    = Begin_Latex #dot{a} End_Latex
   #ddot   = Begin_Latex #ddot{a} End_Latex
   #tilde  = Begin_Latex #tilde{a} End_Latex

Begin_Html
The special sign: <tt>#slash</tt> draws a slash on top of the text between brackets:
End_Html
   #slash{E}_{T} : Begin_Latex #slash{E}_{T} End_Latex

Begin_Html
Bar and vectors sign are done the following way:
End_Html
   #bar{a}: Begin_Latex #bar{a} End_Latex
   #vec{a}: Begin_Latex #vec{a} End_Latex

Begin_Html
<a name="L9"></a><h3>Changing Style</h3>
One can change the font, the text color, or the text size at any time using :
<tt>#font[font-number]{...}</tt>, <tt>#color[color-number]{...}</tt>
and <tt>#scale[scale-factor]{...}</tt>
<p>Examples:
End_Html
   #font[12]{Times Italic} and #font[22]{Times bold} : Begin_Latex #font[12]{Times Italic} and #font[22]{Times bold} End_Latex
   #color[2]{Red} and #color[4]{Blue} : Begin_Latex #color[2]{Red} and #color[4]{Blue} End_Latex
   #scale[1.2]{Bigger} and #scale[0.8]{Smaller} : Begin_Latex #scale[1.2]{Bigger} and #scale[0.8]{Smaller} End_Latex

Begin_Html
<a name="L10"></a><h3>Alignment Rules</h3>
The <tt>TText</tt> alignment rules apply to the <tt>TLatex</tt> objects with one exception
concerning the vertical alignment:
<ul>
<li> if the vertical alignment = 1 , subscripts are not taken into account </li>
<li> if the vertical alignment = 0 , the text is aligned to the box surrounding
                                     the full text with sub and superscripts</li>
</ul>
This is illustrated by the following example:
End_Html
Begin_Macro(source)
{
   TCanvas Tlva("Tlva","Tlva",500,500);
   Tlva.SetGrid();
   Tlva.DrawFrame(0,0,1,1);
   const char *longstring = "K_{S}... K^{*0}... #frac{2s}{#pi#alpha^{2}} #frac{d#sigma}{dcos#theta} (e^{+}e^{-} #rightarrow f#bar{f} ) = #left| #frac{1}{1 - #Delta#alpha} #right|^{2} (1+cos^{2}#theta)";

   TLatex latex;
   latex.SetTextSize(0.025);
   latex.SetTextAlign(13);  //align at top
   latex.DrawLatex(.2,.9,"K_{S}");
   latex.DrawLatex(.3,.9,"K^{*0}");
   latex.DrawLatex(.2,.8,longstring);

   latex.SetTextAlign(12);  //centered
   latex.DrawLatex(.2,.6,"K_{S}");
   latex.DrawLatex(.3,.6,"K^{*0}");
   latex.DrawLatex(.2,.5,longstring);

   latex.SetTextAlign(11);  //default bottom alignment
   latex.DrawLatex(.2,.4,"K_{S}");
   latex.DrawLatex(.3,.4,"K^{*0}");
   latex.DrawLatex(.2,.3,longstring);

   latex.SetTextAlign(10);  //special bottom alignment
   latex.DrawLatex(.2,.2,"K_{S}");
   latex.DrawLatex(.3,.2,"K^{*0}");
   latex.DrawLatex(.2,.1,longstring);

   latex.SetTextAlign(12);
   latex.SetTextFont(72);
   latex.DrawLatex(.1,.80,"13");
   latex.DrawLatex(.1,.55,"12");
   latex.DrawLatex(.1,.35,"11");
   latex.DrawLatex(.1,.18,"10");
   return Tlva;
}
End_Macro

Begin_Html
<a name="L11"></a><h3>Character Adjustement</h3>
The two commands <tt>#kern</tt> and <tt>#lower</tt> enable a better control
over character placement. The command <tt>#kern[(Float_t)dx]{text}</tt> moves
the output string horizontally by the fraction <tt>dx</tt> of its length.
Similarly, <tt>#lower[(Float_t)dy]{text}</tt> shifts the text up or down by
the fraction <tt>dy</tt> of its height.
<p>Examples:
End_Html
Positive k#kern[0.3]{e}#kern[0.3]{r}#kern[0.3]{n}#kern[0.3]{i}#kern[0.3]{n}#kern[0.3]{g}:
Begin_Latex Positive k#kern[0.3]{e}#kern[0.3]{r}#kern[0.3]{n}#kern[0.3]{i}#kern[0.3]{n}#kern[0.3]{g} End_Latex

Negative k#kern[-0.3]{e}#kern[-0.3]{r}#kern[-0.3]{n}#kern[-0.3]{i}#kern[-0.3]{n}#kern[-0.3]{g}:
Begin_Latex Negative k#kern[-0.3]{e}#kern[-0.3]{r}#kern[-0.3]{n}#kern[-0.3]{i}#kern[-0.3]{n}#kern[-0.3]{g} End_Latex

Vertical a#lower[0.2]{d}#lower[0.4]{j}#lower[0.1]{u}#lower[-0.1]{s}#lower[-0.3]{t}#lower[-0.4]{m}#lower[-0.2]{e}#lower[0.1]{n}t:
Begin_Latex Vertical a#lower[0.2]{d}#lower[0.4]{j}#lower[0.1]{u}#lower[-0.1]{s}#lower[-0.3]{t}#lower[-0.4]{m}#lower[-0.2]{e}#lower[0.1]{n}t End_Latex

Begin_Html
<a name="L12"></a><h3>Italic and Boldface</h3>
Text can be turned italic or boldface using the commands
<tt>#it</tt> and <tt>#bf</tt>.
<p>Examples:
End_Html
#bf{bold}, #it{italic}, #bf{#it{bold italic}}, #bf{#bf{unbold}}}:
Begin_Latex #bf{bold}, #it{italic}, #bf{#it{bold italic}}, #bf{#bf{unbold}} End_Latex

abc#alpha#beta#gamma, #it{abc#alpha#beta#gamma}:
Begin_Latex abc#alpha#beta#gamma, #it{abc#alpha#beta#gamma} End_Latex

Begin_Html
<a name="L13"></a><h3>Examples</h3>
End_Html
Begin_Macro(source)
{
   TCanvas ex1("ex1","Latex",500,600);
   TLatex Tl;
   Tl.SetTextAlign(12);
   Tl.SetTextSize(0.04);
   Tl.DrawLatex(0.1,0.8,"1)   C(x) = d #sqrt{#frac{2}{#lambdaD}}  #int^{x}_{0}cos(#frac{#pi}{2}t^{2})dt");
   Tl.DrawLatex(0.1,0.6,"2)   C(x) = d #sqrt{#frac{2}{#lambdaD}}  #int^{x}cos(#frac{#pi}{2}t^{2})dt");
   Tl.DrawLatex(0.1,0.4,"3)   R = |A|^{2} = #frac{1}{2}(#[]{#frac{1}{2}+C(V)}^{2}+#[]{#frac{1}{2}+S(V)}^{2})");
   Tl.DrawLatex(0.1,0.2,"4)   F(t) = #sum_{i=-#infty}^{#infty}A(i)cos#[]{#frac{i}{t+i}}");
   return ex1;
}
End_Macro
Begin_Macro(source)
{
   TCanvas ex2("ex2","Latex",500,300);
   TLatex Tl;
   Tl.SetTextAlign(23);
   Tl.SetTextSize(0.08);
   Tl.DrawLatex(0.5,0.95,"e^{+}e^{-}#rightarrowZ^{0}#rightarrowI#bar{I}, q#bar{q}");
   Tl.DrawLatex(0.5,0.75,"|#vec{a}#bullet#vec{b}|=#Sigmaa^{i}_{jk}+b^{bj}_{i}");
   Tl.DrawLatex(0.5,0.5,"i(#partial_{#mu}#bar{#psi}#gamma^{#mu}+m#bar{#psi}=0#Leftrightarrow(#Box+m^{2})#psi=0");
   Tl.DrawLatex(0.5,0.3,"L_{em}=eJ^{#mu}_{em}A_{#mu} , J^{#mu}_{em}=#bar{I}#gamma_{#mu}I , M^{j}_{i}=#SigmaA_{#alpha}#tau^{#alphaj}_{i}");
   return ex2;
}
End_Macro
Begin_Macro(source)
{
   TCanvas ex3("ex3","Latex",500,300);
   TPaveText pt(.1,.1,.9,.9);
   pt.AddText("#frac{2s}{#pi#alpha^{2}}  #frac{d#sigma}{dcos#theta} (e^{+}e^{-} #rightarrow f#bar{f} ) = ");
   pt.AddText("#left| #frac{1}{1 - #Delta#alpha} #right|^{2} (1+cos^{2}#theta");
   pt.AddText("+ 4 Re #left{ #frac{2}{1 - #Delta#alpha} #chi(s) #[]{#hat{g}_{#nu}^{e}#hat{g}_{#nu}^{f} (1 + cos^{2}#theta) + 2 #hat{g}_{a}^{e}#hat{g}_{a}^{f} cos#theta) } #right}");
   pt.SetLabel("Born equation");
   pt.Draw();
   return ex3;
}
End_Macro

Begin_Html
<a name="L14"></a><h3>Interface to TMathText</h3>
The class <tt>TMathText</tt> is a TeX math formulae interpreter. It uses plain
TeX syntax and uses "\" as control instead of "#". If a piece of text containing
"\" is given to <tt>TLatex</tt> then <tt>TMathText</tt> is automatically invoked.
Therefore, as histograms' titles, axis titles, labels etc ... are drawn using
<tt>TLatex</tt>, the <tt>TMathText</tt> syntax can be used for them also.
End_Html
*/


//______________________________________________________________________________
TLatex::TLatex()
{
   // Default constructor.

   fFactorSize  = 1.5;
   fFactorPos   = 0.6;
   fError       = 0;
   fShow        = kFALSE;
   fPos         = 0;
   fTabMax      = 0;
   fOriginSize  = 0.04;
   fTabSize     = 0;
   fItalic      = kFALSE;
   fLimitFactorSize = 3;
   SetLineWidth(2);
}


//______________________________________________________________________________
TLatex::TLatex(Double_t x, Double_t y, const char *text)
       :TText(x,y,text)
{
   // Normal constructor.

   fFactorSize  = 1.5;
   fFactorPos   = 0.6;
   fError       = 0;
   fShow        = kFALSE;
   fPos         = 0;
   fTabMax      = 0;
   fOriginSize  = 0.04;
   fTabSize     = 0;
   fItalic      = kFALSE;
   fLimitFactorSize = 3;
   SetLineWidth(2);
}


//______________________________________________________________________________
TLatex::~TLatex()
{
   // Destructor.
}


//______________________________________________________________________________
TLatex::TLatex(const TLatex &text) : TText(text), TAttLine(text)
{
   // Copy constructor.

   fFactorSize  = 1.5;
   fFactorPos   = 0.6;
   fError       = 0;
   fShow        = kFALSE;
   fPos         = 0;
   fTabMax      = 0;
   fOriginSize  = 0.04;
   fTabSize     = 0;
   fItalic      = kFALSE;
   fLimitFactorSize = 3;
   ((TLatex&)text).Copy(*this);
}

//______________________________________________________________________________
TLatex& TLatex::operator=(const TLatex& lt)
{
   //assignment operator
   if(this!=&lt) {
      TText::operator=(lt);
      TAttLine::operator=(lt);
      fFactorSize=lt.fFactorSize;
      fFactorPos=lt.fFactorPos;
      fLimitFactorSize=lt.fLimitFactorSize;
      fError=lt.fError;
      fShow=lt.fShow;
      fTabSize=lt.fTabSize;
      fOriginSize=lt.fOriginSize;
      fTabSize=lt.fTabSize;
      fTabSize=lt.fTabSize;
      fItalic=lt.fItalic;
   }
   return *this;
}

//______________________________________________________________________________
void TLatex::Copy(TObject &obj) const
{
   // Copy this TLatex object to another TLatex.

   ((TLatex&)obj).fFactorSize  = fFactorSize;
   ((TLatex&)obj).fFactorPos   = fFactorPos;
   ((TLatex&)obj).fLimitFactorSize  = fLimitFactorSize;
   ((TLatex&)obj).fError       = fError;
   ((TLatex&)obj).fShow        = fShow;
   ((TLatex&)obj).fTabSize     = 0;
   ((TLatex&)obj).fOriginSize  = fOriginSize;
   ((TLatex&)obj).fTabMax      = fTabMax;
   ((TLatex&)obj).fPos         = fPos;
   ((TLatex&)obj).fItalic      = fItalic;
   TText::Copy(obj);
   TAttLine::Copy(((TAttLine&)obj));
}


//______________________________________________________________________________
TLatexFormSize TLatex::Anal1(TextSpec_t spec, const Char_t* t, Int_t length)
{
   // Analyse function.

   return Analyse(0,0,spec,t,length);
}


//______________________________________________________________________________
TLatexFormSize TLatex::Analyse(Double_t x, Double_t y, TextSpec_t spec, const Char_t* t, Int_t length)
{
   //  Analyse and paint the TLatex formula
   //
   //  It is called twice : first for calculating the size of
   //  each portion of the formula, then to paint the formula.
   //  When analyse finds an operator or separator, it calls
   //  itself recursively to analyse the arguments of the operator.
   //  when the argument is an atom (normal text), it calculates
   //  the size of it and return it as the result.
   //  for example : if the operator #frac{arg1}{arg2} is found :
   //  Analyse(arg1) return the size of arg1 (width, up, down)
   //  Analyse(arg2) return the size of arg2
   //  now, we know the size of #frac{arg1}{arg2}  :
   //  width = max(width_arg1, width_arg2)
   //  up = up_arg1 + down_arg1
   //  down = up_arg2 + down_arg2
   //  so, when the user wants to paint a fraction at position (x,y),
   //  the rect used for the formula is : (x,y-up,x+width,y+down)
   //
   // return size of zone occupied by the text/formula
   // t : chain to be analyzed
   // length : number of chars in t.

   const char *tab[] = { "alpha","beta","chi","delta","varepsilon","phi","gamma","eta","iota","varphi","kappa","lambda",
                "mu","nu","omicron","pi","theta","rho","sigma","tau","upsilon","varomega","omega","xi","psi","zeta",
                "Alpha","Beta","Chi","Delta","Epsilon","Phi","Gamma","Eta","Iota","vartheta",
                "Kappa","Lambda","Mu","Nu","Omicron","Pi","Theta","Rho","Sigma","Tau",
                "Upsilon","varsigma","Omega","Xi","Psi","Zeta","varUpsilon","epsilon"};

   const char *tab2[] = { "leq","/","infty","voidb","club","diamond","heart",
                 "spade","leftrightarrow","leftarrow","uparrow","rightarrow",
                 "downarrow","circ","pm","doublequote","geq","times","propto",
                 "partial","bullet","divide","neq","equiv","approx","3dots",
                 "cbar","topbar","downleftarrow","aleph","Jgothic","Rgothic","voidn",
                 "otimes","oplus","oslash","cap","cup","supset","supseteq",
                 "notsubset","subset","subseteq","in","notin","angle","nabla",
                 "oright","ocopyright","trademark","prod","surd","upoint","corner","wedge",
                 "vee","Leftrightarrow","Leftarrow","Uparrow","Rightarrow",
                 "Downarrow","diamond","LT","void1","copyright","void3","sum",
                 "arctop","lbar","arcbottom","topbar","void8", "bottombar","arcbar",
                 "ltbar","AA","aa","void06","GT","int","forall","exists" };

   const char *tab3[] = { "bar","vec","dot","hat","ddot","acute","grave","check","tilde","slash"};

   if (fError != 0) return TLatexFormSize(0,0,0);

   Int_t nBlancDeb=0,nBlancFin=0,l_nBlancDeb=0,l_nBlancFin=0;
   Int_t i,k;
   Int_t min=0, max=0;
   Bool_t cont = kTRUE;
   while(cont) {
      // count leading blanks
      //while(nBlancDeb+nBlancFin<length && t[nBlancDeb]==' ') nBlancDeb++;

      if (nBlancDeb==length) return TLatexFormSize(0,0,0); // empty string

      // count trailing blanks
      //while(nBlancDeb+nBlancFin<length && t[length-nBlancFin-1]==' ') nBlancFin++;

      if (nBlancDeb==l_nBlancDeb && nBlancFin==l_nBlancFin) cont = kFALSE;

      // remove characters { }
      if (t[nBlancDeb]=='{' && t[length-nBlancFin-1]=='}') {
         Int_t nBrackets = 0;
         Bool_t sameBrackets = kTRUE;
         for(i=nBlancDeb;i<length-nBlancFin;i++) {
            if (t[i] == '{' && !(i>0 && t[i-1] == '@')) nBrackets++;
            if (t[i] == '}' && t[i-1]!= '@') nBrackets--;
            if (nBrackets==0 && i<length-nBlancFin-2) {
               sameBrackets=kFALSE;
               break;
            }
         }

         if (sameBrackets) {
            // begin and end brackets match
            nBlancDeb++;
            nBlancFin++;
            if (nBlancDeb+nBlancFin==length) return TLatexFormSize(0,0,0); // empty string
            cont = kTRUE;
         }

      }

      l_nBlancDeb = nBlancDeb;
      l_nBlancFin = nBlancFin;
   }

   // make a copy of the current processed chain of characters
   // removing leading and trailing blanks
   length -= nBlancFin+nBlancDeb; // length of string without blanks
   Char_t* text = new Char_t[length+1];
   strncpy(text,t+nBlancDeb,length);
   text[length] = 0;

   // compute size of subscripts and superscripts
   Double_t indiceSize = spec.fSize/fFactorSize;
   if(indiceSize<fOriginSize/TMath::Exp(fLimitFactorSize*TMath::Log(fFactorSize))-0.001f)
      indiceSize = spec.fSize;
   // substract 0.001 because of rounding errors
   TextSpec_t specNewSize = spec;
   specNewSize.fSize       = indiceSize;

   // recherche des operateurs
   Int_t opPower         = -1;   // Position of first ^ (power)
   Int_t opUnder         = -1;   // Position of first _ (indice)
   Int_t opFrac          = -1;   // Position of first \frac
   Int_t opSqrt          = -1;   // Position of first \sqrt
   Int_t nBrackets       = 0;    // Nesting level in { }
   Int_t nCroch          = 0;    // Nesting level in [ ]
   Int_t opCurlyCurly    = -1;   // Position of first }{
   Int_t opSquareCurly   = -1;   // Position of first ]{
   Int_t opCloseCurly    = -2;   // Position of first }
   Int_t opColor         = -1;   // Position of first #color
   Int_t opFont          = -1;   // Position of first #font
   Int_t opScale         = -1;   // Position of first #scale
   Int_t opGreek         = -1;   // Position of a Greek letter
   Int_t opSpec          = -1;   // position of a special character
   Int_t opAbove         = -1;   // position of a vector/overline
   Int_t opSquareBracket = 0 ;   // position of a "[]{" operator (#[]{arg})
   Int_t opBigCurly      = 0 ;   // position of a "{}{" operator (big curly bracket #{}{arg})
   Int_t opAbs           = 0 ;   // position of a "||{" operator (absolute value) (#||{arg})
   Int_t opParen         = 0 ;   // position of a "(){" operator (big parenthesis #(){arg})
   Int_t abovePlace      = 0 ;   // true if subscripts must be written above and not after
   Int_t opBox           = 0 ;   // position of #Box
   Int_t opPerp          = 0;    // position of #perp
   Int_t opOdot          = 0;    // position of #odot
   Int_t opHbar          = 0;    // position of #hbar
   Int_t opMinus         = 0;    // position of #minus
   Int_t opPlus          = 0;    // position of #plus
   Int_t opMp            = 0;    // position of #mp
   Int_t opBackslash     = 0;    // position of #backslash
   Int_t opParallel      = 0;    // position of #parallel
   Int_t opSplitLine     = -1;   // Position of first #splitline
   Int_t opKern          = -1;   // Position of first #kern
   Int_t opLower         = -1;   // Position of first #lower
   Int_t opBf            = -1;   // Position of first #bf
   Int_t opIt            = -1;   // Position of first #it
   Int_t opMbox          = -1;   // Position of first #mbox

   Bool_t opFound = kFALSE;
   Bool_t quote1 = kFALSE, quote2 = kFALSE ;

   for(i=0;i<length;i++) {
      switch (text[i]) {
         case '\'' : quote1 = !quote1 ; break ;
         case '"'  : quote2  = !quote2 ; break ;
      }
      //if (quote1 || quote2) continue ;
      switch (text[i]) {
         case '{':
            if (nCroch==0) {
               if (!(i>0 && text[i-1] == '@')) nBrackets++;
            }
            break;
         case '}':
            if (nCroch==0) {
               if (!(i>0 && text[i-1] == '@')) nBrackets--;
               if (nBrackets==0) {
                  if (i<length-1) if (text[i+1]=='{' && opCurlyCurly==-1) opCurlyCurly=i;
                  if (i<length-2) {
                     if (text[i+1]!='{' && !(text[i+2]=='{' && (text[i+1]=='^' || text[i+1]=='_'))
                     && opCloseCurly==-2) opCloseCurly=i;
                  }
                  else if (i<length-1) {
                     if (text[i+1]!='{' && opCloseCurly==-2) opCloseCurly=i;
                  }
                  else if (opCloseCurly==-2) opCloseCurly=i;
               }
            }
            break;
         case '[':
            if (nBrackets==0) {
               if (!(i>0 && text[i-1] == '@')) nCroch++;
            }
            break;
         case ']':
            if (nBrackets==0) {
               if (!(i>0 && text[i-1] == '@')) nCroch--;
               if (nCroch<0) {
                  // more "]" than "["
                  fError = "Missing \"[\"";
                  delete [] text;
                  return TLatexFormSize(0,0,0);
               }
            }
            break;
      }
      if (length>i+1) {
         Char_t buf[3];
         strncpy(buf,&text[i],2);
         if (strncmp(buf,"^{",2)==0) {
            if (opPower==-1 && nBrackets==0 && nCroch==0) opPower=i;
            if (i>3) {
               Char_t buf1[5];
               strncpy(buf1,&text[i-4],4);
               if (strncmp(buf1,"#int",4)==0) {
                  abovePlace = 1;
                  if (i>4 && opCloseCurly==-2) opCloseCurly=i-5;
               }
               if (strncmp(buf1,"#sum",4)==0) {
                  abovePlace = 2;
                  if (i>4 && opCloseCurly==-2) opCloseCurly=i-5;
               }
            }
         }
         if (strncmp(buf,"_{",2)==0) {
            if (opUnder==-1 && nBrackets==0 && nCroch==0) opUnder=i;
            if (i>3) {
               Char_t buf2[5];
               strncpy(buf2,&text[i-4],4);
               if (strncmp(buf2,"#int",4)==0) {
                  abovePlace = 1;
                  if (i>4 && opCloseCurly==-2) opCloseCurly=i-5;
               }
               if (strncmp(buf2,"#sum",4)==0) {
                  abovePlace = 2;
                  if (i>4 && opCloseCurly==-2) opCloseCurly=i-5;
               }
            }
         }
         if (strncmp(buf,"]{",2)==0)
            if (opSquareCurly==-1 && nBrackets==0 && nCroch==0) opSquareCurly=i;
      }
      // detect other operators
      if (text[i]=='\\' || (text[i]=='#' && !opFound && nBrackets==0 && nCroch==0)) {

         if (length>i+10) {
            Char_t buf[11];
            strncpy(buf,&text[i+1],10);
            if (strncmp(buf,"splitline{",10)==0) {
               opSplitLine=i; opFound = kTRUE;
               if (i>0 && opCloseCurly==-2) opCloseCurly=i-1;
               continue;
            }
         }
         if (length>i+9) {
            Char_t buf[10];
            strncpy(buf,&text[i+1],9);
            if (!opBackslash && strncmp(buf,"backslash",9)==0) {
               opBackslash=1; opFound = kTRUE;
               if (i>0 && opCloseCurly==-2) opCloseCurly=i-1;
               continue;
            }
         }
         if (length>i+8) {
            Char_t buf[9];
            strncpy(buf,&text[i+1],8);
            if (!opParallel && strncmp(buf,"parallel",8)==0) {
               opParallel=1; opFound = kTRUE;
               if (i>0 && opCloseCurly==-2) opCloseCurly=i-1;
               continue;
            }
         }
         if (length>i+6) {
            Char_t buf[7];
            strncpy(buf,&text[i+1],6);
            if (strncmp(buf,"lower[",6)==0 || strncmp(buf,"lower{",6)==0) {
               opLower=i; opFound = kTRUE;
               if (i>0 && opCloseCurly==-2) opCloseCurly=i-1;
               continue ;
            }
            if (strncmp(buf,"scale[",6)==0 || strncmp(buf,"scale{",6)==0) {
               opScale=i; opFound = kTRUE;
               if (i>0 && opCloseCurly==-2) opCloseCurly=i-1;
               continue ;
            }
            if (strncmp(buf,"color[",6)==0 || strncmp(buf,"color{",6)==0) {
               opColor=i; opFound = kTRUE;
               if (i>0 && opCloseCurly==-2) opCloseCurly=i-1;
               continue ;
            }
         }
         if (length>i+5) {
            Char_t buf[6];
            strncpy(buf,&text[i+1],5);
            if (strncmp(buf,"frac{",5)==0) {
               opFrac=i; opFound = kTRUE;
               if (i>0 && opCloseCurly==-2) opCloseCurly=i-1;
               continue;
            }
            if (strncmp(buf,"sqrt{",5)==0 || strncmp(buf,"sqrt[",5)==0) {
               opSqrt=i; opFound = kTRUE;
               if (i>0 && opCloseCurly==-2) opCloseCurly=i-1;
               continue;
            }
            if (strncmp(buf,"font{",5)==0 || strncmp(buf,"font[",5)==0) {
               opFont=i; opFound = kTRUE;
               if (i>0 && opCloseCurly==-2) opCloseCurly=i-1;
               continue;
            }
            if (strncmp(buf,"kern[",5)==0 || strncmp(buf,"kern{",5)==0) {
               opKern=i; opFound = kTRUE;
               if (i>0 && opCloseCurly==-2) opCloseCurly=i-1;
               continue ;
            }
            if (!opMinus && strncmp(buf,"minus",5)==0) {
               opMinus=1; opFound = kTRUE;
               if (i>0 && opCloseCurly==-2) opCloseCurly=i-1;
               continue;
            }
            if (strncmp(buf,"mbox[",5)==0 || strncmp(buf,"mbox{",5)==0) {
               opMbox=i; opFound = kTRUE;
               if (i>0 && opCloseCurly==-2) opCloseCurly=i-1;
               continue ;
            }
         }
         if (length>i+4) {
            Char_t buf[5];
            strncpy(buf,&text[i+1],4);
            if (!opOdot && strncmp(buf,"odot",4)==0) {
               opOdot=1; opFound = kTRUE;
               if (i>0 && opCloseCurly==-2) opCloseCurly=i-1;
               continue;
            }
            if (!opHbar && strncmp(buf,"hbar",4)==0) {
               opHbar=1; opFound = kTRUE;
               if (i>0 && opCloseCurly==-2) opCloseCurly=i-1;
               continue;
            }
            if (!opPerp && strncmp(buf,"perp",4)==0) {
               opPerp=1; opFound = kTRUE;
               if (i>0 && opCloseCurly==-2) opCloseCurly=i-1;
               continue;
            }
            if (!opPlus && strncmp(buf,"plus",4)==0) {
               opPlus=1; opFound = kTRUE;
               if (i>0 && opCloseCurly==-2) opCloseCurly=i-1;
               continue;
            }
         }
         if (length>i+3) {
            Char_t buf[4];
            strncpy(buf,&text[i+1],3);
            buf[3] = 0;
            if (strncmp(buf,"[]{",3)==0) {
               opSquareBracket=1; opFound = kTRUE;
               if (i>0 && opCloseCurly==-2) opCloseCurly=i-1;
               continue;
            }
            if (strncmp(buf,"{}{",3)==0 ) {
               opBigCurly=1; opFound = kTRUE;
               if (i>0 && opCloseCurly==-2) opCloseCurly=i-1;
               continue;
            }
            if (strncmp(buf,"||{",3)==0) {
               opAbs=1; opFound = kTRUE;
               if (i>0 && opCloseCurly==-2) opCloseCurly=i-1;
               continue;
            }
            if (strncmp(buf,"(){",3)==0) {
               opParen=1; opFound = kTRUE;
               if (i>0 && opCloseCurly==-2) opCloseCurly=i-1;
               continue;
            }
            if (!opBox && strncmp(buf,"Box",3)==0) {
               opBox=1; opFound = kTRUE;
               if (i>0 && opCloseCurly==-2) opCloseCurly=i-1;
               continue;
            }
            if (strncmp(buf,"bf[",3)==0 || strncmp(buf,"bf{",3)==0) {
               opBf=i; opFound = kTRUE;
               if (i>0 && opCloseCurly==-2) opCloseCurly=i-1;
               continue ;
            }
            if (strncmp(buf,"it[",3)==0 || strncmp(buf,"it{",3)==0) {
               opIt=i; opFound = kTRUE;
               if (i>0 && opCloseCurly==-2) opCloseCurly=i-1;
               continue ;
            }
         }
         if (length>i+2) {
            Char_t buf[3];
            strncpy(buf,&text[i+1],2);
            if (!opMp && strncmp(buf,"mp",2)==0) {
               opMp=1; opFound = kTRUE;
               if (i>0 && opCloseCurly==-2) opCloseCurly=i-1;
               continue;
            }
         }
         for(k=0;k<54;k++) {
            if (!opFound && UInt_t(length)>i+strlen(tab[k])) {
               if (strncmp(&text[i+1],tab[k],strlen(tab[k]))==0) {
                  opGreek=k;
                  opFound = kTRUE;
                  if (i>0 && opCloseCurly==-2) opCloseCurly=i-1;
               }
            }
         }
         for(k=0;k<10;k++) {
            if (!opFound && UInt_t(length)>i+strlen(tab3[k])) {
               if (strncmp(&text[i+1],tab3[k],strlen(tab3[k]))==0) {
                  opAbove=k;
                  opFound = kTRUE;
                  if (i>0 && opCloseCurly==-2) opCloseCurly=i-1;
               }
            }
         }
         UInt_t lastsize = 0;
         if (!opFound)
         for(k=0;k<82;k++) {
            if ((opSpec==-1 || strlen(tab2[k])>lastsize) && UInt_t(length)>i+strlen(tab2[k])) {
               if (strncmp(&text[i+1],tab2[k],strlen(tab2[k]))==0) {
                  lastsize = strlen(tab2[k]);
                  opSpec=k;
                  opFound = kTRUE;
                  if (i>0 && opCloseCurly==-2) opCloseCurly=i-1;
               }
            }
         }
      }
   }

   TLatexFormSize fs1;
   TLatexFormSize fs2;
   TLatexFormSize fs3;
   TLatexFormSize result;

   // analysis of operators found
   if (opCloseCurly>-1 && opCloseCurly<length-1) { // separator } found
      if(!fShow) {
         fs1 = Anal1(spec,text,opCloseCurly+1);
         fs2 = Anal1(spec,text+opCloseCurly+1,length-opCloseCurly-1);
         Savefs(&fs1);
      } else {
         fs1 = Readfs();
         Analyse(x+fs1.Width(),y,spec,text+opCloseCurly+1,length-opCloseCurly-1);
         Analyse(x,y,spec,text,opCloseCurly+1);
      }
      result = fs1+fs2;
   }

   else if (opPower>-1 && opUnder>-1) { // ^ and _ found
      min = TMath::Min(opPower,opUnder);
      max = TMath::Max(opPower,opUnder);
      Double_t xfpos = 0. ; //GetHeight()*spec.fSize/5.;
      Double_t prop=1, propU=1; // scale factor for #sum & #int
      switch (abovePlace) {
         case 1 :
            prop = .8 ; propU = 1.75 ; // Int
            break;
         case 2:
            prop = .9 ; propU = 1.75 ; // Sum
            break;
      }
     // propU acts on upper number
     // when increasing propU value, the upper indice position is higher
     // when increasing prop values, the lower indice position is lower

      if (!fShow) {
         Int_t ltext = min ;
         if (min >= 2 && strncmp(&text[min-2],"{}",2)==0) {
            // upper and lower indice before the character
            // like with chemical element
            snprintf(&text[ltext-2],length-(ltext-2),"I ") ;
            ltext-- ;
         }
         fs1 = Anal1(spec,text,ltext);
         fs2 = Anal1(specNewSize,text+min+1,max-min-1);
         fs3 = Anal1(specNewSize,text+max+1,length-max-1);
         Savefs(&fs1);
         Savefs(&fs2);
         Savefs(&fs3);
      } else {
         fs3 = Readfs();
         fs2 = Readfs();
         fs1 = Readfs();
         Double_t pos = 0;
         if (!abovePlace) {
            Double_t addW = fs1.Width()+xfpos, addH1, addH2;
            if (opPower<opUnder) {
               addH1 = -fs1.Over()*(fFactorPos)-fs2.Under();
               addH2 = fs1.Under()+fs3.Over()*(fFactorPos);
            } else {
               addH1 = fs1.Under()+fs2.Over()*(fFactorPos);
               addH2 = -fs1.Over()*(fFactorPos)-fs3.Under();
            }
            Analyse(x+addW,y+addH2,specNewSize,text+max+1,length-max-1);
            Analyse(x+addW,y+addH1,specNewSize,text+min+1,max-min-1);
         } else {
            Double_t addW1, addW2, addH1, addH2;
            Double_t m = TMath::Max(fs1.Width(),TMath::Max(fs2.Width(),fs3.Width()));
            pos = (m-fs1.Width())/2;
            if (opPower<opUnder) {
               addH1 = -fs1.Over()*propU-fs2.Under();
               addW1 = (m-fs2.Width())/2;
               addH2 = fs1.Under()*prop+fs3.Over();
               addW2 = (m-fs3.Width())/2;
            } else {
               addH1 = fs1.Under()*prop+fs2.Over();
               addW1 = (m-fs2.Width())/2;
               addH2 = -fs1.Over()*propU-fs3.Under();
               addW2 = (m-fs3.Width())/2;
            }

            Analyse(x+addW2,y+addH2,specNewSize,text+max+1,length-max-1);
            Analyse(x+addW1,y+addH1,specNewSize,text+min+1,max-min-1);
         }

         if (min >= 2 && strncmp(&text[min-2],"{}",2)==0) {
            snprintf(&text[min-2],length-(min-2),"  ") ;
            Analyse(x+pos,y,spec,text,min-1);
         } else {
            Analyse(x+pos,y,spec,text,min);
         }
      }

      if (!abovePlace) {
         if (opPower<opUnder) {
            result.Set(fs1.Width()+xfpos+TMath::Max(fs2.Width(),fs3.Width()),
                       fs1.Over()*fFactorPos+fs2.Height(),
                       fs1.Under()+fs3.Height()-fs3.Over()*(1-fFactorPos));
         } else {
            result.Set(fs1.Width()+xfpos+TMath::Max(fs2.Width(),fs3.Width()),
                       fs1.Over()*fFactorPos+fs3.Height(),
                       fs1.Under()+fs2.Height()-fs2.Over()*(1-fFactorPos));
         }
      } else {
         if (opPower<opUnder) {
            result.Set(TMath::Max(fs1.Width(),TMath::Max(fs2.Width(),fs3.Width())),
                       fs1.Over()*propU+fs2.Height(),fs1.Under()*prop+fs3.Height());
         } else {
            result.Set(TMath::Max(fs1.Width(),TMath::Max(fs2.Width(),fs3.Width())),
                       fs1.Over()*propU+fs3.Height(),fs1.Under()*prop+fs2.Height());
         }
      }
   }
   else if (opPower>-1) { // ^ found
      Double_t prop=1;
      Double_t xfpos = 0. ; //GetHeight()*spec.fSize/5. ;
      switch (abovePlace) {
         case 1 : //int
            prop = 1.75 ; break ;
         case 2 : // sum
            prop = 1.75;  break ;
      }
      // When increasing prop, the upper indice position is higher
      if (!fShow) {
         Int_t ltext = opPower ;
         if (ltext >= 2 && strncmp(&text[ltext-2],"{}",2)==0) {
            // upper and lower indice before the character
            // like with chemical element
            snprintf(&text[ltext-2],length-(ltext-2),"I ") ;
            ltext-- ;
         }
         fs1 = Anal1(spec,text,ltext);
         fs2 = Anal1(specNewSize,text+opPower+1,length-opPower-1);
         Savefs(&fs1);
         Savefs(&fs2);
      } else {
         fs2 = Readfs();
         fs1 = Readfs();
         Int_t pos = 0;
         if (!abovePlace){
            Double_t over = fs1.Over();
            if (over <= 0) over = 1.5*fs2.Over();
            Analyse(x+fs1.Width()+xfpos,y-over*fFactorPos-fs2.Under(),specNewSize,text+opPower+1,length-opPower-1);
         } else {
            Int_t pos2=0;
            if (fs2.Width()>fs1.Width())
               pos=Int_t((fs2.Width()-fs1.Width())/2);
            else
               pos2=Int_t((fs1.Width()-fs2.Width())/2);

            Analyse(x+pos2,y-fs1.Over()*prop-fs2.Under(),specNewSize,text+opPower+1,length-opPower-1);
         }
         if (opPower >= 2 && strncmp(&text[opPower-2],"{}",2)==0) {
            snprintf(&text[opPower-2],length-(opPower-2),"  ") ;
            Analyse(x+pos,y,spec,text,opPower-1);
         } else {
            Analyse(x+pos,y,spec,text,opPower);
         }
      }

      if (!abovePlace)
         result.Set(fs1.Width()+xfpos+fs2.Width(),
                    fs1.Over()*fFactorPos+fs2.Over(),fs1.Under());
      else
         result.Set(TMath::Max(fs1.Width(),fs2.Width()),fs1.Over()*prop+fs2.Height(),fs1.Under());

   }
   else if (opUnder>-1) { // _ found
      Double_t prop = .9; // scale factor for #sum & #frac
      Double_t xfpos = 0.;//GetHeight()*spec.fSize/5. ;
      Double_t fpos = fFactorPos ;
      // When increasing prop, the lower indice position is lower
      if(!fShow) {
         Int_t ltext = opUnder ;
         if (ltext >= 2 && strncmp(&text[ltext-2],"{}",2)==0) {
            // upper and lower indice before the character
            // like with chemical element
            snprintf(&text[ltext-2],length-(ltext-2),"I ") ;
            ltext-- ;
         }
         fs1 = Anal1(spec,text,ltext);
         fs2 = Anal1(specNewSize,text+opUnder+1,length-opUnder-1);
         Savefs(&fs1);
         Savefs(&fs2);
      } else {
         fs2 = Readfs();
         fs1 = Readfs();
         Int_t pos = 0;
         if (!abovePlace)
            Analyse(x+fs1.Width()+xfpos,y+fs1.Under()+fs2.Over()*fpos,specNewSize,text+opUnder+1,length-opUnder-1);
         else {
            Int_t pos2=0;
            if (fs2.Width()>fs1.Width())
               pos=Int_t((fs2.Width()-fs1.Width())/2);
            else
               pos2=Int_t((fs1.Width()-fs2.Width())/2);

            Analyse(x+pos2,y+fs1.Under()*prop+fs2.Over(),specNewSize,text+opUnder+1,length-opUnder-1);
         }
         if (opUnder >= 2 && strncmp(&text[opUnder-2],"{}",2)==0) {
            snprintf(&text[opUnder-2],length-(opUnder-2),"  ") ;
            Analyse(x+pos,y,spec,text,opUnder-1);
         } else {
            Analyse(x+pos,y,spec,text,opUnder);
         }
      }
      if (!abovePlace)
         result.Set(fs1.Width()+xfpos+fs2.Width(),fs1.Over(),
                    fs1.Under()+fs2.Under()+fs2.Over()*fpos);
      else
         result.Set(TMath::Max(fs1.Width(),fs2.Width()),fs1.Over(),fs1.Under()*prop+fs2.Height());
   }
   else if (opBox) {
      Double_t square = GetHeight()*spec.fSize/2;
      if (!fShow) {
         fs1 = Anal1(spec,text+4,length-4);
      } else {
         fs1 = Analyse(x+square,y,spec,text+4,length-4);
         Double_t adjust = GetHeight()*spec.fSize/20;
         Double_t x1 = x+adjust ;
         Double_t x2 = x-adjust+square ;
         Double_t y1 = y;
         Double_t y2 = y-square+adjust;
         DrawLine(x1,y1,x2,y1,spec);
         DrawLine(x2,y1,x2,y2,spec);
         DrawLine(x2,y2,x1,y2,spec);
         DrawLine(x1,y2,x1,y1,spec);
      }
      result = fs1 + TLatexFormSize(square,square,0);
   }
   else if (opOdot) {
      Double_t square = GetHeight()*spec.fSize/2;
      if (!fShow) {
         fs1 = Anal1(spec,text+5,length-5);
      } else {
         fs1 = Analyse(x+1.3*square,y,spec,text+5,length-5);
         Double_t adjust = GetHeight()*spec.fSize/20;
         Double_t r1 = 0.62*square;
         Double_t y1 = y-0.3*square-adjust;
         DrawCircle(x+0.6*square,y1,r1,spec) ;
         DrawCircle(x+0.6*square,y1,r1/100,spec) ;
      }
      result = fs1 + TLatexFormSize(square,square,0);
   }
   else if (opHbar) {
      Double_t square = GetHeight()*spec.fSize/2;
      if (!fShow) {
         fs1 = Anal1(spec,text+5,length-5);
      } else {
         fs1 = Analyse(x+square,y,spec,text+5,length-5);
         TText hbar;
         hbar.SetTextFont(12);
         hbar.SetTextColor(spec.fColor);
         hbar.SetTextSize(spec.fSize);
         hbar.SetTextAngle(fTextAngle);
         Double_t xOrigin = (Double_t)gPad->XtoAbsPixel(fX);
         Double_t yOrigin = (Double_t)gPad->YtoAbsPixel(fY);
         Double_t angle   = kPI*spec.fAngle/180.;
         Double_t xx = gPad->AbsPixeltoX(Int_t((x-xOrigin)*TMath::Cos(angle)+(y-yOrigin)*TMath::Sin(angle)+xOrigin));
         Double_t yy = gPad->AbsPixeltoY(Int_t((x-xOrigin)*TMath::Sin(-angle)+(y-yOrigin)*TMath::Cos(angle)+yOrigin));
         hbar.PaintText(xx,yy,"h");
         DrawLine(x,y-0.8*square,x+0.75*square,y-square,spec);
      }
      result = fs1 + TLatexFormSize(square,square,0);
   }
   else if (opMinus) {
      Double_t square = GetHeight()*spec.fSize/2;
      if (!fShow) {
         fs1 = Anal1(spec,text+6,length-6);
      } else {
         fs1 = Analyse(x+square,y,spec,text+6,length-6);
         TText minus;
         minus.SetTextFont(122);
         minus.SetTextColor(spec.fColor);
         minus.SetTextSize(spec.fSize);
         minus.SetTextAngle(fTextAngle);
         Double_t xOrigin = (Double_t)gPad->XtoAbsPixel(fX);
         Double_t yOrigin = (Double_t)gPad->YtoAbsPixel(fY);
         Double_t angle   = kPI*spec.fAngle/180.;
         Double_t xx = gPad->AbsPixeltoX(Int_t((x-xOrigin)*TMath::Cos(angle)+(y-yOrigin)*TMath::Sin(angle)+xOrigin));
         Double_t yy = gPad->AbsPixeltoY(Int_t((x-xOrigin)*TMath::Sin(-angle)+(y-yOrigin)*TMath::Cos(angle)+yOrigin));
         minus.PaintText(xx,yy,"-");
      }
      result = fs1 + TLatexFormSize(square,square,0);
   }
   else if (opPlus) {
      Double_t square = GetHeight()*spec.fSize/2;
      if (!fShow) {
         fs1 = Anal1(spec,text+5,length-5);
      } else {
         fs1 = Analyse(x+square,y,spec,text+5,length-5);
         TText plus;
         plus.SetTextFont(122);
         plus.SetTextColor(spec.fColor);
         plus.SetTextSize(spec.fSize);
         plus.SetTextAngle(fTextAngle);
         Double_t xOrigin = (Double_t)gPad->XtoAbsPixel(fX);
         Double_t yOrigin = (Double_t)gPad->YtoAbsPixel(fY);
         Double_t angle   = kPI*spec.fAngle/180.;
         Double_t xx = gPad->AbsPixeltoX(Int_t((x-xOrigin)*TMath::Cos(angle)+(y-yOrigin)*TMath::Sin(angle)+xOrigin));
         Double_t yy = gPad->AbsPixeltoY(Int_t((x-xOrigin)*TMath::Sin(-angle)+(y-yOrigin)*TMath::Cos(angle)+yOrigin));
         plus.PaintText(xx,yy,"+");
      }
      result = fs1 + TLatexFormSize(square,square,0);
   }
   else if (opMp) {
      Double_t square = GetHeight()*spec.fSize/2;
      if (!fShow) {
         fs1 = Anal1(spec,text+3,length-3);
      } else {
         fs1 = Analyse(x+square,y,spec,text+3,length-3);
         TText mp;
         mp.SetTextFont(122);
         mp.SetTextColor(spec.fColor);
         mp.SetTextSize(spec.fSize);
         mp.SetTextAngle(fTextAngle+180);
         Double_t xOrigin = (Double_t)gPad->XtoAbsPixel(fX);
         Double_t yOrigin = (Double_t)gPad->YtoAbsPixel(fY);
         Double_t angle   = kPI*spec.fAngle/180.;
         Double_t xx = gPad->AbsPixeltoX(Int_t((x+square-xOrigin)*TMath::Cos(angle)+(y-1.25*square-yOrigin)*TMath::Sin(angle)+xOrigin));
         Double_t yy = gPad->AbsPixeltoY(Int_t((x+square-xOrigin)*TMath::Sin(-angle)+(y-1.25*square-yOrigin)*TMath::Cos(angle)+yOrigin));
         mp.PaintText(xx,yy,"\261");
      }
      result = fs1 + TLatexFormSize(square,square,0);
   }
   else if (opPerp) {
      Double_t square = GetHeight()*spec.fSize/1.4;
      if (!fShow) {
         fs1 = Anal1(spec,text+5,length-5);
      } else {
         fs1 = Analyse(x+0.5*square,y,spec,text+5,length-5);
         Double_t x0 = x  + 0.50*square;
         Double_t x1 = x0 - 0.48*square;
         Double_t x2 = x0 + 0.48*square;
         Double_t y1 = y  + 0.6*square;
         Double_t y2 = y1 - 1.3*square;
         DrawLine(x1,y1,x2,y1,spec);
         DrawLine(x0,y1,x0,y2,spec);
      }
      result = fs1;
   }
   else if (opBackslash) {
      Double_t square = GetHeight()*spec.fSize/2;
      if (!fShow) {
         fs1 = Anal1(spec,text+10,length-10);
      } else {
         fs1 = Analyse(x+square,y,spec,text+10,length-10);
         TText bs;
         bs.SetTextFont(GetTextFont());
         bs.SetTextColor(spec.fColor);
         bs.SetTextSize(spec.fSize);
         bs.SetTextAngle(fTextAngle);
         Double_t xOrigin = (Double_t)gPad->XtoAbsPixel(fX);
         Double_t yOrigin = (Double_t)gPad->YtoAbsPixel(fY);
         Double_t angle   = kPI*spec.fAngle/180.;
         Double_t xx = gPad->AbsPixeltoX(Int_t((x-xOrigin)*TMath::Cos(angle)+(y-yOrigin)*TMath::Sin(angle)+xOrigin));
         Double_t yy = gPad->AbsPixeltoY(Int_t((x-xOrigin)*TMath::Sin(-angle)+(y-yOrigin)*TMath::Cos(angle)+yOrigin));
         bs.PaintText(xx,yy,"\\");
      }
      result = fs1 + TLatexFormSize(square,square,0);
   }
   else if (opParallel) {
      Double_t square = GetHeight()*spec.fSize/1.4;
      if (!fShow) {
         fs1 = Anal1(spec,text+9,length-9);
      } else {
         fs1 = Analyse(x+0.5*square,y,spec,text+9,length-9);
         Double_t x1 = x + 0.15*square;
         Double_t x2 = x + 0.45*square;
         Double_t y1 = y + 0.3*square;
         Double_t y2 = y1- 1.3*square;
         DrawLine(x1,y1,x1,y2,spec);
         DrawLine(x2,y1,x2,y2,spec);
      }
      result = fs1 + TLatexFormSize(square,square,0);
   }
   else if (opGreek>-1) {
      TextSpec_t newSpec = spec;
      newSpec.fFont = fItalic ? 152 : 122;
      char letter = 97 + opGreek;
      Double_t yoffset = 0.; // Greek letter too low
      if (opGreek>25) letter -= 58;
      if (opGreek == 52) letter = '\241'; //varUpsilon
      if (opGreek == 53) letter = '\316'; //epsilon
      if (!fShow) {
         fs1 = Anal1(newSpec,&letter,1);
         fs2 = Anal1(spec,text+strlen(tab[opGreek])+1,length-strlen(tab[opGreek])-1);
         Savefs(&fs1);
      } else {
         fs1 = Readfs();
         Analyse(x+fs1.Width(),y,spec,text+strlen(tab[opGreek])+1,length-strlen(tab[opGreek])-1);
         Analyse(x,y-yoffset,newSpec,&letter,1);
      }
      fs1.AddOver(TLatexFormSize(0,yoffset,0)) ;
      result = fs1+fs2;
   }

   else if (opSpec>-1) {
      TextSpec_t newSpec = spec;
      newSpec.fFont = fItalic ? 152 : 122;
      char letter = '\243' + opSpec;
      if(opSpec == 75 || opSpec == 76) {
         newSpec.fFont = GetTextFont();
         if (opSpec == 75) letter = '\305'; // AA Angstroem
         if (opSpec == 76) letter = '\345'; // aa Angstroem
      }
      if(opSpec == 80 || opSpec == 81) {
         if (opSpec == 80) letter = '\042'; // #forall
         if (opSpec == 81) letter = '\044'; // #exists
      }
      Double_t props, propi;
      props = 1.8 ; // scale factor for #sum(66)
      propi = 2.3 ; // scale factor for  #int(79)

      if (opSpec==66 ) {
         newSpec.fSize = spec.fSize*props;
      } else if (opSpec==79) {
         newSpec.fSize = spec.fSize*propi;
      }
      if (!fShow) {
         fs1 = Anal1(newSpec,&letter,1);
         if (opSpec == 79 || opSpec == 66)
            fs1.Set(fs1.Width(),fs1.Over()*0.45,fs1.Over()*0.45);

         fs2 = Anal1(spec,text+strlen(tab2[opSpec])+1,length-strlen(tab2[opSpec])-1);
         Savefs(&fs1);
      } else {
         fs1 = Readfs();
         Analyse(x+fs1.Width(),y,spec,text+strlen(tab2[opSpec])+1,length-strlen(tab2[opSpec])-1);
         if (opSpec!=66 && opSpec!=79)
            Analyse(x,y,newSpec,&letter,1);
         else {
               Analyse(x,y+fs1.Under()/2.,newSpec,&letter,1);
         }
      }
      result = fs1+fs2;
   }
   else if (opAbove>-1) {
      if (!fShow) {
         fs1 = Anal1(spec,text+strlen(tab3[opAbove])+1,length-strlen(tab3[opAbove])-1);
         Savefs(&fs1);
      } else {
         fs1 = Readfs();
         Analyse(x,y,spec,text+strlen(tab3[opAbove])+1,length-strlen(tab3[opAbove])-1);
         Double_t sub = GetHeight()*spec.fSize/14;
         Double_t x1 , y1 , x2, y2, x3, x4;
         switch(opAbove) {
         case 0: // bar
            Double_t ypos  ;
            ypos = y-fs1.Over()-sub ;//-GetHeight()*spec.fSize/4. ;
            DrawLine(x,ypos,x+fs1.Width(),ypos,spec);
            break;
         case 1: // vec
            Double_t y0 ;
            y0 = y-sub-fs1.Over() ;
            y1 = y0-GetHeight()*spec.fSize/8 ;
            x1 = x+fs1.Width() ;
            DrawLine(x,y1,x1,y1,spec);
            DrawLine(x1,y1,x1-GetHeight()*spec.fSize/4,y0-GetHeight()*spec.fSize/4,spec);
            DrawLine(x1,y1,x1-GetHeight()*spec.fSize/4,y0,spec);
            break;
         case 2: // dot
            x1 = x+fs1.Width()/2-3*sub/4 ;
            x2 = x+fs1.Width()/2+3*sub/4 ;
            y1 = y-sub-fs1.Over() ;
            DrawLine(x1,y1,x2,y1,spec);
            break;
         case 3: // hat
            x2 = x+fs1.Width()/2 ;
            y1 = y -9*sub;
            y2 = y1-2*sub;
            x1 = x2-fs1.Width()/3 ;
            x3 = x2+fs1.Width()/3 ;
            DrawLine(x1,y1,x2,y2,spec);
            DrawLine(x2,y2,x3,y1,spec);
            break;
         case 4: // ddot
            x1 = x+fs1.Width()/2-9*sub/4 ;
            x2 = x+fs1.Width()/2-3*sub/4 ;
            x3 = x+fs1.Width()/2+9*sub/4 ;
            x4 = x+fs1.Width()/2+3*sub/4 ;
            y1 = y-sub-fs1.Over() ;
            DrawLine(x1,y1,x2,y1,spec);
            DrawLine(x3,y1,x4,y1,spec);
            break;
         case 5: // acute
            x1 = x+fs1.Width()/2;
            y1 = y +sub -fs1.Over() ;
            x2 = x1 +3*sub;
            y2 = y1 -2.5*sub;
            DrawLine(x1,y1,x2,y2,spec);
            break;
         case 6: // grave
            x1 = x+fs1.Width()/2-sub;
            y1 = y-sub-fs1.Over() ;
            x2 = x1 +2*sub;
            y2 = y1 +2*sub;
            DrawLine(x1,y1,x2,y2,spec);
            break;
         case 7: // check
            x1 = x+fs1.Width()/2 ;
            x2 = x1 -2*sub ;
            x3 = x1 +2*sub ;
            y1 = y-sub-fs1.Over() ;
            DrawLine(x2,y-3*sub-fs1.Over(),x1,y1,spec);
            DrawLine(x3,y-3*sub-fs1.Over(),x1,y1,spec);
            break;
         case 8: // tilde
            x2 = x+fs1.Width()/2 ;
            y2 = y -fs1.Over() ;
            {
               // tilde must be drawn separately on screen and on PostScript
               // because an adjustment is required along Y for PostScript.
               TVirtualPS *saveps = gVirtualPS;
               if (gVirtualPS) gVirtualPS = 0;
               Double_t y22 = y2;
               if (gVirtualX->InheritsFrom("TGCocoa")) y2 -= 3*sub;
               Double_t sinang  = TMath::Sin(spec.fAngle/180*kPI);
               Double_t cosang  = TMath::Cos(spec.fAngle/180*kPI);
               Double_t xOrigin = (Double_t)gPad->XtoAbsPixel(fX);
               Double_t yOrigin = (Double_t)gPad->YtoAbsPixel(fY);
               Double_t xx  = gPad->AbsPixeltoX(Int_t((x2-xOrigin)*cosang+(y2-yOrigin)*sinang+xOrigin));
               Double_t yy  = gPad->AbsPixeltoY(Int_t((x2-xOrigin)*-sinang+(y2-yOrigin)*cosang+yOrigin));
               TText tilde;
               tilde.SetTextFont(fTextFont);
               tilde.SetTextColor(spec.fColor);
               tilde.SetTextSize(0.9*spec.fSize);
               tilde.SetTextAlign(22);
               tilde.SetTextAngle(fTextAngle);
               tilde.PaintText(xx,yy,"~");
               if (saveps) {
                  gVirtualPS = saveps;
                  if (!strstr(gVirtualPS->GetTitle(),"IMG")) y22 -= 4*sub;
                  xx  = gPad->AbsPixeltoX(Int_t((x2-xOrigin)*cosang+(y22-yOrigin)*sinang+xOrigin));
                  yy  = gPad->AbsPixeltoY(Int_t((x2-xOrigin)*-sinang+(y22-yOrigin)*cosang+yOrigin));
                  gVirtualPS->SetTextAlign(22);
                  gVirtualPS->Text(xx, yy, "~");
               }
            }
            break;
         case 9: // slash
            x1 = x + 0.8*fs1.Width();
            y1 = y -fs1.Over() ;
            x2 = x + 0.3*fs1.Width();
            y2 = y1 + 1.2*fs1.Height();
            DrawLine(x1,y1,x2,y2,spec);
            break;
         }
      }
      Double_t div = 3;
      if (opAbove==1) div=4;
      result.Set(fs1.Width(),fs1.Over()+GetHeight()*spec.fSize/div,fs1.Under());
   }
   else if (opSquareBracket) { // operator #[]{arg}
      Double_t l = GetHeight()*spec.fSize/4;
      Double_t l2 = l/2 ;
      if (!fShow) {
         fs1 = Anal1(spec,text+3,length-3);
         Savefs(&fs1);
      } else {
         fs1 = Readfs();
         Analyse(x+l2+l,y,spec,text+3,length-3);
         DrawLine(x+l2,y-fs1.Over(),x+l2,y+fs1.Under(),spec);
         DrawLine(x+l2,y-fs1.Over(),x+l2+l,y-fs1.Over(),spec);
         DrawLine(x+l2,y+fs1.Under(),x+l2+l,y+fs1.Under(),spec);
         DrawLine(x+l2+fs1.Width()+2*l,y-fs1.Over(),x+l2+fs1.Width()+2*l,y+fs1.Under(),spec);
         DrawLine(x+l2+fs1.Width()+2*l,y-fs1.Over(),x+l2+fs1.Width()+l,y-fs1.Over(),spec);
         DrawLine(x+l2+fs1.Width()+2*l,y+fs1.Under(),x+l2+fs1.Width()+l,y+fs1.Under(),spec);
      }
      result.Set(fs1.Width()+3*l,fs1.Over(),fs1.Under());
   }
   else if (opParen) {  // operator #(){arg}
      Double_t l = GetHeight()*spec.fSize/4;
      Double_t radius2,radius1 , dw, l2 = l/2 ;
      Double_t angle = 35 ;
      if (!fShow) {
         fs1 = Anal1(spec,text+3,length-3);
         Savefs(&fs1);
         radius2 = fs1.Height() ;
         radius1 = radius2  * 2 / 3;
         dw = radius1*(1 - TMath::Cos(kPI*angle/180)) ;
      } else {
         fs1 = Readfs();
         radius2 = fs1.Height();
         radius1 = radius2  * 2 / 3;
         dw = radius1*(1 - TMath::Cos(kPI*angle/180)) ;
         Double_t x1 = x+l2+radius1 ;
         Double_t x2 = x+5*l2+2*dw+fs1.Width()-radius1 ;
         Double_t y1 = y - (fs1.Over() - fs1.Under())/2. ;
         DrawParenthesis(x1,y1,radius1,radius2,180-angle,180+angle,spec) ;
         DrawParenthesis(x2,y1,radius1,radius2,360-angle,360+angle,spec) ;
         Analyse(x+3*l2+dw,y,spec,text+3,length-3);
      }
     // result = TLatexFormSize(fs1.Width()+3*l,fs1.Over(),fs1.Under());
      result.Set(fs1.Width()+3*l+2*dw,fs1.Over(),fs1.Under());
   }
   else if (opAbs) {  // operator #||{arg}
      Double_t l = GetHeight()*spec.fSize/4;
      Double_t l2 = l/2 ;
      if (!fShow) {
         fs1 = Anal1(spec,text+3,length-3);
         Savefs(&fs1);
      } else {
         fs1 = Readfs();
         Analyse(x+l2+l,y,spec,text+3,length-3);
         DrawLine(x+l2,y-fs1.Over(),x+l2,y+fs1.Under(),spec);
         DrawLine(x+l2+fs1.Width()+2*l,y-fs1.Over(),x+l2+fs1.Width()+2*l,y+fs1.Under(),spec);
      }
      result.Set(fs1.Width()+3*l,fs1.Over(),fs1.Under());
   }
   else if (opBigCurly) { // big curly bracket  #{}{arg}
      Double_t l = GetHeight()*spec.fSize/4;
      Double_t l2 = l/2 ;
      Double_t l8 , ltip;

      if (!fShow) {
         fs1 = Anal1(spec,text+3,length-3);
         l8 = fs1.Height()/8 ;
         ltip = TMath::Min(l8,l) ;
         l = ltip ;
         Savefs(&fs1);
      } else {
         fs1 = Readfs();
         Double_t y2 = y + (fs1.Under()-fs1.Over())/2 ;
         l8 = fs1.Height()/8 ;
         ltip = TMath::Min(l8,l) ;
         l = ltip ;
         Analyse(x+l+ltip+l2,y,spec,text+3,length-3);
         // Draw open curly bracket
         // Vertical lines
         DrawLine(x+l2+ltip,y-fs1.Over(),x+l2+ltip,y2-ltip,spec);
         DrawLine(x+l2+ltip,y2+ltip,x+l2+ltip,y+fs1.Under(),spec);
         // top and bottom lines
         DrawLine(x+l2+ltip,y-fs1.Over(),x+l2+ltip+l,y-fs1.Over(),spec);
         DrawLine(x+l2+ltip,y+fs1.Under(),x+l2+ltip+l,y+fs1.Under(),spec);
         // < sign
         DrawLine(x+l2,y2,x+l2+ltip,y2-ltip,spec);
         DrawLine(x+l2,y2,x+l2+ltip,y2+ltip,spec);

         // Draw close curly bracket
         // vertical lines
         DrawLine(x+l2+ltip+fs1.Width()+2*l,y-fs1.Over(),x+l2+ltip+fs1.Width()+2*l,y2-ltip,spec);
         DrawLine(x+l2+ltip+fs1.Width()+2*l,y2+ltip,x+l2+ltip+fs1.Width()+2*l,y+fs1.Under(),spec);
         // Top and bottom lines
         DrawLine(x+l2+fs1.Width()+l+ltip,y-fs1.Over(),x+l2+ltip+fs1.Width()+2*l,y-fs1.Over(),spec);
         DrawLine(x+l2+fs1.Width()+l+ltip,y+fs1.Under(),x+l2+ltip+fs1.Width()+2*l,y+fs1.Under(),spec);
         // > sign
         DrawLine(x+l2+ltip+2*l+fs1.Width(),y2-ltip,x+l2+2*l+2*ltip+fs1.Width(),y2,spec);
         DrawLine(x+l2+ltip+2*l+fs1.Width(),y2+ltip,x+l2+2*l+2*ltip+fs1.Width(),y2,spec);
      }
      result.Set(fs1.Width()+3*l+2*ltip,fs1.Over(),fs1.Under()) ;;
   }
   else if (opFrac>-1) { // \frac found
      if (opCurlyCurly==-1) { // }{ not found
         // arguments missing for \frac
         fError = "Missing denominator for #frac";
         return TLatexFormSize(0,0,0);
      }
      Double_t height = GetHeight()*spec.fSize/8;
      if (!fShow) {
         fs1 = Anal1(spec,text+opFrac+6,opCurlyCurly-opFrac-6);
         fs2 = Anal1(spec,text+opCurlyCurly+2,length-opCurlyCurly-3);
         Savefs(&fs1);
         Savefs(&fs2);
      } else {
         fs2 = Readfs();
         fs1 = Readfs();
         Double_t addW1,addW2;
         if (fs1.Width()<fs2.Width()) {
            addW1 = (fs2.Width()-fs1.Width())/2;
            addW2 = 0;
         } else {
            addW1 = 0;
            addW2 = (fs1.Width()-fs2.Width())/2;
         }
         Analyse(x+addW2,y+fs2.Over()-height,spec,text+opCurlyCurly+2,length-opCurlyCurly-3);  // denominator
         Analyse(x+addW1,y-fs1.Under()-3*height,spec,text+opFrac+6,opCurlyCurly-opFrac-6); //numerator

         DrawLine(x,y-2*height,x+TMath::Max(fs1.Width(),fs2.Width()),y-2*height,spec);
      }

      result.Set(TMath::Max(fs1.Width(),fs2.Width()),fs1.Height()+3*height,fs2.Height()-height);

   }
   else if (opSplitLine>-1) { // \splitline found
      if (opCurlyCurly==-1) { // }{ not found
         // arguments missing for \splitline
         fError = "Missing second line for #splitline";
         return TLatexFormSize(0,0,0);
      }
      Double_t height = GetHeight()*spec.fSize/8;
      if (!fShow) {
         fs1 = Anal1(spec,text+opSplitLine+11,opCurlyCurly-opSplitLine-11);
         fs2 = Anal1(spec,text+opCurlyCurly+2,length-opCurlyCurly-3);
         Savefs(&fs1);
         Savefs(&fs2);
      } else {
         fs2 = Readfs();
         fs1 = Readfs();
         Analyse(x,y+fs2.Over()-height,spec,text+opCurlyCurly+2,length-opCurlyCurly-3);  // second line
         Analyse(x,y-fs1.Under()-3*height,spec,text+opSplitLine+11,opCurlyCurly-opSplitLine-11); //first line
      }

      result.Set(TMath::Max(fs1.Width(),fs2.Width()),fs1.Height()+3*height,fs2.Height()-height);

   }
   else if (opSqrt>-1) { // \sqrt found
      if (!fShow) {
         if (opSquareCurly>-1) {
            // power nth  #sqrt[n]{arg}
            fs1 = Anal1(specNewSize,text+opSqrt+6,opSquareCurly-opSqrt-6);
            fs2 = Anal1(spec,text+opSquareCurly+1,length-opSquareCurly-1);
            Savefs(&fs1);
            Savefs(&fs2);
            result.Set(fs2.Width()+ GetHeight()*spec.fSize/10+TMath::Max(GetHeight()*spec.fSize/2,(Double_t)fs1.Width()),
                       fs2.Over()+fs1.Height()+GetHeight()*spec.fSize/4,fs2.Under());
         } else {
            fs1 = Anal1(spec,text+opSqrt+5,length-opSqrt-5);
            Savefs(&fs1);
            result.Set(fs1.Width()+GetHeight()*spec.fSize/2,fs1.Over()+GetHeight()*spec.fSize/4,fs1.Under());
         }
      } else {
         if (opSquareCurly>-1) { // ]{
            fs2 = Readfs();
            fs1 = Readfs();
            Double_t pas = TMath::Max(GetHeight()*spec.fSize/2,(Double_t)fs1.Width());
            Double_t pas2 = pas + GetHeight()*spec.fSize/10;
            Double_t y1 = y-fs2.Over() ;
            Double_t y2 = y+fs2.Under() ;
            Double_t y3 = y1-GetHeight()*spec.fSize/4;
            Analyse(x+pas2,y,spec,text+opSquareCurly+1,length-opSquareCurly-1);
            Analyse(x,y-fs2.Over()-fs1.Under(),specNewSize,text+opSqrt+6,opSquareCurly-opSqrt-6); // indice
            DrawLine(x,y1,x+pas,y2,spec);
            DrawLine(x+pas,y2,x+pas,y3,spec);
            DrawLine(x+pas,y3,x+pas2+fs2.Width(),y3,spec);
         } else {
            fs1 = Readfs();
            Double_t x1 = x+GetHeight()*spec.fSize*2/5 ;
            Double_t x2 = x+GetHeight()*spec.fSize/2+fs1.Width() ;
            Double_t y1 = y-fs1.Over() ;
            Double_t y2 = y+fs1.Under() ;
            Double_t y3 = y1-GetHeight()*spec.fSize/4;

            Analyse(x+GetHeight()*spec.fSize/2,y,spec,text+opSqrt+6,length-opSqrt-7);

            Short_t lineW = GetLineWidth();
            SetLineWidth(1);
            Double_t dx = (y2-y3)/8;
            UInt_t a,d;
            GetTextAscentDescent(a, d, text);
            if (a>12) SetLineWidth(TMath::Max(2,(Int_t)(dx/2)));
            DrawLine(x1-2*dx,y1,x1-dx,y2,spec);
            if (a>12) SetLineWidth((Int_t)(dx/4));
            DrawLine(x1-dx,y2,x1,y3,spec);
            DrawLine(x1,y3,x2,y3,spec);
            SetLineWidth(lineW);
         }
      }
   }
   else if (opColor>-1) { // \color found
      if (opSquareCurly==-1) {
         // color number is not specified
         fError = "Missing color number. Syntax is #color[(Int_t)nb]{ ... }";
         return TLatexFormSize(0,0,0);
      }
      TextSpec_t newSpec = spec;
      Char_t *nb = new Char_t[opSquareCurly-opColor-6];
      strncpy(nb,text+opColor+7,opSquareCurly-opColor-7);
      nb[opSquareCurly-opColor-7] = 0;
      if (sscanf(nb,"%d",&newSpec.fColor) < 1) {
         delete[] nb;
         // color number is invalid
         fError = "Invalid color number. Syntax is #color[(Int_t)nb]{ ... }";
         return TLatexFormSize(0,0,0);
      }
      delete[] nb;
      if (!fShow) {
         result = Anal1(newSpec,text+opSquareCurly+1,length-opSquareCurly-1);
      } else {
         Analyse(x,y,newSpec,text+opSquareCurly+1,length-opSquareCurly-1);
      }
   }
   else if (opFont>-1) { // \font found
      if (opSquareCurly==-1) {
         // font number is not specified
         fError = "Missing font number. Syntax is #font[nb]{ ... }";
         return TLatexFormSize(0,0,0);
      }
      TextSpec_t newSpec = spec;
      Char_t *nb = new Char_t[opSquareCurly-opFont-5];
      strncpy(nb,text+opFont+6,opSquareCurly-opFont-6);
      nb[opSquareCurly-opFont-6] = 0;
      if (sscanf(nb,"%d",&newSpec.fFont) < 1) {
         delete[] nb;
         // font number is invalid
         fError = "Invalid font number. Syntax is #font[(Int_t)nb]{ ... }";
         return TLatexFormSize(0,0,0);
      }
      delete[] nb;
      if (!fShow) {
         result = Anal1(newSpec,text+opSquareCurly+1,length-opSquareCurly-1);
      } else {
         Analyse(x,y,newSpec,text+opSquareCurly+1,length-opSquareCurly-1);
      }
   }
   else if (opKern>-1) { // #kern found
      if (opSquareCurly==-1) {
         // horizontal shift is not specified
         fError = "Missing horizontal shift number. Syntax is #kern[dx]{ ... }";
         return TLatexFormSize(0,0,0);
      }
      Char_t *dxc = new Char_t[opSquareCurly-opKern-5];
      strncpy(dxc,text+opKern+6,opSquareCurly-opKern-6);
      dxc[opSquareCurly-opKern-6] = 0;
      Float_t dx = 0;
      if (sscanf(dxc,"%f",&dx) < 1) {
         delete[] dxc;
         // horizontal shift number is invalid
         fError = "Invalid horizontal shift number. Syntax is #kern[(Float_t)dx]{ ... }";
         return TLatexFormSize(0,0,0);
      }
      delete[] dxc;
      if (!fShow) {
         fs1 = Anal1(spec,text+opSquareCurly+1,length-opSquareCurly-1);
         Savefs(&fs1);
         Double_t ddx = dx * fs1.Width();
         result = TLatexFormSize(fs1.Width() + ddx, fs1.Over(), fs1.Under());
      } else {
         fs1 = Readfs();
         Double_t ddx = dx * fs1.Width();
         Analyse(x + ddx,y,spec,text+opSquareCurly+1,length-opSquareCurly-1);
      }
   }
   else if (opLower>-1) { // #lower found
      if (opSquareCurly==-1) {
         // vertical shift is not specified
         fError = "Missing vertical shift number. Syntax is #lower[dy]{ ... }";
         return TLatexFormSize(0,0,0);
      }
      Char_t *dyc = new Char_t[opSquareCurly-opLower-6];
      strncpy(dyc,text+opLower+7,opSquareCurly-opLower-7);
      dyc[opSquareCurly-opLower-7] = 0;
      Float_t dy = 0;
      if (sscanf(dyc,"%f",&dy) < 1) {
         delete[] dyc;
         // vertical shift number is invalid
         fError = "Invalid vertical shift number. Syntax is #lower[(Float_t)dy]{ ... }";
         return TLatexFormSize(0,0,0);
      }
      delete[] dyc;
      if (!fShow) {
         fs1 = Anal1(spec,text+opSquareCurly+1,length-opSquareCurly-1);
         Savefs(&fs1);
         Double_t ddy = dy * (fs1.Over() + fs1.Under());
         result = TLatexFormSize(fs1.Width(), fs1.Over() + ddy, fs1.Under() + ddy);
      } else {
         fs1 = Readfs();
         Double_t ddy = dy * (fs1.Over() + fs1.Under());
         Analyse(x,y + ddy,spec,text+opSquareCurly+1,length-opSquareCurly-1);
      }
   }
   else if (opScale>-1) { // \scale found
      if (opSquareCurly==-1) {
         // scale factor is not specified
         fError = "Missing scale factor. Syntax is #scale[(Double_t)nb]{ ... }";
         return TLatexFormSize(0,0,0);
      }
      TextSpec_t newSpec = spec;
      Char_t *nb = new Char_t[opSquareCurly-opScale-6];
      strncpy(nb,text+opScale+7,opSquareCurly-opScale-7);
      nb[opSquareCurly-opScale-7] = 0;
      if (sscanf(nb,"%lf",&newSpec.fSize) < 1) {
         delete[] nb;
         // scale factor is invalid
         fError = "Invalid scale factor. Syntax is #factor[(Double_t)nb]{ ... }";
         return TLatexFormSize(0,0,0);
      }
      newSpec.fSize *= spec.fSize;
      delete[] nb;
      if (!fShow) {
         result = Anal1(newSpec,text+opSquareCurly+1,length-opSquareCurly-1);
      } else {
         Analyse(x,y,newSpec,text+opSquareCurly+1,length-opSquareCurly-1);
      }
   }
   else if (opBf>-1) { // operator #bf{arg}
      TextSpec_t newSpec = spec;
      Int_t lut[] = {3, 13, 1, 6, 7, 4, 5, 10, 11, 8, 9, 12, 2, 14, 15};
      Int_t fontId = (newSpec.fFont/10);
      if ((fontId >= 1) && (fontId <= (Int_t)(sizeof(lut)/sizeof(lut[0])))) fontId = lut[fontId-1];
      newSpec.fFont = fontId*10 + newSpec.fFont%10;
      if (!fShow) {
         fs1 = Anal1(newSpec,text+3,length-3);
         Savefs(&fs1);
      } else {
         fs1 = Readfs();
         Analyse(x,y,newSpec,text+3,length-3);
      }
      result = fs1;
   }
   else if (opMbox>-1) { // dummy operator #mbox{arg}
      TextSpec_t newSpec = spec;
      if (!fShow) {
         fs1 = Anal1(newSpec,text+5,length-5);
         Savefs(&fs1);
      } else {
         fs1 = Readfs();
         Analyse(x,y,newSpec,text+5,length-5);
      }
      result = fs1;
   }
   else if (opIt>-1) { // operator #it{arg}
      TextSpec_t newSpec = spec;
      Int_t lut[] = {13, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 15, 1, 14, 12};
      Int_t fontId = (newSpec.fFont/10);
      if ((fontId >= 1) && (fontId <= (Int_t)(sizeof(lut)/sizeof(lut[0])))) fontId = lut[fontId-1];
      newSpec.fFont = fontId*10 + newSpec.fFont%10;
      fItalic = !fItalic;
      if (!fShow) {
         fs1 = Anal1(newSpec,text+3,length-3);
         Savefs(&fs1);
      } else {
         fs1 = Readfs();
         Analyse(x,y,newSpec,text+3,length-3);
      }
      fItalic = !fItalic;
      result = fs1;
   }
   else { // no operators found, it is a character string
      SetTextSize(spec.fSize);
      SetTextAngle(spec.fAngle);
      SetTextColor(spec.fColor);
      SetTextFont(spec.fFont);
      SetTextAlign(11);
      TAttText::Modify();
      UInt_t w=0,h=0;

      Int_t leng = strlen(text) ;

      quote1 = quote2 = kFALSE ;
      Char_t *p ;
      for (i=0 ; i<leng ; i++) {
         switch (text[i]) {
            case '\'' : quote1 = !quote1 ; break ; // single quote symbol not correctly interpreted when PostScript
            case '"'  : quote2 = !quote2 ;  break ;
         }
         //if (quote1 || quote2) continue ;
         if (text[i] == '@') {  // @ symbol not correctly interpreted when PostScript
            p = &text[i] ;
            if ( *(p+1) == '{' || *(p+1) == '}' || *(p+1) == '[' || *(p+1) == ']') {
               while (*p != 0) {
                  *p = *(p+1) ; p++ ;
               }
               leng-- ;
            }
         }
      }
      text[leng] = 0 ;

      if (fShow) {
         // paint the Latex sub-expression per sub-expression
         Double_t xOrigin = (Double_t)gPad->XtoAbsPixel(fX);
         Double_t yOrigin = (Double_t)gPad->YtoAbsPixel(fY);
         Double_t angle   = kPI*spec.fAngle/180.;
         Double_t xx = gPad->AbsPixeltoX(Int_t((x-xOrigin)*TMath::Cos(angle)+(y-yOrigin)*TMath::Sin(angle)+xOrigin));
         Double_t yy = gPad->AbsPixeltoY(Int_t((x-xOrigin)*TMath::Sin(-angle)+(y-yOrigin)*TMath::Cos(angle)+yOrigin));
         gPad->PaintText(xx,yy,text);
      } else {
         GetTextExtent(w,h,text);
         Double_t width = w;
         UInt_t a,d;
         GetTextAscentDescent(a, d, text);
         fs1.Set(width,a,d);
      }

      result = fs1;
   }

   delete[] text;

   return result;
}


//______________________________________________________________________________
TLatex *TLatex::DrawLatex(Double_t x, Double_t y, const char *text)
{
   // Make a copy of this object with the new parameters
   // And copy object attributes

   TLatex *newtext = new TLatex(x, y, text);
   TAttText::Copy(*newtext);
   newtext->SetBit(kCanDelete);
   if (TestBit(kTextNDC)) newtext->SetNDC();
   newtext->AppendPad();
   return newtext;
}


//______________________________________________________________________________
TLatex *TLatex::DrawLatexNDC(Double_t x, Double_t y, const char *text)
{
   // Draw this TLatex with new coordinates in NDC.

   TLatex *newtext = DrawLatex(x, y, text);
   newtext->SetNDC();
   return newtext;
}


//______________________________________________________________________________
void TLatex::DrawLine(Double_t x1, Double_t y1, Double_t x2, Double_t y2, TextSpec_t spec)
{
   // Draw a line in a Latex formula

   Double_t sinang  = TMath::Sin(spec.fAngle/180*kPI);
   Double_t cosang  = TMath::Cos(spec.fAngle/180*kPI);
   Double_t xOrigin = (Double_t)gPad->XtoAbsPixel(fX);
   Double_t yOrigin = (Double_t)gPad->YtoAbsPixel(fY);
   Double_t xx  = gPad->AbsPixeltoX(Int_t((x1-xOrigin)*cosang+(y1-yOrigin)*sinang+xOrigin));
   Double_t yy  = gPad->AbsPixeltoY(Int_t((x1-xOrigin)*-sinang+(y1-yOrigin)*cosang+yOrigin));

   Double_t xx2 = gPad->AbsPixeltoX(Int_t((x2-xOrigin)*cosang+(y2-yOrigin)*sinang+xOrigin));
   Double_t yy2 = gPad->AbsPixeltoY(Int_t((x2-xOrigin)*-sinang+(y2-yOrigin)*cosang+yOrigin));

   SetLineColor(spec.fColor);
   TAttLine::Modify();
   gPad->PaintLine(xx,yy,xx2,yy2);
}


//______________________________________________________________________________
void TLatex::DrawCircle(Double_t x1, Double_t y1, Double_t r, TextSpec_t spec )
{
   // Draw an arc of ellipse in a Latex formula (right or left parenthesis)

   if (r < 1) r = 1;
   Double_t sinang  = TMath::Sin(spec.fAngle/180*kPI);
   Double_t cosang  = TMath::Cos(spec.fAngle/180*kPI);
   Double_t xOrigin = (Double_t)gPad->XtoAbsPixel(fX);
   Double_t yOrigin = (Double_t)gPad->YtoAbsPixel(fY);

   const Int_t np = 40;
   Double_t dphi = 2*kPI/np;
   Double_t x[np+3], y[np+3];
   Double_t angle,dx,dy;

   SetLineColor(spec.fColor);
   TAttLine::Modify();  //Change line attributes only if necessary

   for (Int_t i=0;i<=np;i++) {
      angle = Double_t(i)*dphi;
      dx    = r*TMath::Cos(angle) +x1 -xOrigin;
      dy    = r*TMath::Sin(angle) +y1 -yOrigin;
      x[i]  = gPad->AbsPixeltoX(Int_t( dx*cosang+ dy*sinang +xOrigin));
      y[i]  = gPad->AbsPixeltoY(Int_t(-dx*sinang+ dy*cosang +yOrigin));
   }
   gPad->PaintPolyLine(np+1,x,y);
}


//______________________________________________________________________________
void TLatex::DrawParenthesis(Double_t x1, Double_t y1, Double_t r1, Double_t r2,
                     Double_t  phimin, Double_t  phimax, TextSpec_t spec )
{
   // Draw an arc of ellipse in a Latex formula (right or left parenthesis)

   if (r1 < 1) r1 = 1;
   if (r2 < 1) r2 = 1;
   Double_t sinang  = TMath::Sin(spec.fAngle/180*kPI);
   Double_t cosang  = TMath::Cos(spec.fAngle/180*kPI);
   Double_t xOrigin = (Double_t)gPad->XtoAbsPixel(fX);
   Double_t yOrigin = (Double_t)gPad->YtoAbsPixel(fY);

   const Int_t np = 40;
   Double_t dphi = (phimax-phimin)*kPI/(180*np);
   Double_t x[np+3], y[np+3];
   Double_t angle,dx,dy ;

   SetLineColor(spec.fColor);
   TAttLine::Modify();  //Change line attributes only if necessary

   for (Int_t i=0;i<=np;i++) {
      angle = phimin*kPI/180 + Double_t(i)*dphi;
      dx    = r1*TMath::Cos(angle) +x1 -xOrigin;
      dy    = r2*TMath::Sin(angle) +y1 -yOrigin;
      x[i]  = gPad->AbsPixeltoX(Int_t( dx*cosang+dy*sinang +xOrigin));
      y[i]  = gPad->AbsPixeltoY(Int_t(-dx*sinang+dy*cosang +yOrigin));
   }
   gPad->PaintPolyLine(np+1,x,y);
}


//______________________________________________________________________________
void TLatex::Paint(Option_t *)
{
   // Paint.

   Double_t xsave = fX;
   Double_t ysave = fY;
   if (TestBit(kTextNDC)) {
      fX = gPad->GetX1() + xsave*(gPad->GetX2() - gPad->GetX1());
      fY = gPad->GetY1() + ysave*(gPad->GetY2() - gPad->GetY1());
      PaintLatex(fX,fY,GetTextAngle(),GetTextSize(),GetTitle());
   } else {
      PaintLatex(gPad->XtoPad(fX),gPad->YtoPad(fY),GetTextAngle(),GetTextSize(),GetTitle());
   }
   fX = xsave;
   fY = ysave;
}


//______________________________________________________________________________
void TLatex::PaintLatex(Double_t x, Double_t y, Double_t angle, Double_t size, const Char_t *text1)
{
   // Main drawing function
   //
   // Warning: Unlike most others "XYZ::PaintXYZ" methods, PaintLatex modifies
   //          the TLatex data members.

   TAttText::Modify();  // Change text attributes only if necessary.

   TVirtualPS *saveps = gVirtualPS;

   if (gVirtualPS) {
      if (gVirtualPS->InheritsFrom("TTeXDump")) {
         gVirtualPS->SetTextAngle(angle);
         TString t(text1);
         if (t.Index("#")>=0 || t.Index("^")>=0 || t.Index("\\")>=0) {
            t.ReplaceAll("#LT","\\langle");
            t.ReplaceAll("#GT","\\rangle");
            t.ReplaceAll("#club","\\clubsuit");
            t.ReplaceAll("#spade","\\spadesuit");
            t.ReplaceAll("#heart","\\heartsuit");
            t.ReplaceAll("#diamond","\\diamondsuit");
            t.ReplaceAll("#voidn","\\wp");
            t.ReplaceAll("#voidb","f");
            t.ReplaceAll("#ocopyright","\\copyright");
            t.ReplaceAll("#trademark","TM");
            t.ReplaceAll("#void3","TM");
            t.ReplaceAll("#oright","R");
            t.ReplaceAll("#void1","R");
            t.ReplaceAll("#3dots","\\ldots");
            t.ReplaceAll("#lbar","\\mid");
            t.ReplaceAll("#void8","\\mid");
            t.ReplaceAll("#divide","\\div");
            t.ReplaceAll("#Jgothic","\\Im");
            t.ReplaceAll("#Rgothic","\\Re");
            t.ReplaceAll("#doublequote","\"");
            t.ReplaceAll("#plus","+");
            t.ReplaceAll("#minus","-");
            t.ReplaceAll("#/","/");
            t.ReplaceAll("#upoint",".");
            t.ReplaceAll("#aa","\\mbox{\\aa}");
            t.ReplaceAll("#AA","\\mbox{\\AA}");

            t.ReplaceAll("#omicron","o");
            t.ReplaceAll("#Alpha","A");
            t.ReplaceAll("#Beta","B");
            t.ReplaceAll("#Epsilon","E");
            t.ReplaceAll("#Zeta","Z");
            t.ReplaceAll("#Eta","H");
            t.ReplaceAll("#Iota","I");
            t.ReplaceAll("#Kappa","K");
            t.ReplaceAll("#Mu","M");
            t.ReplaceAll("#Nu","N");
            t.ReplaceAll("#Omicron","O");
            t.ReplaceAll("#Rho","P");
            t.ReplaceAll("#Tau","T");
            t.ReplaceAll("#Chi","X");
            t.ReplaceAll("#varomega","\\varpi");

            t.ReplaceAll("#varUpsilon","?");
            t.ReplaceAll("#corner","?");
            t.ReplaceAll("#ltbar","?");
            t.ReplaceAll("#bottombar","?");
            t.ReplaceAll("#notsubset","?");
            t.ReplaceAll("#arcbottom","?");
            t.ReplaceAll("#cbar","?");
            t.ReplaceAll("#arctop","?");
            t.ReplaceAll("#topbar","?");
            t.ReplaceAll("#arcbar","?");
            t.ReplaceAll("#downleftarrow","?");
            t.ReplaceAll("#splitline","\\genfrac{}{}{0pt}{}");

            t.ReplaceAll("#","\\");
            t.ReplaceAll("%","\\%");
         }
         gVirtualPS->Text(x,y,t.Data());
      } else {
         Bool_t saveb = gPad->IsBatch();
         gPad->SetBatch(kTRUE);
         if (!PaintLatex1( x, y, angle, size, text1)) {
            if (saveps) gVirtualPS = saveps;
            return;
         }
         gPad->SetBatch(saveb);
      }
      gVirtualPS = 0;
   }

   if (!gPad->IsBatch()) PaintLatex1( x, y, angle, size, text1);
   if (saveps) gVirtualPS = saveps;
}


//______________________________________________________________________________
Int_t TLatex::PaintLatex1(Double_t x, Double_t y, Double_t angle, Double_t size, const Char_t *text1)
{
   // Drawing function

   TString newText = text1;
   if( newText.Length() == 0) return 0;
   newText.ReplaceAll("#hbox","#mbox");

   fError = 0 ;
   if (CheckLatexSyntax(newText)) {
      std::cout<<"\n*ERROR<TLatex>: "<<fError<<std::endl;
      std::cout<<"==> "<<text1<<std::endl;
      return 0;
   }
   fError = 0 ;

   // Do not use Latex if font is low precision.
   if (fTextFont%10 < 2) {
      if (gVirtualX) gVirtualX->SetTextAngle(angle);
      if (gVirtualPS) gVirtualPS->SetTextAngle(angle);
      gPad->PaintText(x,y,text1);
      return 1;
   }

   // Paint the text using TMathText if contains a "\"
   if (strstr(text1,"\\")) {
      TMathText tm;
      tm.SetTextAlign(GetTextAlign());
      tm.SetTextFont(GetTextFont());
      tm.PaintMathText(x, y, angle, size, text1);
      return 1;
   }

   Double_t saveSize = size;
   Int_t saveFont = fTextFont;
   if (fTextFont%10 > 2) {
      UInt_t w = TMath::Abs(gPad->XtoAbsPixel(gPad->GetX2()) -
                            gPad->XtoAbsPixel(gPad->GetX1()));
      UInt_t h = TMath::Abs(gPad->YtoAbsPixel(gPad->GetY2()) -
                            gPad->YtoAbsPixel(gPad->GetY1()));
      if (w < h)
         size = size/w;
      else
         size = size/h;
      SetTextFont(10*(saveFont/10) + 2);
   }

   Int_t length = newText.Length() ;
   const Char_t *text = newText.Data() ;

   fX=x;
   fY=y;
   x = gPad->XtoAbsPixel(x);
   y = gPad->YtoAbsPixel(y);
   fShow = kFALSE ;
   TLatexFormSize fs = FirstParse(angle,size,text);

   fOriginSize = size;

   // Get current line attributes.
   Short_t lineW = GetLineWidth();
   Int_t lineC = GetLineColor();
   if (size<0.04) SetLineWidth(1);

   TextSpec_t spec;
   spec.fAngle = angle;
   spec.fSize  = size;
   spec.fColor = GetTextColor();
   spec.fFont  = GetTextFont();
   Short_t halign = fTextAlign/10;
   Short_t valign = fTextAlign - 10*halign;
   TextSpec_t newSpec = spec;
   if (fError != 0) {
      std::cout<<"*ERROR<TLatex>: "<<fError<<std::endl;
      std::cout<<"==> "<<text<<std::endl;
   } else {
      fShow = kTRUE;
      newSpec.fSize = size;

      switch (valign) {
         case 0: y -= fs.Under() ; break;
         case 1: break;
         case 2: y += fs.Height()*0.5-fs.Under(); y++; break;
         case 3: y += fs.Over() ; break;
      }
      switch (halign) {
         case 2: x -= fs.Width()/2  ; break;
         case 3: x -= fs.Width()    ; break;
      }
      Analyse(x,y,newSpec,text,length);
   }

   SetTextSize(saveSize);
   SetTextAngle(angle);
   SetTextFont(saveFont);
   SetTextColor(spec.fColor);
   SetTextAlign(valign+10*halign);
   SetLineWidth(lineW);
   SetLineColor(lineC);
   delete[] fTabSize;
   if (fError != 0) return 0;
   return 1;
}


//______________________________________________________________________________
Int_t TLatex::CheckLatexSyntax(TString &text)
{
   // Check if the Latex syntax is correct

   const Char_t *kWord1[] = {"{}^{","{}_{","^{","_{","#scale{","#color{","#font{","#sqrt{","#[]{","#{}{","#||{",
                       "#bar{","#vec{","#dot{","#hat{","#ddot{","#acute{","#grave{","#check{","#tilde{","#slash{","#bf{","#it{","#mbox{",
                       "\\scale{","\\color{","\\font{","\\sqrt{","\\[]{","\\{}{","\\||{","#(){","\\(){",
                       "\\bar{","\\vec{","\\dot{","\\hat{","\\ddot{","\\acute{","\\grave{","\\check{","\\bf{","\\it{","\\mbox{"}; // check for }
   const Char_t *kWord2[] = {"#scale[","#color[","#font[","#sqrt[","#kern[","#lower[","\\scale[","\\color[","\\font[","\\sqrt[","\\kern[","\\lower["}; // check for ]{ + }
   const Char_t *kWord3[] = {"#frac{","\\frac{","#splitline{","\\splitline{"}; // check for }{ then }
   const Char_t *kLeft1[] = {"#left[","\\left[","#left{","\\left{","#left|","\\left|","#left(","\\left("};
   const Char_t *kLeft2[] = {"#[]{","#[]{","#{}{","#{}{","#||{","#||{","#(){","#(){"};
   const Char_t *kRight[] = {"#right]","\\right]","#right}","\\right}","#right|","\\right|","#right)","\\right)"};
   const Int_t lkWord1[]  = {4,4,2,2,7,7,6,6,4,4,4,5,5,5,5,6,7,7,7,7,7,4,4,6,7,7,6,6,4,4,4,4,4,5,5,5,5,6,7,7,7,4,4,6};
   const Int_t lkWord2[]  = {7,7,6,6,6,7,7,7,6,6,6,7} ;
   const Int_t lkWord3[]  = {6,6,11,11} ;
   Int_t nkWord1 = 44, nkWord2 = 12, nkWord3 = 4;
   Int_t i,k ;
   Int_t nLeft1 , nRight , nOfLeft, nOfRight;
   Int_t lLeft1 = 6 ;
   Int_t lLeft2 = 4 ;
   Int_t lRight = 7 ;
   nLeft1  = nRight   = 8 ;
   nOfLeft = nOfRight = 0 ;

   Char_t buf[11] ; for (i=0;i<11;i++) buf[i]=0;
   Bool_t opFound ;
   Int_t  opFrac = 0;
   Int_t length = text.Length() ;

   Int_t nOfCurlyBracket, nOfKW1, nOfKW2, nOfKW3, nOfSquareCurly, nOfCurlyCurly ;
   Int_t nOfExtraCurly = 0 , nOfExtraSquare = 0;
   Int_t nOfSquareBracket = 0 ;
   Int_t error = 0  ;
   Bool_t quote1 = kFALSE , quote2 = kFALSE;

   // first find and replace all occurences of "kLeft1" keyword by "kLeft2" keyword,
   // and all occurences of "kRight" keyword by "}".
   i = 0 ;
   while (i < length) {
      // The string in 'buf' does not need to be null terminated,
      // we will only check with strncmp.
      strncpy(buf,&text[i],TMath::Min(7,length-i));
      opFound = kFALSE ;
      for (k = 0 ; k < nLeft1 ; k++) {
         if (strncmp(buf,kLeft1[k],lLeft1)==0) {
            nOfLeft++ ;
            i+=lLeft1 ;
            opFound = kTRUE ;
            break ;
         }
      }
      if (opFound) continue ;

      for(k=0;k<nRight;k++) {
         if (strncmp(buf,kRight[k],lRight)==0) {
            nOfRight++ ;
            i+=lRight ;
            opFound = kTRUE ;
            break ;
         }
      }
      if (!opFound) i++ ;
   }
   if (nOfLeft != nOfRight) {
      printf(" nOfLeft = %d, nOfRight = %d\n",nOfLeft,nOfRight) ;
      error = 1 ;
      fError = "Operators \"#left\" and \"#right\" don't match !" ;
      goto ERROR_END ;
   }

   for (k = 0 ; k < nLeft1 ; k++) {
      text.ReplaceAll(kLeft1[k],lLeft1,kLeft2[k],lLeft2) ;
   }
   for (k = 0 ; k < nRight ; k++) {
      text.ReplaceAll(kRight[k],lRight,"}",1) ;
   }
   length = text.Length() ;

   i = nOfCurlyBracket = nOfKW1 = nOfKW2 = nOfKW3 = nOfSquareCurly = nOfCurlyCurly =0 ;
   while (i< length){
         switch (text[i]) {
            case '"' : quote1 = !quote1 ; break ;
            case '\'': quote2 = !quote2 ; break ;
         }
         // The string in 'buf' does not need to be null terminated,
         // we will only check with strncmp
         strncpy(buf,&text[i],TMath::Min(11,length-i));
         opFound = kFALSE ;

         for(k=0;k<nkWord1;k++) {
            if (strncmp(buf,kWord1[k],lkWord1[k])==0) {
               nOfKW1++ ;
               i+=lkWord1[k] ;
               opFound = kTRUE ;
               nOfCurlyBracket++ ;
               break ;
            }
         }
         if (opFound) continue ;

         for(k=0;k<nkWord2;k++) {
            if (strncmp(buf,kWord2[k],lkWord2[k])==0) {
               nOfKW2++ ;
               i+=lkWord2[k] ;
               opFound = kTRUE ;
               nOfSquareBracket++;
               break ;
            }
         }
         if (opFound) continue ;

         for(k=0;k<nkWord3;k++) {
            if (strncmp(buf,kWord3[k],lkWord3[k])==0) {
               nOfKW3++ ;
               i+=lkWord3[k] ;
               opFound = kTRUE ;
               opFrac++ ;
               nOfCurlyBracket++ ;
               break ;
            }
         }
         if (opFound) continue ;
         if (strncmp(buf,"}{",2) == 0 && opFrac) {
               opFrac-- ;
               nOfCurlyCurly++ ;
               i+= 2;
         }
         else if (strncmp(buf,"]{",2) == 0 && nOfSquareBracket) {
               nOfSquareCurly++ ;
               i+= 2 ;
               nOfCurlyBracket++ ;
               nOfSquareBracket-- ;
         }
         else if (strncmp(buf,"@{",2) == 0 || strncmp(buf,"@}",2) == 0) {
               i+= 2 ;
         }
         else if (strncmp(buf,"@[",2) == 0 || strncmp(buf,"@]",2) == 0) {
               i+= 2 ;
         }
         else if (text[i] == ']' ) {  // not belonging to a key word, add @ in front
               text.Insert(i,"@") ;
               length++ ;
               i+=2 ;
               nOfExtraSquare-- ;
         }
         else if (text[i] == '[' ) {  // not belonging to a key word, add @ in front
               text.Insert(i,"@") ;
               length++ ;
               i+=2 ;
               nOfExtraSquare++ ;
         }
         else if (text[i] == '{' ) {  // not belonging to a key word, add @ in front
               text.Insert(i,"@") ;
               length++ ;
               i+=2 ;
               nOfExtraCurly++ ;
         }
         else if (text[i] == '}' ) {
            if ( nOfCurlyBracket) {
               nOfCurlyBracket-- ;
               i++ ;
            } else  { // extra }, add @ in front
               text.Insert(i,"@") ;
               length++ ;
               i+=2 ;
               nOfExtraCurly-- ;
            }
         } else {
            i++ ;
            buf[1] = 0 ;
         }
   }

   if (nOfKW2 != nOfSquareCurly) {
      error = 1 ;
      fError = "Invalid number of \"]{\"" ;
   }
   else if (nOfKW3 != nOfCurlyCurly) {
      error = 1 ;
      fError = "Error in syntax of  \"#frac\"" ;
   }
   else if (nOfCurlyBracket  < 0) {
      error = 1 ;
      fError = "Missing \"{\"" ;
   }
   else if (nOfCurlyBracket  > 0) {
      error = 1 ;
      fError = "Missing \"}\"" ;
   }
   else if (nOfSquareBracket  < 0) {
      error  = 1 ;
      fError = "Missing \"[\"" ;
   }
   else if (nOfSquareBracket  > 0) {
      error = 1 ;
      fError = "Missing \"]\"" ;
   }

   ERROR_END:
   return error ;
}


//______________________________________________________________________________
TLatexFormSize TLatex::FirstParse(Double_t angle, Double_t size, const Char_t *text)
{
   // First parsing of the analyse sequence

   fError   = 0;
   fTabMax  = 100;
   fTabSize = new FormSize_t[fTabMax];
   // we assume less than 100 parts in one formula
   // we will reallocate if necessary.
   fPos        = 0;
   fShow       = kFALSE;
   fOriginSize = size;

   //get current line attributes
   Short_t lineW = GetLineWidth();
   Int_t lineC = GetLineColor();

   TextSpec_t spec;
   spec.fAngle = angle;
   if (fTextFont%10 == 3) {
      Double_t hw = TMath::Max((Double_t)gPad->XtoPixel(gPad->GetX2()),
                               (Double_t)gPad->YtoPixel(gPad->GetY1()));
      spec.fSize = size/hw;
   } else {
      spec.fSize  = size;
   }
   spec.fColor = GetTextColor();
   spec.fFont  = GetTextFont();
   Short_t halign = fTextAlign/10;
   Short_t valign = fTextAlign - 10*halign;

   TLatexFormSize fs = Anal1(spec,text,strlen(text));

   SetTextSize(size);
   SetTextAngle(angle);
   SetTextFont(spec.fFont);
   SetTextColor(spec.fColor);
   SetTextAlign(valign+10*halign);
   SetLineWidth(lineW);
   SetLineColor(lineC);
   return fs;
}


//______________________________________________________________________________
Double_t TLatex::GetHeight() const
{
   // Return height of current pad in pixels

   Double_t w = gPad->GetAbsWNDC()*Double_t(gPad->GetWw());
   Double_t h = gPad->GetAbsHNDC()*Double_t(gPad->GetWh());
   if (w < h)
      return w;
   else
      return h;
}


//______________________________________________________________________________
Double_t TLatex::GetXsize()
{
   // Return size of the formula along X in pad coordinates

   if (!gPad) return 0;
   TString newText = GetTitle();
   if( newText.Length() == 0) return 0;

   // The text is a TMathText.
   if ( newText.Contains("\\") ) {
      TMathText tm(0., 0., newText.Data());
      return tm.GetXsize();
   }

   fError = 0 ;
   if (CheckLatexSyntax(newText)) {
      std::cout<<"\n*ERROR<TLatex>: "<<fError<<std::endl;
      std::cout<<"==> "<<GetTitle()<<std::endl;
      return 0;
   }
   fError = 0 ;

   const Char_t *text = newText.Data() ;
   Double_t angle_old = GetTextAngle();
   TLatexFormSize fs = FirstParse(0,GetTextSize(),text);
   SetTextAngle(angle_old);
   delete[] fTabSize;
   return TMath::Abs(gPad->AbsPixeltoX(Int_t(fs.Width())) - gPad->AbsPixeltoX(0));
}


//______________________________________________________________________________
void TLatex::GetBoundingBox(UInt_t &w, UInt_t &h, Bool_t angle)
{
   // Return text size in pixels

   if (!gPad) return;
   TString newText = GetTitle();
   if( newText.Length() == 0) return;

   // The text is a TMathText.
   if ( newText.Contains("\\") ) {
      TMathText tm(0., 0., newText.Data());
      tm.GetBoundingBox(w, h);
      return;
   }

   fError = 0 ;
   if (CheckLatexSyntax(newText)) {
      std::cout<<"\n*ERROR<TLatex>: "<<fError<<std::endl;
      std::cout<<"==> "<<GetTitle()<<std::endl;
      return;
   }
   fError = 0 ;

   if (angle) {
      Int_t cBoxX[4], cBoxY[4];
      Int_t ptx, pty;
      if (TestBit(kTextNDC)) {
         ptx = gPad->UtoPixel(fX);
         pty = gPad->VtoPixel(fY);
      } else {
         ptx = gPad->XtoAbsPixel(gPad->XtoPad(fX));
         pty = gPad->YtoAbsPixel(gPad->YtoPad(fY));
      }
      GetControlBox(ptx, pty, fTextAngle, cBoxX, cBoxY);
      Int_t x1 = cBoxX[0];
      Int_t x2 = cBoxX[0];
      Int_t y1 = cBoxY[0];
      Int_t y2 = cBoxY[0];
      for (Int_t i=1; i<4; i++) {
         if (cBoxX[i] < x1) x1 = cBoxX[i];
         if (cBoxX[i] > x2) x2 = cBoxX[i];
         if (cBoxY[i] < y1) y1 = cBoxY[i];
         if (cBoxY[i] > y2) y2 = cBoxY[i];
      }
      w = x2-x1;
      h = y2-y1;
   } else {
      const Char_t *text = newText.Data() ;
      TLatexFormSize fs = FirstParse(GetTextAngle(),GetTextSize(),text);
      delete[] fTabSize;
      w = (UInt_t)fs.Width();
      h = (UInt_t)fs.Height();
   }
}


//______________________________________________________________________________
Double_t TLatex::GetYsize()
{
   // Return size of the formula along Y in pad coordinates

   if (!gPad) return 0;
   TString newText = GetTitle();
   if( newText.Length() == 0) return 0;

   // The text is a TMathText.
   if ( newText.Contains("\\") ) {
      TMathText tm(0., 0., newText.Data());
      return tm.GetYsize();
   }

   fError = 0 ;
   if (CheckLatexSyntax(newText)) {
      std::cout<<"\n*ERROR<TLatex>: "<<fError<<std::endl;
      std::cout<<"==> "<<GetTitle()<<std::endl;
      return 0;
   }
   fError = 0 ;

   const Char_t *text = newText.Data() ;
   TLatexFormSize fs = FirstParse(0,GetTextSize(),text);
   delete[] fTabSize;
   return TMath::Abs(gPad->AbsPixeltoY(Int_t(fs.Height())) - gPad->AbsPixeltoY(0));
}


//______________________________________________________________________________
TLatexFormSize TLatex::Readfs()
{
   // Read fs in fTabSize

   fPos--;
   TLatexFormSize result(fTabSize[fPos].fWidth,fTabSize[fPos].fOver,fTabSize[fPos].fUnder);
   return result;
}


//______________________________________________________________________________
void TLatex::Savefs(TLatexFormSize *fs)
{
   // Save fs values in array fTabSize

   fTabSize[fPos].fWidth  = fs->Width();
   fTabSize[fPos].fOver   = fs->Over();
   fTabSize[fPos].fUnder  = fs->Under();
   fPos++;
   if (fPos>=fTabMax) {
      // allocate more memory
      FormSize_t *temp = new FormSize_t[fTabMax+100];
      // copy array
      memcpy(temp,fTabSize,fTabMax*sizeof(FormSize_t));
      fTabMax += 100;
      // free previous array
      delete [] fTabSize;
      // swap pointers
      fTabSize = temp;
   }
}


//______________________________________________________________________________
void TLatex::SavePrimitive(std::ostream &out, Option_t * /*= ""*/)
{
   // Save primitive as a C++ statement(s) on output stream out

   char quote = '"';

   if (gROOT->ClassSaved(TLatex::Class())) {
      out<<"   ";
   } else {
      out<<"   TLatex *";
   }

   TString s = GetTitle();

   s.ReplaceAll("\\","\\\\");
   s.ReplaceAll("\"","\\\"");
   out<<"   tex = new TLatex("<<fX<<","<<fY<<","<<quote<<s.Data()<<quote<<");"<<std::endl;
   if (TestBit(kTextNDC)) out<<"tex->SetNDC();"<<std::endl;

   SaveTextAttributes(out,"tex",11,0,1,62,0.05);
   SaveLineAttributes(out,"tex",1,1,1);

   out<<"   tex->Draw();"<<std::endl;
}


//______________________________________________________________________________
void TLatex::SetIndiceSize(Double_t factorSize)
{
   // Set relative size of subscripts and superscripts

   fFactorSize = factorSize;
}


//______________________________________________________________________________
void TLatex::SetLimitIndiceSize(Int_t limitFactorSize)
{
   // Set limit for text resizing of subscipts and superscripts

   fLimitFactorSize = limitFactorSize;
}
 TLatex.cxx:1
 TLatex.cxx:2
 TLatex.cxx:3
 TLatex.cxx:4
 TLatex.cxx:5
 TLatex.cxx:6
 TLatex.cxx:7
 TLatex.cxx:8
 TLatex.cxx:9
 TLatex.cxx:10
 TLatex.cxx:11
 TLatex.cxx:12
 TLatex.cxx:13
 TLatex.cxx:14
 TLatex.cxx:15
 TLatex.cxx:16
 TLatex.cxx:17
 TLatex.cxx:18
 TLatex.cxx:19
 TLatex.cxx:20
 TLatex.cxx:21
 TLatex.cxx:22
 TLatex.cxx:23
 TLatex.cxx:24
 TLatex.cxx:25
 TLatex.cxx:26
 TLatex.cxx:27
 TLatex.cxx:28
 TLatex.cxx:29
 TLatex.cxx:30
 TLatex.cxx:31
 TLatex.cxx:32
 TLatex.cxx:33
 TLatex.cxx:34
 TLatex.cxx:35
 TLatex.cxx:36
 TLatex.cxx:37
 TLatex.cxx:38
 TLatex.cxx:39
 TLatex.cxx:40
 TLatex.cxx:41
 TLatex.cxx:42
 TLatex.cxx:43
 TLatex.cxx:44
 TLatex.cxx:45
 TLatex.cxx:46
 TLatex.cxx:47
 TLatex.cxx:48
 TLatex.cxx:49
 TLatex.cxx:50
 TLatex.cxx:51
 TLatex.cxx:52
 TLatex.cxx:53
 TLatex.cxx:54
 TLatex.cxx:55
 TLatex.cxx:56
 TLatex.cxx:57
 TLatex.cxx:58
 TLatex.cxx:59
 TLatex.cxx:60
 TLatex.cxx:61
 TLatex.cxx:62
 TLatex.cxx:63
 TLatex.cxx:64
 TLatex.cxx:65
 TLatex.cxx:66
 TLatex.cxx:67
 TLatex.cxx:68
 TLatex.cxx:69
 TLatex.cxx:70
 TLatex.cxx:71
 TLatex.cxx:72
 TLatex.cxx:73
 TLatex.cxx:74
 TLatex.cxx:75
 TLatex.cxx:76
 TLatex.cxx:77
 TLatex.cxx:78
 TLatex.cxx:79
 TLatex.cxx:80
 TLatex.cxx:81
 TLatex.cxx:82
 TLatex.cxx:83
 TLatex.cxx:84
 TLatex.cxx:85
 TLatex.cxx:86
 TLatex.cxx:87
 TLatex.cxx:88
 TLatex.cxx:89
 TLatex.cxx:90
 TLatex.cxx:91
 TLatex.cxx:92
 TLatex.cxx:93
 TLatex.cxx:94
 TLatex.cxx:95
 TLatex.cxx:96
 TLatex.cxx:97
 TLatex.cxx:98
 TLatex.cxx:99
 TLatex.cxx:100
 TLatex.cxx:101
 TLatex.cxx:102
 TLatex.cxx:103
 TLatex.cxx:104
 TLatex.cxx:105
 TLatex.cxx:106
 TLatex.cxx:107
 TLatex.cxx:108
 TLatex.cxx:109
 TLatex.cxx:110
 TLatex.cxx:111
 TLatex.cxx:112
 TLatex.cxx:113
 TLatex.cxx:114
 TLatex.cxx:115
 TLatex.cxx:116
 TLatex.cxx:117
 TLatex.cxx:118
 TLatex.cxx:119
 TLatex.cxx:120
 TLatex.cxx:121
 TLatex.cxx:122
 TLatex.cxx:123
 TLatex.cxx:124
 TLatex.cxx:125
 TLatex.cxx:126
 TLatex.cxx:127
 TLatex.cxx:128
 TLatex.cxx:129
 TLatex.cxx:130
 TLatex.cxx:131
 TLatex.cxx:132
 TLatex.cxx:133
 TLatex.cxx:134
 TLatex.cxx:135
 TLatex.cxx:136
 TLatex.cxx:137
 TLatex.cxx:138
 TLatex.cxx:139
 TLatex.cxx:140
 TLatex.cxx:141
 TLatex.cxx:142
 TLatex.cxx:143
 TLatex.cxx:144
 TLatex.cxx:145
 TLatex.cxx:146
 TLatex.cxx:147
 TLatex.cxx:148
 TLatex.cxx:149
 TLatex.cxx:150
 TLatex.cxx:151
 TLatex.cxx:152
 TLatex.cxx:153
 TLatex.cxx:154
 TLatex.cxx:155
 TLatex.cxx:156
 TLatex.cxx:157
 TLatex.cxx:158
 TLatex.cxx:159
 TLatex.cxx:160
 TLatex.cxx:161
 TLatex.cxx:162
 TLatex.cxx:163
 TLatex.cxx:164
 TLatex.cxx:165
 TLatex.cxx:166
 TLatex.cxx:167
 TLatex.cxx:168
 TLatex.cxx:169
 TLatex.cxx:170
 TLatex.cxx:171
 TLatex.cxx:172
 TLatex.cxx:173
 TLatex.cxx:174
 TLatex.cxx:175
 TLatex.cxx:176
 TLatex.cxx:177
 TLatex.cxx:178
 TLatex.cxx:179
 TLatex.cxx:180
 TLatex.cxx:181
 TLatex.cxx:182
 TLatex.cxx:183
 TLatex.cxx:184
 TLatex.cxx:185
 TLatex.cxx:186
 TLatex.cxx:187
 TLatex.cxx:188
 TLatex.cxx:189
 TLatex.cxx:190
 TLatex.cxx:191
 TLatex.cxx:192
 TLatex.cxx:193
 TLatex.cxx:194
 TLatex.cxx:195
 TLatex.cxx:196
 TLatex.cxx:197
 TLatex.cxx:198
 TLatex.cxx:199
 TLatex.cxx:200
 TLatex.cxx:201
 TLatex.cxx:202
 TLatex.cxx:203
 TLatex.cxx:204
 TLatex.cxx:205
 TLatex.cxx:206
 TLatex.cxx:207
 TLatex.cxx:208
 TLatex.cxx:209
 TLatex.cxx:210
 TLatex.cxx:211
 TLatex.cxx:212
 TLatex.cxx:213
 TLatex.cxx:214
 TLatex.cxx:215
 TLatex.cxx:216
 TLatex.cxx:217
 TLatex.cxx:218
 TLatex.cxx:219
 TLatex.cxx:220
 TLatex.cxx:221
 TLatex.cxx:222
 TLatex.cxx:223
 TLatex.cxx:224
 TLatex.cxx:225
 TLatex.cxx:226
 TLatex.cxx:227
 TLatex.cxx:228
 TLatex.cxx:229
 TLatex.cxx:230
 TLatex.cxx:231
 TLatex.cxx:232
 TLatex.cxx:233
 TLatex.cxx:234
 TLatex.cxx:235
 TLatex.cxx:236
 TLatex.cxx:237
 TLatex.cxx:238
 TLatex.cxx:239
 TLatex.cxx:240
 TLatex.cxx:241
 TLatex.cxx:242
 TLatex.cxx:243
 TLatex.cxx:244
 TLatex.cxx:245
 TLatex.cxx:246
 TLatex.cxx:247
 TLatex.cxx:248
 TLatex.cxx:249
 TLatex.cxx:250
 TLatex.cxx:251
 TLatex.cxx:252
 TLatex.cxx:253
 TLatex.cxx:254
 TLatex.cxx:255
 TLatex.cxx:256
 TLatex.cxx:257
 TLatex.cxx:258
 TLatex.cxx:259
 TLatex.cxx:260
 TLatex.cxx:261
 TLatex.cxx:262
 TLatex.cxx:263
 TLatex.cxx:264
 TLatex.cxx:265
 TLatex.cxx:266
 TLatex.cxx:267
 TLatex.cxx:268
 TLatex.cxx:269
 TLatex.cxx:270
 TLatex.cxx:271
 TLatex.cxx:272
 TLatex.cxx:273
 TLatex.cxx:274
 TLatex.cxx:275
 TLatex.cxx:276
 TLatex.cxx:277
 TLatex.cxx:278
 TLatex.cxx:279
 TLatex.cxx:280
 TLatex.cxx:281
 TLatex.cxx:282
 TLatex.cxx:283
 TLatex.cxx:284
 TLatex.cxx:285
 TLatex.cxx:286
 TLatex.cxx:287
 TLatex.cxx:288
 TLatex.cxx:289
 TLatex.cxx:290
 TLatex.cxx:291
 TLatex.cxx:292
 TLatex.cxx:293
 TLatex.cxx:294
 TLatex.cxx:295
 TLatex.cxx:296
 TLatex.cxx:297
 TLatex.cxx:298
 TLatex.cxx:299
 TLatex.cxx:300
 TLatex.cxx:301
 TLatex.cxx:302
 TLatex.cxx:303
 TLatex.cxx:304
 TLatex.cxx:305
 TLatex.cxx:306
 TLatex.cxx:307
 TLatex.cxx:308
 TLatex.cxx:309
 TLatex.cxx:310
 TLatex.cxx:311
 TLatex.cxx:312
 TLatex.cxx:313
 TLatex.cxx:314
 TLatex.cxx:315
 TLatex.cxx:316
 TLatex.cxx:317
 TLatex.cxx:318
 TLatex.cxx:319
 TLatex.cxx:320
 TLatex.cxx:321
 TLatex.cxx:322
 TLatex.cxx:323
 TLatex.cxx:324
 TLatex.cxx:325
 TLatex.cxx:326
 TLatex.cxx:327
 TLatex.cxx:328
 TLatex.cxx:329
 TLatex.cxx:330
 TLatex.cxx:331
 TLatex.cxx:332
 TLatex.cxx:333
 TLatex.cxx:334
 TLatex.cxx:335
 TLatex.cxx:336
 TLatex.cxx:337
 TLatex.cxx:338
 TLatex.cxx:339
 TLatex.cxx:340
 TLatex.cxx:341
 TLatex.cxx:342
 TLatex.cxx:343
 TLatex.cxx:344
 TLatex.cxx:345
 TLatex.cxx:346
 TLatex.cxx:347
 TLatex.cxx:348
 TLatex.cxx:349
 TLatex.cxx:350
 TLatex.cxx:351
 TLatex.cxx:352
 TLatex.cxx:353
 TLatex.cxx:354
 TLatex.cxx:355
 TLatex.cxx:356
 TLatex.cxx:357
 TLatex.cxx:358
 TLatex.cxx:359
 TLatex.cxx:360
 TLatex.cxx:361
 TLatex.cxx:362
 TLatex.cxx:363
 TLatex.cxx:364
 TLatex.cxx:365
 TLatex.cxx:366
 TLatex.cxx:367
 TLatex.cxx:368
 TLatex.cxx:369
 TLatex.cxx:370
 TLatex.cxx:371
 TLatex.cxx:372
 TLatex.cxx:373
 TLatex.cxx:374
 TLatex.cxx:375
 TLatex.cxx:376
 TLatex.cxx:377
 TLatex.cxx:378
 TLatex.cxx:379
 TLatex.cxx:380
 TLatex.cxx:381
 TLatex.cxx:382
 TLatex.cxx:383
 TLatex.cxx:384
 TLatex.cxx:385
 TLatex.cxx:386
 TLatex.cxx:387
 TLatex.cxx:388
 TLatex.cxx:389
 TLatex.cxx:390
 TLatex.cxx:391
 TLatex.cxx:392
 TLatex.cxx:393
 TLatex.cxx:394
 TLatex.cxx:395
 TLatex.cxx:396
 TLatex.cxx:397
 TLatex.cxx:398
 TLatex.cxx:399
 TLatex.cxx:400
 TLatex.cxx:401
 TLatex.cxx:402
 TLatex.cxx:403
 TLatex.cxx:404
 TLatex.cxx:405
 TLatex.cxx:406
 TLatex.cxx:407
 TLatex.cxx:408
 TLatex.cxx:409
 TLatex.cxx:410
 TLatex.cxx:411
 TLatex.cxx:412
 TLatex.cxx:413
 TLatex.cxx:414
 TLatex.cxx:415
 TLatex.cxx:416
 TLatex.cxx:417
 TLatex.cxx:418
 TLatex.cxx:419
 TLatex.cxx:420
 TLatex.cxx:421
 TLatex.cxx:422
 TLatex.cxx:423
 TLatex.cxx:424
 TLatex.cxx:425
 TLatex.cxx:426
 TLatex.cxx:427
 TLatex.cxx:428
 TLatex.cxx:429
 TLatex.cxx:430
 TLatex.cxx:431
 TLatex.cxx:432
 TLatex.cxx:433
 TLatex.cxx:434
 TLatex.cxx:435
 TLatex.cxx:436
 TLatex.cxx:437
 TLatex.cxx:438
 TLatex.cxx:439
 TLatex.cxx:440
 TLatex.cxx:441
 TLatex.cxx:442
 TLatex.cxx:443
 TLatex.cxx:444
 TLatex.cxx:445
 TLatex.cxx:446
 TLatex.cxx:447
 TLatex.cxx:448
 TLatex.cxx:449
 TLatex.cxx:450
 TLatex.cxx:451
 TLatex.cxx:452
 TLatex.cxx:453
 TLatex.cxx:454
 TLatex.cxx:455
 TLatex.cxx:456
 TLatex.cxx:457
 TLatex.cxx:458
 TLatex.cxx:459
 TLatex.cxx:460
 TLatex.cxx:461
 TLatex.cxx:462
 TLatex.cxx:463
 TLatex.cxx:464
 TLatex.cxx:465
 TLatex.cxx:466
 TLatex.cxx:467
 TLatex.cxx:468
 TLatex.cxx:469
 TLatex.cxx:470
 TLatex.cxx:471
 TLatex.cxx:472
 TLatex.cxx:473
 TLatex.cxx:474
 TLatex.cxx:475
 TLatex.cxx:476
 TLatex.cxx:477
 TLatex.cxx:478
 TLatex.cxx:479
 TLatex.cxx:480
 TLatex.cxx:481
 TLatex.cxx:482
 TLatex.cxx:483
 TLatex.cxx:484
 TLatex.cxx:485
 TLatex.cxx:486
 TLatex.cxx:487
 TLatex.cxx:488
 TLatex.cxx:489
 TLatex.cxx:490
 TLatex.cxx:491
 TLatex.cxx:492
 TLatex.cxx:493
 TLatex.cxx:494
 TLatex.cxx:495
 TLatex.cxx:496
 TLatex.cxx:497
 TLatex.cxx:498
 TLatex.cxx:499
 TLatex.cxx:500
 TLatex.cxx:501
 TLatex.cxx:502
 TLatex.cxx:503
 TLatex.cxx:504
 TLatex.cxx:505
 TLatex.cxx:506
 TLatex.cxx:507
 TLatex.cxx:508
 TLatex.cxx:509
 TLatex.cxx:510
 TLatex.cxx:511
 TLatex.cxx:512
 TLatex.cxx:513
 TLatex.cxx:514
 TLatex.cxx:515
 TLatex.cxx:516
 TLatex.cxx:517
 TLatex.cxx:518
 TLatex.cxx:519
 TLatex.cxx:520
 TLatex.cxx:521
 TLatex.cxx:522
 TLatex.cxx:523
 TLatex.cxx:524
 TLatex.cxx:525
 TLatex.cxx:526
 TLatex.cxx:527
 TLatex.cxx:528
 TLatex.cxx:529
 TLatex.cxx:530
 TLatex.cxx:531
 TLatex.cxx:532
 TLatex.cxx:533
 TLatex.cxx:534
 TLatex.cxx:535
 TLatex.cxx:536
 TLatex.cxx:537
 TLatex.cxx:538
 TLatex.cxx:539
 TLatex.cxx:540
 TLatex.cxx:541
 TLatex.cxx:542
 TLatex.cxx:543
 TLatex.cxx:544
 TLatex.cxx:545
 TLatex.cxx:546
 TLatex.cxx:547
 TLatex.cxx:548
 TLatex.cxx:549
 TLatex.cxx:550
 TLatex.cxx:551
 TLatex.cxx:552
 TLatex.cxx:553
 TLatex.cxx:554
 TLatex.cxx:555
 TLatex.cxx:556
 TLatex.cxx:557
 TLatex.cxx:558
 TLatex.cxx:559
 TLatex.cxx:560
 TLatex.cxx:561
 TLatex.cxx:562
 TLatex.cxx:563
 TLatex.cxx:564
 TLatex.cxx:565
 TLatex.cxx:566
 TLatex.cxx:567
 TLatex.cxx:568
 TLatex.cxx:569
 TLatex.cxx:570
 TLatex.cxx:571
 TLatex.cxx:572
 TLatex.cxx:573
 TLatex.cxx:574
 TLatex.cxx:575
 TLatex.cxx:576
 TLatex.cxx:577
 TLatex.cxx:578
 TLatex.cxx:579
 TLatex.cxx:580
 TLatex.cxx:581
 TLatex.cxx:582
 TLatex.cxx:583
 TLatex.cxx:584
 TLatex.cxx:585
 TLatex.cxx:586
 TLatex.cxx:587
 TLatex.cxx:588
 TLatex.cxx:589
 TLatex.cxx:590
 TLatex.cxx:591
 TLatex.cxx:592
 TLatex.cxx:593
 TLatex.cxx:594
 TLatex.cxx:595
 TLatex.cxx:596
 TLatex.cxx:597
 TLatex.cxx:598
 TLatex.cxx:599
 TLatex.cxx:600
 TLatex.cxx:601
 TLatex.cxx:602
 TLatex.cxx:603
 TLatex.cxx:604
 TLatex.cxx:605
 TLatex.cxx:606
 TLatex.cxx:607
 TLatex.cxx:608
 TLatex.cxx:609
 TLatex.cxx:610
 TLatex.cxx:611
 TLatex.cxx:612
 TLatex.cxx:613
 TLatex.cxx:614
 TLatex.cxx:615
 TLatex.cxx:616
 TLatex.cxx:617
 TLatex.cxx:618
 TLatex.cxx:619
 TLatex.cxx:620
 TLatex.cxx:621
 TLatex.cxx:622
 TLatex.cxx:623
 TLatex.cxx:624
 TLatex.cxx:625
 TLatex.cxx:626
 TLatex.cxx:627
 TLatex.cxx:628
 TLatex.cxx:629
 TLatex.cxx:630
 TLatex.cxx:631
 TLatex.cxx:632
 TLatex.cxx:633
 TLatex.cxx:634
 TLatex.cxx:635
 TLatex.cxx:636
 TLatex.cxx:637
 TLatex.cxx:638
 TLatex.cxx:639
 TLatex.cxx:640
 TLatex.cxx:641
 TLatex.cxx:642
 TLatex.cxx:643
 TLatex.cxx:644
 TLatex.cxx:645
 TLatex.cxx:646
 TLatex.cxx:647
 TLatex.cxx:648
 TLatex.cxx:649
 TLatex.cxx:650
 TLatex.cxx:651
 TLatex.cxx:652
 TLatex.cxx:653
 TLatex.cxx:654
 TLatex.cxx:655
 TLatex.cxx:656
 TLatex.cxx:657
 TLatex.cxx:658
 TLatex.cxx:659
 TLatex.cxx:660
 TLatex.cxx:661
 TLatex.cxx:662
 TLatex.cxx:663
 TLatex.cxx:664
 TLatex.cxx:665
 TLatex.cxx:666
 TLatex.cxx:667
 TLatex.cxx:668
 TLatex.cxx:669
 TLatex.cxx:670
 TLatex.cxx:671
 TLatex.cxx:672
 TLatex.cxx:673
 TLatex.cxx:674
 TLatex.cxx:675
 TLatex.cxx:676
 TLatex.cxx:677
 TLatex.cxx:678
 TLatex.cxx:679
 TLatex.cxx:680
 TLatex.cxx:681
 TLatex.cxx:682
 TLatex.cxx:683
 TLatex.cxx:684
 TLatex.cxx:685
 TLatex.cxx:686
 TLatex.cxx:687
 TLatex.cxx:688
 TLatex.cxx:689
 TLatex.cxx:690
 TLatex.cxx:691
 TLatex.cxx:692
 TLatex.cxx:693
 TLatex.cxx:694
 TLatex.cxx:695
 TLatex.cxx:696
 TLatex.cxx:697
 TLatex.cxx:698
 TLatex.cxx:699
 TLatex.cxx:700
 TLatex.cxx:701
 TLatex.cxx:702
 TLatex.cxx:703
 TLatex.cxx:704
 TLatex.cxx:705
 TLatex.cxx:706
 TLatex.cxx:707
 TLatex.cxx:708
 TLatex.cxx:709
 TLatex.cxx:710
 TLatex.cxx:711
 TLatex.cxx:712
 TLatex.cxx:713
 TLatex.cxx:714
 TLatex.cxx:715
 TLatex.cxx:716
 TLatex.cxx:717
 TLatex.cxx:718
 TLatex.cxx:719
 TLatex.cxx:720
 TLatex.cxx:721
 TLatex.cxx:722
 TLatex.cxx:723
 TLatex.cxx:724
 TLatex.cxx:725
 TLatex.cxx:726
 TLatex.cxx:727
 TLatex.cxx:728
 TLatex.cxx:729
 TLatex.cxx:730
 TLatex.cxx:731
 TLatex.cxx:732
 TLatex.cxx:733
 TLatex.cxx:734
 TLatex.cxx:735
 TLatex.cxx:736
 TLatex.cxx:737
 TLatex.cxx:738
 TLatex.cxx:739
 TLatex.cxx:740
 TLatex.cxx:741
 TLatex.cxx:742
 TLatex.cxx:743
 TLatex.cxx:744
 TLatex.cxx:745
 TLatex.cxx:746
 TLatex.cxx:747
 TLatex.cxx:748
 TLatex.cxx:749
 TLatex.cxx:750
 TLatex.cxx:751
 TLatex.cxx:752
 TLatex.cxx:753
 TLatex.cxx:754
 TLatex.cxx:755
 TLatex.cxx:756
 TLatex.cxx:757
 TLatex.cxx:758
 TLatex.cxx:759
 TLatex.cxx:760
 TLatex.cxx:761
 TLatex.cxx:762
 TLatex.cxx:763
 TLatex.cxx:764
 TLatex.cxx:765
 TLatex.cxx:766
 TLatex.cxx:767
 TLatex.cxx:768
 TLatex.cxx:769
 TLatex.cxx:770
 TLatex.cxx:771
 TLatex.cxx:772
 TLatex.cxx:773
 TLatex.cxx:774
 TLatex.cxx:775
 TLatex.cxx:776
 TLatex.cxx:777
 TLatex.cxx:778
 TLatex.cxx:779
 TLatex.cxx:780
 TLatex.cxx:781
 TLatex.cxx:782
 TLatex.cxx:783
 TLatex.cxx:784
 TLatex.cxx:785
 TLatex.cxx:786
 TLatex.cxx:787
 TLatex.cxx:788
 TLatex.cxx:789
 TLatex.cxx:790
 TLatex.cxx:791
 TLatex.cxx:792
 TLatex.cxx:793
 TLatex.cxx:794
 TLatex.cxx:795
 TLatex.cxx:796
 TLatex.cxx:797
 TLatex.cxx:798
 TLatex.cxx:799
 TLatex.cxx:800
 TLatex.cxx:801
 TLatex.cxx:802
 TLatex.cxx:803
 TLatex.cxx:804
 TLatex.cxx:805
 TLatex.cxx:806
 TLatex.cxx:807
 TLatex.cxx:808
 TLatex.cxx:809
 TLatex.cxx:810
 TLatex.cxx:811
 TLatex.cxx:812
 TLatex.cxx:813
 TLatex.cxx:814
 TLatex.cxx:815
 TLatex.cxx:816
 TLatex.cxx:817
 TLatex.cxx:818
 TLatex.cxx:819
 TLatex.cxx:820
 TLatex.cxx:821
 TLatex.cxx:822
 TLatex.cxx:823
 TLatex.cxx:824
 TLatex.cxx:825
 TLatex.cxx:826
 TLatex.cxx:827
 TLatex.cxx:828
 TLatex.cxx:829
 TLatex.cxx:830
 TLatex.cxx:831
 TLatex.cxx:832
 TLatex.cxx:833
 TLatex.cxx:834
 TLatex.cxx:835
 TLatex.cxx:836
 TLatex.cxx:837
 TLatex.cxx:838
 TLatex.cxx:839
 TLatex.cxx:840
 TLatex.cxx:841
 TLatex.cxx:842
 TLatex.cxx:843
 TLatex.cxx:844
 TLatex.cxx:845
 TLatex.cxx:846
 TLatex.cxx:847
 TLatex.cxx:848
 TLatex.cxx:849
 TLatex.cxx:850
 TLatex.cxx:851
 TLatex.cxx:852
 TLatex.cxx:853
 TLatex.cxx:854
 TLatex.cxx:855
 TLatex.cxx:856
 TLatex.cxx:857
 TLatex.cxx:858
 TLatex.cxx:859
 TLatex.cxx:860
 TLatex.cxx:861
 TLatex.cxx:862
 TLatex.cxx:863
 TLatex.cxx:864
 TLatex.cxx:865
 TLatex.cxx:866
 TLatex.cxx:867
 TLatex.cxx:868
 TLatex.cxx:869
 TLatex.cxx:870
 TLatex.cxx:871
 TLatex.cxx:872
 TLatex.cxx:873
 TLatex.cxx:874
 TLatex.cxx:875
 TLatex.cxx:876
 TLatex.cxx:877
 TLatex.cxx:878
 TLatex.cxx:879
 TLatex.cxx:880
 TLatex.cxx:881
 TLatex.cxx:882
 TLatex.cxx:883
 TLatex.cxx:884
 TLatex.cxx:885
 TLatex.cxx:886
 TLatex.cxx:887
 TLatex.cxx:888
 TLatex.cxx:889
 TLatex.cxx:890
 TLatex.cxx:891
 TLatex.cxx:892
 TLatex.cxx:893
 TLatex.cxx:894
 TLatex.cxx:895
 TLatex.cxx:896
 TLatex.cxx:897
 TLatex.cxx:898
 TLatex.cxx:899
 TLatex.cxx:900
 TLatex.cxx:901
 TLatex.cxx:902
 TLatex.cxx:903
 TLatex.cxx:904
 TLatex.cxx:905
 TLatex.cxx:906
 TLatex.cxx:907
 TLatex.cxx:908
 TLatex.cxx:909
 TLatex.cxx:910
 TLatex.cxx:911
 TLatex.cxx:912
 TLatex.cxx:913
 TLatex.cxx:914
 TLatex.cxx:915
 TLatex.cxx:916
 TLatex.cxx:917
 TLatex.cxx:918
 TLatex.cxx:919
 TLatex.cxx:920
 TLatex.cxx:921
 TLatex.cxx:922
 TLatex.cxx:923
 TLatex.cxx:924
 TLatex.cxx:925
 TLatex.cxx:926
 TLatex.cxx:927
 TLatex.cxx:928
 TLatex.cxx:929
 TLatex.cxx:930
 TLatex.cxx:931
 TLatex.cxx:932
 TLatex.cxx:933
 TLatex.cxx:934
 TLatex.cxx:935
 TLatex.cxx:936
 TLatex.cxx:937
 TLatex.cxx:938
 TLatex.cxx:939
 TLatex.cxx:940
 TLatex.cxx:941
 TLatex.cxx:942
 TLatex.cxx:943
 TLatex.cxx:944
 TLatex.cxx:945
 TLatex.cxx:946
 TLatex.cxx:947
 TLatex.cxx:948
 TLatex.cxx:949
 TLatex.cxx:950
 TLatex.cxx:951
 TLatex.cxx:952
 TLatex.cxx:953
 TLatex.cxx:954
 TLatex.cxx:955
 TLatex.cxx:956
 TLatex.cxx:957
 TLatex.cxx:958
 TLatex.cxx:959
 TLatex.cxx:960
 TLatex.cxx:961
 TLatex.cxx:962
 TLatex.cxx:963
 TLatex.cxx:964
 TLatex.cxx:965
 TLatex.cxx:966
 TLatex.cxx:967
 TLatex.cxx:968
 TLatex.cxx:969
 TLatex.cxx:970
 TLatex.cxx:971
 TLatex.cxx:972
 TLatex.cxx:973
 TLatex.cxx:974
 TLatex.cxx:975
 TLatex.cxx:976
 TLatex.cxx:977
 TLatex.cxx:978
 TLatex.cxx:979
 TLatex.cxx:980
 TLatex.cxx:981
 TLatex.cxx:982
 TLatex.cxx:983
 TLatex.cxx:984
 TLatex.cxx:985
 TLatex.cxx:986
 TLatex.cxx:987
 TLatex.cxx:988
 TLatex.cxx:989
 TLatex.cxx:990
 TLatex.cxx:991
 TLatex.cxx:992
 TLatex.cxx:993
 TLatex.cxx:994
 TLatex.cxx:995
 TLatex.cxx:996
 TLatex.cxx:997
 TLatex.cxx:998
 TLatex.cxx:999
 TLatex.cxx:1000
 TLatex.cxx:1001
 TLatex.cxx:1002
 TLatex.cxx:1003
 TLatex.cxx:1004
 TLatex.cxx:1005
 TLatex.cxx:1006
 TLatex.cxx:1007
 TLatex.cxx:1008
 TLatex.cxx:1009
 TLatex.cxx:1010
 TLatex.cxx:1011
 TLatex.cxx:1012
 TLatex.cxx:1013
 TLatex.cxx:1014
 TLatex.cxx:1015
 TLatex.cxx:1016
 TLatex.cxx:1017
 TLatex.cxx:1018
 TLatex.cxx:1019
 TLatex.cxx:1020
 TLatex.cxx:1021
 TLatex.cxx:1022
 TLatex.cxx:1023
 TLatex.cxx:1024
 TLatex.cxx:1025
 TLatex.cxx:1026
 TLatex.cxx:1027
 TLatex.cxx:1028
 TLatex.cxx:1029
 TLatex.cxx:1030
 TLatex.cxx:1031
 TLatex.cxx:1032
 TLatex.cxx:1033
 TLatex.cxx:1034
 TLatex.cxx:1035
 TLatex.cxx:1036
 TLatex.cxx:1037
 TLatex.cxx:1038
 TLatex.cxx:1039
 TLatex.cxx:1040
 TLatex.cxx:1041
 TLatex.cxx:1042
 TLatex.cxx:1043
 TLatex.cxx:1044
 TLatex.cxx:1045
 TLatex.cxx:1046
 TLatex.cxx:1047
 TLatex.cxx:1048
 TLatex.cxx:1049
 TLatex.cxx:1050
 TLatex.cxx:1051
 TLatex.cxx:1052
 TLatex.cxx:1053
 TLatex.cxx:1054
 TLatex.cxx:1055
 TLatex.cxx:1056
 TLatex.cxx:1057
 TLatex.cxx:1058
 TLatex.cxx:1059
 TLatex.cxx:1060
 TLatex.cxx:1061
 TLatex.cxx:1062
 TLatex.cxx:1063
 TLatex.cxx:1064
 TLatex.cxx:1065
 TLatex.cxx:1066
 TLatex.cxx:1067
 TLatex.cxx:1068
 TLatex.cxx:1069
 TLatex.cxx:1070
 TLatex.cxx:1071
 TLatex.cxx:1072
 TLatex.cxx:1073
 TLatex.cxx:1074
 TLatex.cxx:1075
 TLatex.cxx:1076
 TLatex.cxx:1077
 TLatex.cxx:1078
 TLatex.cxx:1079
 TLatex.cxx:1080
 TLatex.cxx:1081
 TLatex.cxx:1082
 TLatex.cxx:1083
 TLatex.cxx:1084
 TLatex.cxx:1085
 TLatex.cxx:1086
 TLatex.cxx:1087
 TLatex.cxx:1088
 TLatex.cxx:1089
 TLatex.cxx:1090
 TLatex.cxx:1091
 TLatex.cxx:1092
 TLatex.cxx:1093
 TLatex.cxx:1094
 TLatex.cxx:1095
 TLatex.cxx:1096
 TLatex.cxx:1097
 TLatex.cxx:1098
 TLatex.cxx:1099
 TLatex.cxx:1100
 TLatex.cxx:1101
 TLatex.cxx:1102
 TLatex.cxx:1103
 TLatex.cxx:1104
 TLatex.cxx:1105
 TLatex.cxx:1106
 TLatex.cxx:1107
 TLatex.cxx:1108
 TLatex.cxx:1109
 TLatex.cxx:1110
 TLatex.cxx:1111
 TLatex.cxx:1112
 TLatex.cxx:1113
 TLatex.cxx:1114
 TLatex.cxx:1115
 TLatex.cxx:1116
 TLatex.cxx:1117
 TLatex.cxx:1118
 TLatex.cxx:1119
 TLatex.cxx:1120
 TLatex.cxx:1121
 TLatex.cxx:1122
 TLatex.cxx:1123
 TLatex.cxx:1124
 TLatex.cxx:1125
 TLatex.cxx:1126
 TLatex.cxx:1127
 TLatex.cxx:1128
 TLatex.cxx:1129
 TLatex.cxx:1130
 TLatex.cxx:1131
 TLatex.cxx:1132
 TLatex.cxx:1133
 TLatex.cxx:1134
 TLatex.cxx:1135
 TLatex.cxx:1136
 TLatex.cxx:1137
 TLatex.cxx:1138
 TLatex.cxx:1139
 TLatex.cxx:1140
 TLatex.cxx:1141
 TLatex.cxx:1142
 TLatex.cxx:1143
 TLatex.cxx:1144
 TLatex.cxx:1145
 TLatex.cxx:1146
 TLatex.cxx:1147
 TLatex.cxx:1148
 TLatex.cxx:1149
 TLatex.cxx:1150
 TLatex.cxx:1151
 TLatex.cxx:1152
 TLatex.cxx:1153
 TLatex.cxx:1154
 TLatex.cxx:1155
 TLatex.cxx:1156
 TLatex.cxx:1157
 TLatex.cxx:1158
 TLatex.cxx:1159
 TLatex.cxx:1160
 TLatex.cxx:1161
 TLatex.cxx:1162
 TLatex.cxx:1163
 TLatex.cxx:1164
 TLatex.cxx:1165
 TLatex.cxx:1166
 TLatex.cxx:1167
 TLatex.cxx:1168
 TLatex.cxx:1169
 TLatex.cxx:1170
 TLatex.cxx:1171
 TLatex.cxx:1172
 TLatex.cxx:1173
 TLatex.cxx:1174
 TLatex.cxx:1175
 TLatex.cxx:1176
 TLatex.cxx:1177
 TLatex.cxx:1178
 TLatex.cxx:1179
 TLatex.cxx:1180
 TLatex.cxx:1181
 TLatex.cxx:1182
 TLatex.cxx:1183
 TLatex.cxx:1184
 TLatex.cxx:1185
 TLatex.cxx:1186
 TLatex.cxx:1187
 TLatex.cxx:1188
 TLatex.cxx:1189
 TLatex.cxx:1190
 TLatex.cxx:1191
 TLatex.cxx:1192
 TLatex.cxx:1193
 TLatex.cxx:1194
 TLatex.cxx:1195
 TLatex.cxx:1196
 TLatex.cxx:1197
 TLatex.cxx:1198
 TLatex.cxx:1199
 TLatex.cxx:1200
 TLatex.cxx:1201
 TLatex.cxx:1202
 TLatex.cxx:1203
 TLatex.cxx:1204
 TLatex.cxx:1205
 TLatex.cxx:1206
 TLatex.cxx:1207
 TLatex.cxx:1208
 TLatex.cxx:1209
 TLatex.cxx:1210
 TLatex.cxx:1211
 TLatex.cxx:1212
 TLatex.cxx:1213
 TLatex.cxx:1214
 TLatex.cxx:1215
 TLatex.cxx:1216
 TLatex.cxx:1217
 TLatex.cxx:1218
 TLatex.cxx:1219
 TLatex.cxx:1220
 TLatex.cxx:1221
 TLatex.cxx:1222
 TLatex.cxx:1223
 TLatex.cxx:1224
 TLatex.cxx:1225
 TLatex.cxx:1226
 TLatex.cxx:1227
 TLatex.cxx:1228
 TLatex.cxx:1229
 TLatex.cxx:1230
 TLatex.cxx:1231
 TLatex.cxx:1232
 TLatex.cxx:1233
 TLatex.cxx:1234
 TLatex.cxx:1235
 TLatex.cxx:1236
 TLatex.cxx:1237
 TLatex.cxx:1238
 TLatex.cxx:1239
 TLatex.cxx:1240
 TLatex.cxx:1241
 TLatex.cxx:1242
 TLatex.cxx:1243
 TLatex.cxx:1244
 TLatex.cxx:1245
 TLatex.cxx:1246
 TLatex.cxx:1247
 TLatex.cxx:1248
 TLatex.cxx:1249
 TLatex.cxx:1250
 TLatex.cxx:1251
 TLatex.cxx:1252
 TLatex.cxx:1253
 TLatex.cxx:1254
 TLatex.cxx:1255
 TLatex.cxx:1256
 TLatex.cxx:1257
 TLatex.cxx:1258
 TLatex.cxx:1259
 TLatex.cxx:1260
 TLatex.cxx:1261
 TLatex.cxx:1262
 TLatex.cxx:1263
 TLatex.cxx:1264
 TLatex.cxx:1265
 TLatex.cxx:1266
 TLatex.cxx:1267
 TLatex.cxx:1268
 TLatex.cxx:1269
 TLatex.cxx:1270
 TLatex.cxx:1271
 TLatex.cxx:1272
 TLatex.cxx:1273
 TLatex.cxx:1274
 TLatex.cxx:1275
 TLatex.cxx:1276
 TLatex.cxx:1277
 TLatex.cxx:1278
 TLatex.cxx:1279
 TLatex.cxx:1280
 TLatex.cxx:1281
 TLatex.cxx:1282
 TLatex.cxx:1283
 TLatex.cxx:1284
 TLatex.cxx:1285
 TLatex.cxx:1286
 TLatex.cxx:1287
 TLatex.cxx:1288
 TLatex.cxx:1289
 TLatex.cxx:1290
 TLatex.cxx:1291
 TLatex.cxx:1292
 TLatex.cxx:1293
 TLatex.cxx:1294
 TLatex.cxx:1295
 TLatex.cxx:1296
 TLatex.cxx:1297
 TLatex.cxx:1298
 TLatex.cxx:1299
 TLatex.cxx:1300
 TLatex.cxx:1301
 TLatex.cxx:1302
 TLatex.cxx:1303
 TLatex.cxx:1304
 TLatex.cxx:1305
 TLatex.cxx:1306
 TLatex.cxx:1307
 TLatex.cxx:1308
 TLatex.cxx:1309
 TLatex.cxx:1310
 TLatex.cxx:1311
 TLatex.cxx:1312
 TLatex.cxx:1313
 TLatex.cxx:1314
 TLatex.cxx:1315
 TLatex.cxx:1316
 TLatex.cxx:1317
 TLatex.cxx:1318
 TLatex.cxx:1319
 TLatex.cxx:1320
 TLatex.cxx:1321
 TLatex.cxx:1322
 TLatex.cxx:1323
 TLatex.cxx:1324
 TLatex.cxx:1325
 TLatex.cxx:1326
 TLatex.cxx:1327
 TLatex.cxx:1328
 TLatex.cxx:1329
 TLatex.cxx:1330
 TLatex.cxx:1331
 TLatex.cxx:1332
 TLatex.cxx:1333
 TLatex.cxx:1334
 TLatex.cxx:1335
 TLatex.cxx:1336
 TLatex.cxx:1337
 TLatex.cxx:1338
 TLatex.cxx:1339
 TLatex.cxx:1340
 TLatex.cxx:1341
 TLatex.cxx:1342
 TLatex.cxx:1343
 TLatex.cxx:1344
 TLatex.cxx:1345
 TLatex.cxx:1346
 TLatex.cxx:1347
 TLatex.cxx:1348
 TLatex.cxx:1349
 TLatex.cxx:1350
 TLatex.cxx:1351
 TLatex.cxx:1352
 TLatex.cxx:1353
 TLatex.cxx:1354
 TLatex.cxx:1355
 TLatex.cxx:1356
 TLatex.cxx:1357
 TLatex.cxx:1358
 TLatex.cxx:1359
 TLatex.cxx:1360
 TLatex.cxx:1361
 TLatex.cxx:1362
 TLatex.cxx:1363
 TLatex.cxx:1364
 TLatex.cxx:1365
 TLatex.cxx:1366
 TLatex.cxx:1367
 TLatex.cxx:1368
 TLatex.cxx:1369
 TLatex.cxx:1370
 TLatex.cxx:1371
 TLatex.cxx:1372
 TLatex.cxx:1373
 TLatex.cxx:1374
 TLatex.cxx:1375
 TLatex.cxx:1376
 TLatex.cxx:1377
 TLatex.cxx:1378
 TLatex.cxx:1379
 TLatex.cxx:1380
 TLatex.cxx:1381
 TLatex.cxx:1382
 TLatex.cxx:1383
 TLatex.cxx:1384
 TLatex.cxx:1385
 TLatex.cxx:1386
 TLatex.cxx:1387
 TLatex.cxx:1388
 TLatex.cxx:1389
 TLatex.cxx:1390
 TLatex.cxx:1391
 TLatex.cxx:1392
 TLatex.cxx:1393
 TLatex.cxx:1394
 TLatex.cxx:1395
 TLatex.cxx:1396
 TLatex.cxx:1397
 TLatex.cxx:1398
 TLatex.cxx:1399
 TLatex.cxx:1400
 TLatex.cxx:1401
 TLatex.cxx:1402
 TLatex.cxx:1403
 TLatex.cxx:1404
 TLatex.cxx:1405
 TLatex.cxx:1406
 TLatex.cxx:1407
 TLatex.cxx:1408
 TLatex.cxx:1409
 TLatex.cxx:1410
 TLatex.cxx:1411
 TLatex.cxx:1412
 TLatex.cxx:1413
 TLatex.cxx:1414
 TLatex.cxx:1415
 TLatex.cxx:1416
 TLatex.cxx:1417
 TLatex.cxx:1418
 TLatex.cxx:1419
 TLatex.cxx:1420
 TLatex.cxx:1421
 TLatex.cxx:1422
 TLatex.cxx:1423
 TLatex.cxx:1424
 TLatex.cxx:1425
 TLatex.cxx:1426
 TLatex.cxx:1427
 TLatex.cxx:1428
 TLatex.cxx:1429
 TLatex.cxx:1430
 TLatex.cxx:1431
 TLatex.cxx:1432
 TLatex.cxx:1433
 TLatex.cxx:1434
 TLatex.cxx:1435
 TLatex.cxx:1436
 TLatex.cxx:1437
 TLatex.cxx:1438
 TLatex.cxx:1439
 TLatex.cxx:1440
 TLatex.cxx:1441
 TLatex.cxx:1442
 TLatex.cxx:1443
 TLatex.cxx:1444
 TLatex.cxx:1445
 TLatex.cxx:1446
 TLatex.cxx:1447
 TLatex.cxx:1448
 TLatex.cxx:1449
 TLatex.cxx:1450
 TLatex.cxx:1451
 TLatex.cxx:1452
 TLatex.cxx:1453
 TLatex.cxx:1454
 TLatex.cxx:1455
 TLatex.cxx:1456
 TLatex.cxx:1457
 TLatex.cxx:1458
 TLatex.cxx:1459
 TLatex.cxx:1460
 TLatex.cxx:1461
 TLatex.cxx:1462
 TLatex.cxx:1463
 TLatex.cxx:1464
 TLatex.cxx:1465
 TLatex.cxx:1466
 TLatex.cxx:1467
 TLatex.cxx:1468
 TLatex.cxx:1469
 TLatex.cxx:1470
 TLatex.cxx:1471
 TLatex.cxx:1472
 TLatex.cxx:1473
 TLatex.cxx:1474
 TLatex.cxx:1475
 TLatex.cxx:1476
 TLatex.cxx:1477
 TLatex.cxx:1478
 TLatex.cxx:1479
 TLatex.cxx:1480
 TLatex.cxx:1481
 TLatex.cxx:1482
 TLatex.cxx:1483
 TLatex.cxx:1484
 TLatex.cxx:1485
 TLatex.cxx:1486
 TLatex.cxx:1487
 TLatex.cxx:1488
 TLatex.cxx:1489
 TLatex.cxx:1490
 TLatex.cxx:1491
 TLatex.cxx:1492
 TLatex.cxx:1493
 TLatex.cxx:1494
 TLatex.cxx:1495
 TLatex.cxx:1496
 TLatex.cxx:1497
 TLatex.cxx:1498
 TLatex.cxx:1499
 TLatex.cxx:1500
 TLatex.cxx:1501
 TLatex.cxx:1502
 TLatex.cxx:1503
 TLatex.cxx:1504
 TLatex.cxx:1505
 TLatex.cxx:1506
 TLatex.cxx:1507
 TLatex.cxx:1508
 TLatex.cxx:1509
 TLatex.cxx:1510
 TLatex.cxx:1511
 TLatex.cxx:1512
 TLatex.cxx:1513
 TLatex.cxx:1514
 TLatex.cxx:1515
 TLatex.cxx:1516
 TLatex.cxx:1517
 TLatex.cxx:1518
 TLatex.cxx:1519
 TLatex.cxx:1520
 TLatex.cxx:1521
 TLatex.cxx:1522
 TLatex.cxx:1523
 TLatex.cxx:1524
 TLatex.cxx:1525
 TLatex.cxx:1526
 TLatex.cxx:1527
 TLatex.cxx:1528
 TLatex.cxx:1529
 TLatex.cxx:1530
 TLatex.cxx:1531
 TLatex.cxx:1532
 TLatex.cxx:1533
 TLatex.cxx:1534
 TLatex.cxx:1535
 TLatex.cxx:1536
 TLatex.cxx:1537
 TLatex.cxx:1538
 TLatex.cxx:1539
 TLatex.cxx:1540
 TLatex.cxx:1541
 TLatex.cxx:1542
 TLatex.cxx:1543
 TLatex.cxx:1544
 TLatex.cxx:1545
 TLatex.cxx:1546
 TLatex.cxx:1547
 TLatex.cxx:1548
 TLatex.cxx:1549
 TLatex.cxx:1550
 TLatex.cxx:1551
 TLatex.cxx:1552
 TLatex.cxx:1553
 TLatex.cxx:1554
 TLatex.cxx:1555
 TLatex.cxx:1556
 TLatex.cxx:1557
 TLatex.cxx:1558
 TLatex.cxx:1559
 TLatex.cxx:1560
 TLatex.cxx:1561
 TLatex.cxx:1562
 TLatex.cxx:1563
 TLatex.cxx:1564
 TLatex.cxx:1565
 TLatex.cxx:1566
 TLatex.cxx:1567
 TLatex.cxx:1568
 TLatex.cxx:1569
 TLatex.cxx:1570
 TLatex.cxx:1571
 TLatex.cxx:1572
 TLatex.cxx:1573
 TLatex.cxx:1574
 TLatex.cxx:1575
 TLatex.cxx:1576
 TLatex.cxx:1577
 TLatex.cxx:1578
 TLatex.cxx:1579
 TLatex.cxx:1580
 TLatex.cxx:1581
 TLatex.cxx:1582
 TLatex.cxx:1583
 TLatex.cxx:1584
 TLatex.cxx:1585
 TLatex.cxx:1586
 TLatex.cxx:1587
 TLatex.cxx:1588
 TLatex.cxx:1589
 TLatex.cxx:1590
 TLatex.cxx:1591
 TLatex.cxx:1592
 TLatex.cxx:1593
 TLatex.cxx:1594
 TLatex.cxx:1595
 TLatex.cxx:1596
 TLatex.cxx:1597
 TLatex.cxx:1598
 TLatex.cxx:1599
 TLatex.cxx:1600
 TLatex.cxx:1601
 TLatex.cxx:1602
 TLatex.cxx:1603
 TLatex.cxx:1604
 TLatex.cxx:1605
 TLatex.cxx:1606
 TLatex.cxx:1607
 TLatex.cxx:1608
 TLatex.cxx:1609
 TLatex.cxx:1610
 TLatex.cxx:1611
 TLatex.cxx:1612
 TLatex.cxx:1613
 TLatex.cxx:1614
 TLatex.cxx:1615
 TLatex.cxx:1616
 TLatex.cxx:1617
 TLatex.cxx:1618
 TLatex.cxx:1619
 TLatex.cxx:1620
 TLatex.cxx:1621
 TLatex.cxx:1622
 TLatex.cxx:1623
 TLatex.cxx:1624
 TLatex.cxx:1625
 TLatex.cxx:1626
 TLatex.cxx:1627
 TLatex.cxx:1628
 TLatex.cxx:1629
 TLatex.cxx:1630
 TLatex.cxx:1631
 TLatex.cxx:1632
 TLatex.cxx:1633
 TLatex.cxx:1634
 TLatex.cxx:1635
 TLatex.cxx:1636
 TLatex.cxx:1637
 TLatex.cxx:1638
 TLatex.cxx:1639
 TLatex.cxx:1640
 TLatex.cxx:1641
 TLatex.cxx:1642
 TLatex.cxx:1643
 TLatex.cxx:1644
 TLatex.cxx:1645
 TLatex.cxx:1646
 TLatex.cxx:1647
 TLatex.cxx:1648
 TLatex.cxx:1649
 TLatex.cxx:1650
 TLatex.cxx:1651
 TLatex.cxx:1652
 TLatex.cxx:1653
 TLatex.cxx:1654
 TLatex.cxx:1655
 TLatex.cxx:1656
 TLatex.cxx:1657
 TLatex.cxx:1658
 TLatex.cxx:1659
 TLatex.cxx:1660
 TLatex.cxx:1661
 TLatex.cxx:1662
 TLatex.cxx:1663
 TLatex.cxx:1664
 TLatex.cxx:1665
 TLatex.cxx:1666
 TLatex.cxx:1667
 TLatex.cxx:1668
 TLatex.cxx:1669
 TLatex.cxx:1670
 TLatex.cxx:1671
 TLatex.cxx:1672
 TLatex.cxx:1673
 TLatex.cxx:1674
 TLatex.cxx:1675
 TLatex.cxx:1676
 TLatex.cxx:1677
 TLatex.cxx:1678
 TLatex.cxx:1679
 TLatex.cxx:1680
 TLatex.cxx:1681
 TLatex.cxx:1682
 TLatex.cxx:1683
 TLatex.cxx:1684
 TLatex.cxx:1685
 TLatex.cxx:1686
 TLatex.cxx:1687
 TLatex.cxx:1688
 TLatex.cxx:1689
 TLatex.cxx:1690
 TLatex.cxx:1691
 TLatex.cxx:1692
 TLatex.cxx:1693
 TLatex.cxx:1694
 TLatex.cxx:1695
 TLatex.cxx:1696
 TLatex.cxx:1697
 TLatex.cxx:1698
 TLatex.cxx:1699
 TLatex.cxx:1700
 TLatex.cxx:1701
 TLatex.cxx:1702
 TLatex.cxx:1703
 TLatex.cxx:1704
 TLatex.cxx:1705
 TLatex.cxx:1706
 TLatex.cxx:1707
 TLatex.cxx:1708
 TLatex.cxx:1709
 TLatex.cxx:1710
 TLatex.cxx:1711
 TLatex.cxx:1712
 TLatex.cxx:1713
 TLatex.cxx:1714
 TLatex.cxx:1715
 TLatex.cxx:1716
 TLatex.cxx:1717
 TLatex.cxx:1718
 TLatex.cxx:1719
 TLatex.cxx:1720
 TLatex.cxx:1721
 TLatex.cxx:1722
 TLatex.cxx:1723
 TLatex.cxx:1724
 TLatex.cxx:1725
 TLatex.cxx:1726
 TLatex.cxx:1727
 TLatex.cxx:1728
 TLatex.cxx:1729
 TLatex.cxx:1730
 TLatex.cxx:1731
 TLatex.cxx:1732
 TLatex.cxx:1733
 TLatex.cxx:1734
 TLatex.cxx:1735
 TLatex.cxx:1736
 TLatex.cxx:1737
 TLatex.cxx:1738
 TLatex.cxx:1739
 TLatex.cxx:1740
 TLatex.cxx:1741
 TLatex.cxx:1742
 TLatex.cxx:1743
 TLatex.cxx:1744
 TLatex.cxx:1745
 TLatex.cxx:1746
 TLatex.cxx:1747
 TLatex.cxx:1748
 TLatex.cxx:1749
 TLatex.cxx:1750
 TLatex.cxx:1751
 TLatex.cxx:1752
 TLatex.cxx:1753
 TLatex.cxx:1754
 TLatex.cxx:1755
 TLatex.cxx:1756
 TLatex.cxx:1757
 TLatex.cxx:1758
 TLatex.cxx:1759
 TLatex.cxx:1760
 TLatex.cxx:1761
 TLatex.cxx:1762
 TLatex.cxx:1763
 TLatex.cxx:1764
 TLatex.cxx:1765
 TLatex.cxx:1766
 TLatex.cxx:1767
 TLatex.cxx:1768
 TLatex.cxx:1769
 TLatex.cxx:1770
 TLatex.cxx:1771
 TLatex.cxx:1772
 TLatex.cxx:1773
 TLatex.cxx:1774
 TLatex.cxx:1775
 TLatex.cxx:1776
 TLatex.cxx:1777
 TLatex.cxx:1778
 TLatex.cxx:1779
 TLatex.cxx:1780
 TLatex.cxx:1781
 TLatex.cxx:1782
 TLatex.cxx:1783
 TLatex.cxx:1784
 TLatex.cxx:1785
 TLatex.cxx:1786
 TLatex.cxx:1787
 TLatex.cxx:1788
 TLatex.cxx:1789
 TLatex.cxx:1790
 TLatex.cxx:1791
 TLatex.cxx:1792
 TLatex.cxx:1793
 TLatex.cxx:1794
 TLatex.cxx:1795
 TLatex.cxx:1796
 TLatex.cxx:1797
 TLatex.cxx:1798
 TLatex.cxx:1799
 TLatex.cxx:1800
 TLatex.cxx:1801
 TLatex.cxx:1802
 TLatex.cxx:1803
 TLatex.cxx:1804
 TLatex.cxx:1805
 TLatex.cxx:1806
 TLatex.cxx:1807
 TLatex.cxx:1808
 TLatex.cxx:1809
 TLatex.cxx:1810
 TLatex.cxx:1811
 TLatex.cxx:1812
 TLatex.cxx:1813
 TLatex.cxx:1814
 TLatex.cxx:1815
 TLatex.cxx:1816
 TLatex.cxx:1817
 TLatex.cxx:1818
 TLatex.cxx:1819
 TLatex.cxx:1820
 TLatex.cxx:1821
 TLatex.cxx:1822
 TLatex.cxx:1823
 TLatex.cxx:1824
 TLatex.cxx:1825
 TLatex.cxx:1826
 TLatex.cxx:1827
 TLatex.cxx:1828
 TLatex.cxx:1829
 TLatex.cxx:1830
 TLatex.cxx:1831
 TLatex.cxx:1832
 TLatex.cxx:1833
 TLatex.cxx:1834
 TLatex.cxx:1835
 TLatex.cxx:1836
 TLatex.cxx:1837
 TLatex.cxx:1838
 TLatex.cxx:1839
 TLatex.cxx:1840
 TLatex.cxx:1841
 TLatex.cxx:1842
 TLatex.cxx:1843
 TLatex.cxx:1844
 TLatex.cxx:1845
 TLatex.cxx:1846
 TLatex.cxx:1847
 TLatex.cxx:1848
 TLatex.cxx:1849
 TLatex.cxx:1850
 TLatex.cxx:1851
 TLatex.cxx:1852
 TLatex.cxx:1853
 TLatex.cxx:1854
 TLatex.cxx:1855
 TLatex.cxx:1856
 TLatex.cxx:1857
 TLatex.cxx:1858
 TLatex.cxx:1859
 TLatex.cxx:1860
 TLatex.cxx:1861
 TLatex.cxx:1862
 TLatex.cxx:1863
 TLatex.cxx:1864
 TLatex.cxx:1865
 TLatex.cxx:1866
 TLatex.cxx:1867
 TLatex.cxx:1868
 TLatex.cxx:1869
 TLatex.cxx:1870
 TLatex.cxx:1871
 TLatex.cxx:1872
 TLatex.cxx:1873
 TLatex.cxx:1874
 TLatex.cxx:1875
 TLatex.cxx:1876
 TLatex.cxx:1877
 TLatex.cxx:1878
 TLatex.cxx:1879
 TLatex.cxx:1880
 TLatex.cxx:1881
 TLatex.cxx:1882
 TLatex.cxx:1883
 TLatex.cxx:1884
 TLatex.cxx:1885
 TLatex.cxx:1886
 TLatex.cxx:1887
 TLatex.cxx:1888
 TLatex.cxx:1889
 TLatex.cxx:1890
 TLatex.cxx:1891
 TLatex.cxx:1892
 TLatex.cxx:1893
 TLatex.cxx:1894
 TLatex.cxx:1895
 TLatex.cxx:1896
 TLatex.cxx:1897
 TLatex.cxx:1898
 TLatex.cxx:1899
 TLatex.cxx:1900
 TLatex.cxx:1901
 TLatex.cxx:1902
 TLatex.cxx:1903
 TLatex.cxx:1904
 TLatex.cxx:1905
 TLatex.cxx:1906
 TLatex.cxx:1907
 TLatex.cxx:1908
 TLatex.cxx:1909
 TLatex.cxx:1910
 TLatex.cxx:1911
 TLatex.cxx:1912
 TLatex.cxx:1913
 TLatex.cxx:1914
 TLatex.cxx:1915
 TLatex.cxx:1916
 TLatex.cxx:1917
 TLatex.cxx:1918
 TLatex.cxx:1919
 TLatex.cxx:1920
 TLatex.cxx:1921
 TLatex.cxx:1922
 TLatex.cxx:1923
 TLatex.cxx:1924
 TLatex.cxx:1925
 TLatex.cxx:1926
 TLatex.cxx:1927
 TLatex.cxx:1928
 TLatex.cxx:1929
 TLatex.cxx:1930
 TLatex.cxx:1931
 TLatex.cxx:1932
 TLatex.cxx:1933
 TLatex.cxx:1934
 TLatex.cxx:1935
 TLatex.cxx:1936
 TLatex.cxx:1937
 TLatex.cxx:1938
 TLatex.cxx:1939
 TLatex.cxx:1940
 TLatex.cxx:1941
 TLatex.cxx:1942
 TLatex.cxx:1943
 TLatex.cxx:1944
 TLatex.cxx:1945
 TLatex.cxx:1946
 TLatex.cxx:1947
 TLatex.cxx:1948
 TLatex.cxx:1949
 TLatex.cxx:1950
 TLatex.cxx:1951
 TLatex.cxx:1952
 TLatex.cxx:1953
 TLatex.cxx:1954
 TLatex.cxx:1955
 TLatex.cxx:1956
 TLatex.cxx:1957
 TLatex.cxx:1958
 TLatex.cxx:1959
 TLatex.cxx:1960
 TLatex.cxx:1961
 TLatex.cxx:1962
 TLatex.cxx:1963
 TLatex.cxx:1964
 TLatex.cxx:1965
 TLatex.cxx:1966
 TLatex.cxx:1967
 TLatex.cxx:1968
 TLatex.cxx:1969
 TLatex.cxx:1970
 TLatex.cxx:1971
 TLatex.cxx:1972
 TLatex.cxx:1973
 TLatex.cxx:1974
 TLatex.cxx:1975
 TLatex.cxx:1976
 TLatex.cxx:1977
 TLatex.cxx:1978
 TLatex.cxx:1979
 TLatex.cxx:1980
 TLatex.cxx:1981
 TLatex.cxx:1982
 TLatex.cxx:1983
 TLatex.cxx:1984
 TLatex.cxx:1985
 TLatex.cxx:1986
 TLatex.cxx:1987
 TLatex.cxx:1988
 TLatex.cxx:1989
 TLatex.cxx:1990
 TLatex.cxx:1991
 TLatex.cxx:1992
 TLatex.cxx:1993
 TLatex.cxx:1994
 TLatex.cxx:1995
 TLatex.cxx:1996
 TLatex.cxx:1997
 TLatex.cxx:1998
 TLatex.cxx:1999
 TLatex.cxx:2000
 TLatex.cxx:2001
 TLatex.cxx:2002
 TLatex.cxx:2003
 TLatex.cxx:2004
 TLatex.cxx:2005
 TLatex.cxx:2006
 TLatex.cxx:2007
 TLatex.cxx:2008
 TLatex.cxx:2009
 TLatex.cxx:2010
 TLatex.cxx:2011
 TLatex.cxx:2012
 TLatex.cxx:2013
 TLatex.cxx:2014
 TLatex.cxx:2015
 TLatex.cxx:2016
 TLatex.cxx:2017
 TLatex.cxx:2018
 TLatex.cxx:2019
 TLatex.cxx:2020
 TLatex.cxx:2021
 TLatex.cxx:2022
 TLatex.cxx:2023
 TLatex.cxx:2024
 TLatex.cxx:2025
 TLatex.cxx:2026
 TLatex.cxx:2027
 TLatex.cxx:2028
 TLatex.cxx:2029
 TLatex.cxx:2030
 TLatex.cxx:2031
 TLatex.cxx:2032
 TLatex.cxx:2033
 TLatex.cxx:2034
 TLatex.cxx:2035
 TLatex.cxx:2036
 TLatex.cxx:2037
 TLatex.cxx:2038
 TLatex.cxx:2039
 TLatex.cxx:2040
 TLatex.cxx:2041
 TLatex.cxx:2042
 TLatex.cxx:2043
 TLatex.cxx:2044
 TLatex.cxx:2045
 TLatex.cxx:2046
 TLatex.cxx:2047
 TLatex.cxx:2048
 TLatex.cxx:2049
 TLatex.cxx:2050
 TLatex.cxx:2051
 TLatex.cxx:2052
 TLatex.cxx:2053
 TLatex.cxx:2054
 TLatex.cxx:2055
 TLatex.cxx:2056
 TLatex.cxx:2057
 TLatex.cxx:2058
 TLatex.cxx:2059
 TLatex.cxx:2060
 TLatex.cxx:2061
 TLatex.cxx:2062
 TLatex.cxx:2063
 TLatex.cxx:2064
 TLatex.cxx:2065
 TLatex.cxx:2066
 TLatex.cxx:2067
 TLatex.cxx:2068
 TLatex.cxx:2069
 TLatex.cxx:2070
 TLatex.cxx:2071
 TLatex.cxx:2072
 TLatex.cxx:2073
 TLatex.cxx:2074
 TLatex.cxx:2075
 TLatex.cxx:2076
 TLatex.cxx:2077
 TLatex.cxx:2078
 TLatex.cxx:2079
 TLatex.cxx:2080
 TLatex.cxx:2081
 TLatex.cxx:2082
 TLatex.cxx:2083
 TLatex.cxx:2084
 TLatex.cxx:2085
 TLatex.cxx:2086
 TLatex.cxx:2087
 TLatex.cxx:2088
 TLatex.cxx:2089
 TLatex.cxx:2090
 TLatex.cxx:2091
 TLatex.cxx:2092
 TLatex.cxx:2093
 TLatex.cxx:2094
 TLatex.cxx:2095
 TLatex.cxx:2096
 TLatex.cxx:2097
 TLatex.cxx:2098
 TLatex.cxx:2099
 TLatex.cxx:2100
 TLatex.cxx:2101
 TLatex.cxx:2102
 TLatex.cxx:2103
 TLatex.cxx:2104
 TLatex.cxx:2105
 TLatex.cxx:2106
 TLatex.cxx:2107
 TLatex.cxx:2108
 TLatex.cxx:2109
 TLatex.cxx:2110
 TLatex.cxx:2111
 TLatex.cxx:2112
 TLatex.cxx:2113
 TLatex.cxx:2114
 TLatex.cxx:2115
 TLatex.cxx:2116
 TLatex.cxx:2117
 TLatex.cxx:2118
 TLatex.cxx:2119
 TLatex.cxx:2120
 TLatex.cxx:2121
 TLatex.cxx:2122
 TLatex.cxx:2123
 TLatex.cxx:2124
 TLatex.cxx:2125
 TLatex.cxx:2126
 TLatex.cxx:2127
 TLatex.cxx:2128
 TLatex.cxx:2129
 TLatex.cxx:2130
 TLatex.cxx:2131
 TLatex.cxx:2132
 TLatex.cxx:2133
 TLatex.cxx:2134
 TLatex.cxx:2135
 TLatex.cxx:2136
 TLatex.cxx:2137
 TLatex.cxx:2138
 TLatex.cxx:2139
 TLatex.cxx:2140
 TLatex.cxx:2141
 TLatex.cxx:2142
 TLatex.cxx:2143
 TLatex.cxx:2144
 TLatex.cxx:2145
 TLatex.cxx:2146
 TLatex.cxx:2147
 TLatex.cxx:2148
 TLatex.cxx:2149
 TLatex.cxx:2150
 TLatex.cxx:2151
 TLatex.cxx:2152
 TLatex.cxx:2153
 TLatex.cxx:2154
 TLatex.cxx:2155
 TLatex.cxx:2156
 TLatex.cxx:2157
 TLatex.cxx:2158
 TLatex.cxx:2159
 TLatex.cxx:2160
 TLatex.cxx:2161
 TLatex.cxx:2162
 TLatex.cxx:2163
 TLatex.cxx:2164
 TLatex.cxx:2165
 TLatex.cxx:2166
 TLatex.cxx:2167
 TLatex.cxx:2168
 TLatex.cxx:2169
 TLatex.cxx:2170
 TLatex.cxx:2171
 TLatex.cxx:2172
 TLatex.cxx:2173
 TLatex.cxx:2174
 TLatex.cxx:2175
 TLatex.cxx:2176
 TLatex.cxx:2177
 TLatex.cxx:2178
 TLatex.cxx:2179
 TLatex.cxx:2180
 TLatex.cxx:2181
 TLatex.cxx:2182
 TLatex.cxx:2183
 TLatex.cxx:2184
 TLatex.cxx:2185
 TLatex.cxx:2186
 TLatex.cxx:2187
 TLatex.cxx:2188
 TLatex.cxx:2189
 TLatex.cxx:2190
 TLatex.cxx:2191
 TLatex.cxx:2192
 TLatex.cxx:2193
 TLatex.cxx:2194
 TLatex.cxx:2195
 TLatex.cxx:2196
 TLatex.cxx:2197
 TLatex.cxx:2198
 TLatex.cxx:2199
 TLatex.cxx:2200
 TLatex.cxx:2201
 TLatex.cxx:2202
 TLatex.cxx:2203
 TLatex.cxx:2204
 TLatex.cxx:2205
 TLatex.cxx:2206
 TLatex.cxx:2207
 TLatex.cxx:2208
 TLatex.cxx:2209
 TLatex.cxx:2210
 TLatex.cxx:2211
 TLatex.cxx:2212
 TLatex.cxx:2213
 TLatex.cxx:2214
 TLatex.cxx:2215
 TLatex.cxx:2216
 TLatex.cxx:2217
 TLatex.cxx:2218
 TLatex.cxx:2219
 TLatex.cxx:2220
 TLatex.cxx:2221
 TLatex.cxx:2222
 TLatex.cxx:2223
 TLatex.cxx:2224
 TLatex.cxx:2225
 TLatex.cxx:2226
 TLatex.cxx:2227
 TLatex.cxx:2228
 TLatex.cxx:2229
 TLatex.cxx:2230
 TLatex.cxx:2231
 TLatex.cxx:2232
 TLatex.cxx:2233
 TLatex.cxx:2234
 TLatex.cxx:2235
 TLatex.cxx:2236
 TLatex.cxx:2237
 TLatex.cxx:2238
 TLatex.cxx:2239
 TLatex.cxx:2240
 TLatex.cxx:2241
 TLatex.cxx:2242
 TLatex.cxx:2243
 TLatex.cxx:2244
 TLatex.cxx:2245
 TLatex.cxx:2246
 TLatex.cxx:2247
 TLatex.cxx:2248
 TLatex.cxx:2249
 TLatex.cxx:2250
 TLatex.cxx:2251
 TLatex.cxx:2252
 TLatex.cxx:2253
 TLatex.cxx:2254
 TLatex.cxx:2255
 TLatex.cxx:2256
 TLatex.cxx:2257
 TLatex.cxx:2258
 TLatex.cxx:2259
 TLatex.cxx:2260
 TLatex.cxx:2261
 TLatex.cxx:2262
 TLatex.cxx:2263
 TLatex.cxx:2264
 TLatex.cxx:2265
 TLatex.cxx:2266
 TLatex.cxx:2267
 TLatex.cxx:2268
 TLatex.cxx:2269
 TLatex.cxx:2270
 TLatex.cxx:2271
 TLatex.cxx:2272
 TLatex.cxx:2273
 TLatex.cxx:2274
 TLatex.cxx:2275
 TLatex.cxx:2276
 TLatex.cxx:2277
 TLatex.cxx:2278
 TLatex.cxx:2279
 TLatex.cxx:2280
 TLatex.cxx:2281
 TLatex.cxx:2282
 TLatex.cxx:2283
 TLatex.cxx:2284
 TLatex.cxx:2285
 TLatex.cxx:2286
 TLatex.cxx:2287
 TLatex.cxx:2288
 TLatex.cxx:2289
 TLatex.cxx:2290
 TLatex.cxx:2291
 TLatex.cxx:2292
 TLatex.cxx:2293
 TLatex.cxx:2294
 TLatex.cxx:2295
 TLatex.cxx:2296
 TLatex.cxx:2297
 TLatex.cxx:2298
 TLatex.cxx:2299
 TLatex.cxx:2300
 TLatex.cxx:2301
 TLatex.cxx:2302
 TLatex.cxx:2303
 TLatex.cxx:2304
 TLatex.cxx:2305
 TLatex.cxx:2306
 TLatex.cxx:2307
 TLatex.cxx:2308
 TLatex.cxx:2309
 TLatex.cxx:2310
 TLatex.cxx:2311
 TLatex.cxx:2312
 TLatex.cxx:2313
 TLatex.cxx:2314
 TLatex.cxx:2315
 TLatex.cxx:2316
 TLatex.cxx:2317
 TLatex.cxx:2318
 TLatex.cxx:2319
 TLatex.cxx:2320
 TLatex.cxx:2321
 TLatex.cxx:2322
 TLatex.cxx:2323
 TLatex.cxx:2324
 TLatex.cxx:2325
 TLatex.cxx:2326
 TLatex.cxx:2327
 TLatex.cxx:2328
 TLatex.cxx:2329
 TLatex.cxx:2330
 TLatex.cxx:2331
 TLatex.cxx:2332
 TLatex.cxx:2333
 TLatex.cxx:2334
 TLatex.cxx:2335
 TLatex.cxx:2336
 TLatex.cxx:2337
 TLatex.cxx:2338
 TLatex.cxx:2339
 TLatex.cxx:2340
 TLatex.cxx:2341
 TLatex.cxx:2342
 TLatex.cxx:2343
 TLatex.cxx:2344
 TLatex.cxx:2345
 TLatex.cxx:2346
 TLatex.cxx:2347
 TLatex.cxx:2348
 TLatex.cxx:2349
 TLatex.cxx:2350
 TLatex.cxx:2351
 TLatex.cxx:2352
 TLatex.cxx:2353
 TLatex.cxx:2354
 TLatex.cxx:2355
 TLatex.cxx:2356
 TLatex.cxx:2357
 TLatex.cxx:2358
 TLatex.cxx:2359
 TLatex.cxx:2360
 TLatex.cxx:2361
 TLatex.cxx:2362
 TLatex.cxx:2363
 TLatex.cxx:2364
 TLatex.cxx:2365
 TLatex.cxx:2366
 TLatex.cxx:2367
 TLatex.cxx:2368
 TLatex.cxx:2369
 TLatex.cxx:2370
 TLatex.cxx:2371
 TLatex.cxx:2372
 TLatex.cxx:2373
 TLatex.cxx:2374
 TLatex.cxx:2375
 TLatex.cxx:2376
 TLatex.cxx:2377
 TLatex.cxx:2378
 TLatex.cxx:2379
 TLatex.cxx:2380
 TLatex.cxx:2381
 TLatex.cxx:2382
 TLatex.cxx:2383
 TLatex.cxx:2384
 TLatex.cxx:2385
 TLatex.cxx:2386
 TLatex.cxx:2387
 TLatex.cxx:2388
 TLatex.cxx:2389
 TLatex.cxx:2390
 TLatex.cxx:2391
 TLatex.cxx:2392
 TLatex.cxx:2393
 TLatex.cxx:2394
 TLatex.cxx:2395
 TLatex.cxx:2396
 TLatex.cxx:2397
 TLatex.cxx:2398
 TLatex.cxx:2399
 TLatex.cxx:2400
 TLatex.cxx:2401
 TLatex.cxx:2402
 TLatex.cxx:2403
 TLatex.cxx:2404
 TLatex.cxx:2405
 TLatex.cxx:2406
 TLatex.cxx:2407
 TLatex.cxx:2408
 TLatex.cxx:2409
 TLatex.cxx:2410
 TLatex.cxx:2411
 TLatex.cxx:2412
 TLatex.cxx:2413
 TLatex.cxx:2414
 TLatex.cxx:2415
 TLatex.cxx:2416
 TLatex.cxx:2417
 TLatex.cxx:2418
 TLatex.cxx:2419
 TLatex.cxx:2420
 TLatex.cxx:2421
 TLatex.cxx:2422
 TLatex.cxx:2423
 TLatex.cxx:2424
 TLatex.cxx:2425
 TLatex.cxx:2426
 TLatex.cxx:2427
 TLatex.cxx:2428
 TLatex.cxx:2429
 TLatex.cxx:2430
 TLatex.cxx:2431
 TLatex.cxx:2432
 TLatex.cxx:2433
 TLatex.cxx:2434
 TLatex.cxx:2435
 TLatex.cxx:2436
 TLatex.cxx:2437
 TLatex.cxx:2438
 TLatex.cxx:2439
 TLatex.cxx:2440
 TLatex.cxx:2441
 TLatex.cxx:2442
 TLatex.cxx:2443
 TLatex.cxx:2444
 TLatex.cxx:2445
 TLatex.cxx:2446
 TLatex.cxx:2447
 TLatex.cxx:2448
 TLatex.cxx:2449
 TLatex.cxx:2450
 TLatex.cxx:2451
 TLatex.cxx:2452
 TLatex.cxx:2453
 TLatex.cxx:2454
 TLatex.cxx:2455
 TLatex.cxx:2456
 TLatex.cxx:2457
 TLatex.cxx:2458
 TLatex.cxx:2459
 TLatex.cxx:2460
 TLatex.cxx:2461
 TLatex.cxx:2462
 TLatex.cxx:2463
 TLatex.cxx:2464
 TLatex.cxx:2465
 TLatex.cxx:2466
 TLatex.cxx:2467
 TLatex.cxx:2468
 TLatex.cxx:2469
 TLatex.cxx:2470
 TLatex.cxx:2471
 TLatex.cxx:2472
 TLatex.cxx:2473
 TLatex.cxx:2474
 TLatex.cxx:2475
 TLatex.cxx:2476
 TLatex.cxx:2477
 TLatex.cxx:2478
 TLatex.cxx:2479
 TLatex.cxx:2480
 TLatex.cxx:2481
 TLatex.cxx:2482
 TLatex.cxx:2483
 TLatex.cxx:2484
 TLatex.cxx:2485
 TLatex.cxx:2486
 TLatex.cxx:2487
 TLatex.cxx:2488
 TLatex.cxx:2489
 TLatex.cxx:2490
 TLatex.cxx:2491
 TLatex.cxx:2492
 TLatex.cxx:2493
 TLatex.cxx:2494
 TLatex.cxx:2495
 TLatex.cxx:2496
 TLatex.cxx:2497
 TLatex.cxx:2498
 TLatex.cxx:2499
 TLatex.cxx:2500
 TLatex.cxx:2501
 TLatex.cxx:2502
 TLatex.cxx:2503
 TLatex.cxx:2504
 TLatex.cxx:2505
 TLatex.cxx:2506
 TLatex.cxx:2507
 TLatex.cxx:2508
 TLatex.cxx:2509
 TLatex.cxx:2510
 TLatex.cxx:2511
 TLatex.cxx:2512
 TLatex.cxx:2513
 TLatex.cxx:2514
 TLatex.cxx:2515
 TLatex.cxx:2516
 TLatex.cxx:2517
 TLatex.cxx:2518
 TLatex.cxx:2519
 TLatex.cxx:2520
 TLatex.cxx:2521
 TLatex.cxx:2522
 TLatex.cxx:2523
 TLatex.cxx:2524
 TLatex.cxx:2525
 TLatex.cxx:2526
 TLatex.cxx:2527
 TLatex.cxx:2528
 TLatex.cxx:2529
 TLatex.cxx:2530
 TLatex.cxx:2531
 TLatex.cxx:2532
 TLatex.cxx:2533
 TLatex.cxx:2534
 TLatex.cxx:2535
 TLatex.cxx:2536
 TLatex.cxx:2537
 TLatex.cxx:2538
 TLatex.cxx:2539
 TLatex.cxx:2540
 TLatex.cxx:2541
 TLatex.cxx:2542
 TLatex.cxx:2543
 TLatex.cxx:2544
 TLatex.cxx:2545
 TLatex.cxx:2546
 TLatex.cxx:2547
 TLatex.cxx:2548
 TLatex.cxx:2549
 TLatex.cxx:2550
 TLatex.cxx:2551
 TLatex.cxx:2552
 TLatex.cxx:2553
 TLatex.cxx:2554
 TLatex.cxx:2555
 TLatex.cxx:2556
 TLatex.cxx:2557
 TLatex.cxx:2558
 TLatex.cxx:2559
 TLatex.cxx:2560
 TLatex.cxx:2561
 TLatex.cxx:2562
 TLatex.cxx:2563
 TLatex.cxx:2564
 TLatex.cxx:2565
 TLatex.cxx:2566
 TLatex.cxx:2567
 TLatex.cxx:2568
 TLatex.cxx:2569
 TLatex.cxx:2570
 TLatex.cxx:2571
 TLatex.cxx:2572
 TLatex.cxx:2573
 TLatex.cxx:2574
 TLatex.cxx:2575
 TLatex.cxx:2576
 TLatex.cxx:2577
 TLatex.cxx:2578
 TLatex.cxx:2579
 TLatex.cxx:2580
 TLatex.cxx:2581
 TLatex.cxx:2582
 TLatex.cxx:2583
 TLatex.cxx:2584
 TLatex.cxx:2585
 TLatex.cxx:2586
 TLatex.cxx:2587
 TLatex.cxx:2588
 TLatex.cxx:2589
 TLatex.cxx:2590
 TLatex.cxx:2591
 TLatex.cxx:2592
 TLatex.cxx:2593
 TLatex.cxx:2594
 TLatex.cxx:2595
 TLatex.cxx:2596
 TLatex.cxx:2597
 TLatex.cxx:2598
 TLatex.cxx:2599
 TLatex.cxx:2600
 TLatex.cxx:2601
 TLatex.cxx:2602
 TLatex.cxx:2603
 TLatex.cxx:2604
 TLatex.cxx:2605
 TLatex.cxx:2606
 TLatex.cxx:2607
 TLatex.cxx:2608
 TLatex.cxx:2609
 TLatex.cxx:2610
 TLatex.cxx:2611
 TLatex.cxx:2612
 TLatex.cxx:2613