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: