Re: [ROOT] TLatex vertical alignment

From: Rene Brun (Rene.Brun@cern.ch)
Date: Wed Aug 09 2000 - 09:03:12 MEST


Hi Stephen,
Root produces the same output as LateX. See macro below where you can play
with the vertical text alignment.

Rene Brun

{
  gROOT->Reset();
  TCanvas c1("c1");
  c1.SetGrid();
  TH2F h("h","",2,0,1,2,0,1);
  h.Draw();
  TLatex latex;
  latex.SetTextSize(0.04);
  latex.SetTextAlign(12);  
  latex.DrawLatex(0.1, 0.8, "K_{S}");
  latex.DrawLatex(0.1, 0.6, "K^{*0}");
  latex.DrawLatex(0.4, 0.6, "K_{S}   K^{*0}");
  latex.DrawLatex(.1,.4,"#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)");
  latex.DrawLatex(.1,.1,"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)");
}


Stephen Bailey wrote:
> 
> Hi Rene.
> 
> Hmm.  Good question.  I answer it by finding out how LaTeX
> would format it: to me, if LaTeX has formatted it, it is by
> definition correctly formatted.  I LaTeX'ed the following
> and attached it as a .eps file.
> 
>   \documentclass{article}
>   \begin{document}
>   \pagestyle{empty}
>   $K_{S}$ ... $K^{*0}$ ...
>   ${2s \over \pi \alpha^2} {d \sigma \over d \cos \theta}
>   (e^+ e^- \to f \bar f) = \left| {1 \over 1 - \Delta \alpha} \right|^2
>   (1 + \cos^2\theta)$
>   \end{document}
> 
> The bottom of the two K 's are aligned with each other and the bottom
> of the e^+ e^- ...  The fraction bars are centered on the middle of
> the height of the lowercase letters that sit on the baseline.  I agree
> that there are infinitely cascading subtlties as the formulas get
> more complicated.  Short of entirely reproducing LaTeX, it is impossible
> to anticipate them all.  But if ROOT ever switches to a Postscript based
> graphics rendering that can easily embed .eps files on a canvas, I'm
> writing a class that will run LaTeX to produce an .eps file and embed
> it...  But I guess for now, I suggest:
> 
> * TLatex output be aligned to some baseline that normal letters "sit"
>   on and super/sub-scripts go up and down from there.
> * In the case of fractions, the line is vertically aligned somewhere
>   above the baseline, and their text sits on baselines above and below
>   that.
> * In the case of complicated structures like fractions, etc. there be
>   some rule such that the equation can never overlap itself.  e.g. if
>   there is a superscript in the denominator of a fraction, the baseline
>   for the denominator is low enough that the superscript doesn't hit
>   the fraction line.
> 
> I don't know how realistic or easy these requests are, or what
> other subtlties might come up.  But for now, I'd be happy to be
> able to align "basic" structures like K_{S} and the K^{*0}.
> 
> Thanks.
> 
> Stephen
> 
> On Tue, 8 Aug 2000, Rene Brun wrote:
> 
> > Hi Stephen, I understand your point in this particular example, but
> > your proposal would have plenty of side effects. For example, what
> > would you propose for the 3rd Tlatex string in my macro below?
> >
> > Rene Brun
> >
> > {
> >   gROOT->Reset();
> >   TCanvas c1("c1");
> >   c1.SetGrid();
> >   TH2F h("h","",2,0,1,2,0,1);
> >   h.Draw();
> >   TLatex latex;
> >   latex.DrawLatex(0.1, 0.5, "K_{S}");
> >   TLatex *l=(TLatex*)latex.DrawLatex(0.1, 0.3, "K^{*0}");
> >   latex.DrawLatex(.1,.1,"#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)");
> > }
> >
> >
> >
> > Stephen Bailey wrote:
> > >
> > > Hi Rooters,
> > >
> > > TLatex appears to vertically align text based upon
> > > the lowest/highest element drawn, including sub/superscripts.
> > > e.g.
> > >
> > >   TLatex latex;
> > >   latex.SetNDC();
> > >   latex.DrawLatex(0.5, 0.5, "K_{S}");
> > >   latex.DrawLatex(0.6, 0.5, "K^{*0}");
> > >
> > > aligns the bottom of the subscripted "S" with the bottom of the
> > > other K.  I would prefer the alignment to be based upon the bottom
> > > of the normal script, i.e. have the two K aligned and have the
> > > S be lowered from there and the *0 be raised.
> > >
> > > Do others agree?  Would this be easily possible?
> > >
> > > Thanks.
> > >
> > > Stephen
> >
> 
>   --------------------------------------------------------------------------------
> 
>                   Name: temp.eps
>    temp.eps       Type: Postscript Document (APPLICATION/PostScript)
>               Encoding: BASE64



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:31 MET