DMUG-Archiv 2001

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

Re: Skalierter Text in MMa-Plots

> 
> Meine Frage
> -----------
> 
> Kennt Mathematica ein Konstrukt,
> 
>    - mit dem man _Textgroessen skalierbar_ machen kann,


Das Handbuch sagt dazu:

You can also explicitly specify how text should be formatted by using 
options such as FontSize and FontFamily. Note that FontSize gives the 
*absolute size* of the font to use, measured in units of printer's
points, 
with one point being 1/72 inches. If you resize a plot, the text in it 
will *not by default change size*: to get text of a different size you 
     ----------------------------
must explicitly specify a new value for the FontSize-option. 


Hervorhebungen von mir. Die Antwort: nein.

> 
>      so dass die Platzaufteilung zwischen
> 
>         zwischen
> 
>            Plotrahmen,
>            Achsenmarken und
>            den Achsen-Beschriftungen ( Texten )
> 
>      _immer gleich bleibt_ ,
> 
>      _un_abhaengig von der gerade gewaehlten Darstellungsgroesse des Plots ?
> 
> Wie koennte man sich diese Funktionalitaet selbst programmieren ?
> 

Die ImageSize Option auswerten und dann aus FullGraphics die Fonts 
hochskalieren ??

z. B.

ScaleText[Text[a_, b_], scale_?NumericQ] :=
  
  Text[a, b, TextStyle -> {FontSize -> 10*scale}]

ScaleText[Text[a_, b_, c_List], scale_?NumericQ] :=
  
  Text[a, b, c, TextStyle -> {FontSize -> 10*scale}]

ScaleText[Text[a_, b_, c___List, opt__?OptionQ], scale_?NumericQ] /; 
    FreeQ[{opt}, TextStyle] := 
  Text[a, b, c, opt, TextStyle -> {FontSize -> 10*scale}]

ScaleText[Text[a_, b_, c___List, opt__?OptionQ], scale_?NumericQ] :=
  
  Module[{txtsty},
    txtsty = TextStyle /. {opt};
         If[FreeQ[txtsty, FontSize],
            AppendTo[txtsty, TextStyle -> {FontSize -> 10*scale}],
             txtsty = txtsty /. (FontSize -> s_) :> (FontSize ->
scale*s)];
    Text[a, b, c, opt /. (TextStyle -> s_) -> (TextStyle -> txtsty)]
    ]

SkaleFonts[gr_, newsize_] :=
  Module[{imgsize, aratio},
    {imgsize, aratio} = {ImageSize, AspectRatio} /. AbsoluteOptions[gr];
    If[imgsize === Automatic, imgsize = 288];
    imgsize *= aratio;
    FullGraphics[gr]  /. a_Text :> ScaleText[a, newsize]
    ]

ScaleFonts[] sollte dann allen Text[] um den relativen Faktor
newsize vergr"ossern. Also

gr = Plot[Sin[x], {x, 0, Pi}, 
    Epilog -> {Text["hallo", {1.5, 0.5}, 
          TextStyle -> {FontSize -> 16, FontSlant -> 0.6}]}]

und schwups:

Show[SkaleFonts[gr, 1.4]]

wird alles gr"osser ...

Gruss
  Jens


Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html