saltos salto original linea data content string fonts metrics postscript

string - salto - ¿Cómo se puede obtener la métrica de altura de una cadena en PostScript?



saltos de linea en jquery (3)

Esto parece funcionar la mayor parte del tiempo:

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

No funcionará para todos /FontType s.

Puede obtener el ancho de una cadena en la fuente actual con stringwidth y aunque esto realmente empuja las coordenadas de desplazamiento en la pila, el valor de y siempre parece ser inútil. ¿Hay alguna manera de determinar la altura exacta de una cuerda, que puede incluir o no descensores?


Ya he respondido esto en Cómo determinar la altura de la cadena en PostScript? , pero también es útil aquí.

Simplemente añadiendo a pipitas respuesta:

/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

El método espera que alguna fuente ya esté configurada. Funciona sobre la fuente seleccionada ( setfont ) y su tamaño ( scalefont ).

Uso (HÍpg) para obtener el cuadro delimitador más grande posible, usando caracteres en mayúscula acentuados y caracteres "debajo de la línea". El resultado es lo suficientemente bueno.

El enfoque alternativo se basa en la respuesta de dreamlax : algunas fuentes no son compatibles charpath operador de charpath .

Guardar y restaurar el contexto gráfico mantiene el punto actual en su lugar, por lo que no tiene ningún impacto sobre el "flujo" de su documento.

Espero haber ayudado.


stringwidth , como se dice, no devuelve la altura de la cadena. (En todos los casos que miré, el segundo entero en la pila después de ejecutar el stringwidth fue 0 - para cadenas que se ejecutan en dirección horizontal.) stringwidth da las coordenadas relativas del punto actual después de ejecutar un (string) show .

El PLRM tiene esto que decir sobre el stringwidth de stringwidth :

Tenga en cuenta que el ancho devuelto por el ancho de cuerda se define como el movimiento del punto actual. No tiene nada que ver con las dimensiones de los contornos del glifo.

Entonces, ¿qué funcionaría para tener en cuenta la altura de la cuerda? Las palabras mágicas para leer en PRLM son charpath y pathbbox . Prueba esto:

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

Calcula la altura de la cuerda (impresa en rojo) y usa esa información para intentar centrar un pequeño círculo relleno (impreso en negro) en el centro de su cuadro delimitador: