Question

Vous pouvez obtenir la largeur d'une chaîne dans la police en cours avec et bien que cela stringwidth pousse les coordonnées de décalage en fait sur la pile, la valeur y semble toujours être inutile. Y at-il un moyen de déterminer la hauteur exacte d'une chaîne, qui peuvent ou peuvent ne pas inclure descendeurs?

Était-ce utile?

La solution

stringwidth, comme il est dit, ne retourne pas la hauteur de chaîne. (Dans tous les cas, je regardé, le second nombre entier sur la pile après l'exécution 0 était (string) show -. Pour les chaînes qui courent dans la direction horizontale) charpath donne les coordonnées relatives de l'currentpoint après l'exécution d'un pathbbox .

Le PLRM a ceci à dire au sujet de <=>:

  

Notez que la largeur retournée par stringwidth est défini comme le mouvement du courant   point. Cela n'a rien à voir avec les dimensions des contours de glyphe.

Alors, que travaillerait à prendre en compte la hauteur de la chaîne? Les mots magiques à lire sur dans PRLm sont et <=> <=>. Essayez ceci:

%!
/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

Il calcule de la chaîne (imprimé en rouge) de hauteur et utilise cette information pour essayer et le centre d'un petit cercle rempli (imprimé en noir) dans le centre de la zone de délimitation:

Autres conseils

Je l'ai déjà répondu à cette Comment déterminer la hauteur de chaîne dans PostScript , mais il est utile ici aussi.

Il suffit d'ajouter à pipitas réponse:

/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

La méthode prévoit que certaines polices est déjà définie. Il fonctionne sur la police sélectionnée (setfont) et sa taille (scalefont).

J'utilise (HÍpg) pour obtenir la plus grande zone de délimitation possible, en utilisant des caractères majuscules accentués et les caractères « ligne ci-dessous ». Le résultat est assez bon.

L'approche alternative vole dreamlax de ' réponse -. Certaines polices ne prennent pas en charge l'opérateur charpath

Sauvegarde et restauration du contexte graphique maintient le point actuel en place, il n'a pas d'impact sur le « flux » de votre document.

Je l'ai aidé l'espoir.

Cela semble fonctionner la plupart du temps:

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

Il ne fonctionne pas pour tous les s /FontType.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top