Domanda

È possibile ottenere la larghezza di una stringa del font corrente con stringwidth e anche se questo effettivamente spinge compensato coordinate in pila, il valore y sembra sempre essere inutile. C'è un modo per determinare l'altezza esatta di una stringa, che può o non può includere discendenti?

È stato utile?

Soluzione

stringwidth, come si dice, non restituisce l'altezza della stringa. (In ogni caso ho guardato, il secondo intero in pila dopo l'esecuzione 0 era (string) show -. Stringhe che corrono in direzione orizzontale) charpath dà le coordinate relative del currentpoint dopo l'esecuzione di un pathbbox .

Il PLRM ha questo da dire su <=>:

  

Si noti che la larghezza restituito da stringwidth è definito come il movimento della corrente   punto. Non ha nulla a che fare con le dimensioni dei contorni dei glifi.

Quindi, quello che avrebbe funzionato per tenere conto l'altezza della corda? Le parole magiche di leggere circa in PRLM sono <=> e <=>. Prova questo:

%!
/Helvetica findfont 60 scalefont setfont
200 700 4 0 360 arc fill 
200 700 moveto (test test) dup 
true charpath pathbbox 
3 -1 roll sub 2 div neg 3 1 roll sub 2 div exch 
1 0 0 setrgbcolor
200 700 moveto rmoveto show showpage

Si calcola della stringa (stampati nel colore rosso) di altezza e usa queste informazioni per cercare di centro di un piccolo cerchio pieno (stampato in nero) nel centro del suo rettangolo di selezione:

Esempio visualizzato

Altri suggerimenti

Ho già risposto a questa in Come determinare l'altezza stringa nel PostScript? , ma è utile anche qui.

Basta aggiungere a pipitas Risposta:

/textheight { 
    gsave                                  % save graphic context
    {                            
        100 100 moveto                     % move to some point 
        (HÍpg) true charpath pathbbox      % gets text path bounding box (LLx LLy URx URy)
        exch pop 3 -1 roll pop             % keeps LLy and URy
        exch sub                           % URy - LLy
    }
    stopped                                % did the last block fail?
    {
        pop pop                            % get rid of "stopped" junk
        currentfont /FontMatrix get 3 get  % gets alternative text height
    }
    if
    grestore                               % restore graphic context
} bind def

/jumpTextLine { 
    textheight 1.25 mul                    % gets textheight and adds 1/4
    0 exch neg rmoveto                     % move down only in Y axis
} bind def

Il metodo si aspetta che qualche tipo di carattere è già impostato. Funziona sopra il font selezionato (setfont) e le sue dimensioni (scalefont).

Io uso (HÍpg) per ottenere il più grande riquadro possibile, utilizzando caratteri maiuscoli accentuati e caratteri "sotto la linea". Il risultato è abbastanza buono.

L'approccio alternativo ruba da dreamlax 's risposta -. Alcuni font non supportano charpath operatore

Salvataggio e ripristino del contesto grafico mantiene il punto corrente a posto, quindi non ha alcun impatto sul "flusso" del documento.

Speranza ho aiutato.

Questo sembra funzionare la maggior parte del tempo:

/fontheight { currentfont /FontMatrix get 3 get } bind def
/lineheight { fontheight 1.2 mul } bind def

Non funzionerà per tutti i /FontType s.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top