2011-11-04 11 views
12

Sto provando a sovrapporre glifi da diversi tipi di carattere, ma è difficile farli allineare. Sono sicuro che dovrebbero allinearsi meglio di così. Come lo posso fare?Perché i glifi non si allineano se sono nella stessa grafica?

Graphics[ 
    {Opacity[0.1], 
     {Text[Style["a", FontFamily -> "Helvetica", 240]], 
     Text[Style["a", FontFamily -> "Arial", 240]]} 
    }] 

Inoltre, io sono interessato a disegnare il contorno - qui li ho selezionato, ma mi piacerebbe disegnarli.

Screenshot

Edit: Grazie! Con il vostro aiuto sono stato in grado di raggiungere la maggior parte di quello che stavo cercando di:

Manipulate[ 
Graphics[{{{Opacity[opacity], 
    Text[Style["Greats", Red, FontFamily -> "Helvetica", 180], {0, 
     0}, {Center, Baseline}]}, {Opacity[1 - opacity], 
    Text[Style["Greats", Blue, FontFamily -> "Arial", 180], {0, 
     0}, {Center, Baseline}]}}}], {opacity, 0.1, 1, 0.1}] 

Screenshot

risposta

10

Per impostazione predefinita, il testo è centrato (orizzontalmente e verticalmente) in un punto ei caratteri hanno caratteri di altezze diverse, con conseguente testo spostato. Per esempio confrontare la seguente:

Graphics[{Opacity[ 
    0.1], {Text[ 
    Style["agÄ", FontFamily -> "Helvetica", 240, 
    Background -> RGBColor[0.8, 0, 0, 0.2]]], 
    Text[Style["agÄ", FontFamily -> "Arial", 240, 
    Background -> RGBColor[0, 0, 0.8, 0.2]]]} 
    }] 
Graphics[{Opacity[ 
    0.1], {Text[ 
    Style["agA", FontFamily -> "Helvetica", 240, 
    Background -> RGBColor[0.8, 0, 0, 0.2]]], 
    Text[Style["agA", FontFamily -> "Arial", 240, 
    Background -> RGBColor[0, 0, 0.8, 0.2]]]} 
    }] 

enter image description here

Se si posiziona il testo lungo un bordo, potrebbe funzionare meglio per voi, anche se è in alcun modo garantita:

Graphics[{Opacity[ 
    0.1], {Text[ 
    Style["a", FontFamily -> "Helvetica", 240], {0, 0}, {Center, 
    Bottom}], 
    Text[Style["a", FontFamily -> "Arial", 240], {0, 0}, {Center, 
    Bottom}]}}] 

enter image description here

Modifica Utilizzo di Baseline come suggerito da Heike:

Graphics[{Opacity[ 
    0.1], {Text[ 
    Style["a", FontFamily -> "Helvetica", 240], {0, 0}, {Center, 
    Baseline}], 
    Text[Style["a", FontFamily -> "Arial", 240], {0, 0}, {Center, 
    Baseline}]}}] 

enter image description here

+9

Usando 'Baseline' invece di' Bottom' per l'offset in direzione verticale potrebbe anche funzionare meglio. – Heike

+0

@Heike Un buon punto, soprattutto perché questa impostazione non è documentata. (L'ho cercato un po 'prima di rispondere, ma non l'ho trovato nei documenti 'Text'.) –

+0

C'è un esempio che usa questa impostazione nella documentazione di' BaseLine'. – Heike

4

Per quanto riguarda la prima domanda, benvenuti nel mondo di diversi tipi di carattere. Hanno metriche diverse e questo è proprio come è. È possibile utilizzare Overlay o una delle opzioni grafiche come ImagePadding per spostarne una sull'altra.

Sulla seconda domanda, il secondo "esempio accurato" nel documentation on JoinedCurve mostra come utilizzare ExportString e ImportString.

Problemi correlati