¿Está familiarizado con el código PostScript que está utilizando? ¿O es simplemente copiado y pegado a ciegas desde algún lugar? Si quieres entenderlo, debes buscar en Google "Referencia del lenguaje PostScript" o "Libro rojo" o "PLRM". Estos recursos están disponibles en formato PDF de Adobe.
que el fragmento del PostScript utiliza los siguientes pasos:
(test)
lugares la "prueba" cadena en la parte superior de la pila.
dup
duplica el elemento superior de la pila. (Ahora tendrá la cadena dos veces en la pila.)
stringwidth
. Después de que se ejecuta este operador, se habrá consumido la cadena de "prueba" más alta y se habrán agregado dos valores a la pila en su lugar: la altura de la cuerda (más alta) y la anchura de la cuerda (la segunda desde arriba). [Actualización:En realidad, "la altura de cadena" no es del todo correcto - es más bien el desplazamiento vertical del punto actual después de terminar de dibujar la cadena ...]
- A continuación, se utiliza
pop
. Esto simplemente elimina el valor superior en la pila. Ahora, solo el ancho de la cadena permanece en la parte superior de la pila.
2 div
divide ese valor por 2 y deja el resultado (la mitad del ancho de la cuerda).
neg
niega el valor más alto en la pila. Ahora ese valor negativo está arriba en la pila.
0
coloca el valor "0" en la parte superior de la pila.
rmoveto
consume los dos valores más altos en la pila y mueve el punto actual por esa distancia (la mitad del ancho de la cuerda) a la izquierda.
show
consume la primera cadena de "prueba" que permaneció todo el tiempo en la parte inferior de la pila y la "muestra".
¿Qué debería tener en cuenta la altura de la cuerda? Por mucho que su última línea:
200 700 moveto (test) dup true charpath pathbbox 3 -1 roll sub 2 div neg 3 1 roll sub 2 div exch 200 700 moveto rmoveto show"
Para comprender mis cambios de buscar el significado de charpath
, div
, exch
, pathbbox
, roll
y sub
operadores en el Libro Rojo.
Este comando utiliza Ghostscript para crear un archivo PDF en Windows a partir del código (más fácil de ver y comprobar los resultados):
gswin32c.exe^
-o my.pdf^
-sDEVICE=pdfwrite^
-c "/Helvetic-Oblique findfont 10 scalefont setfont 200 700 1 0 360 arc fill 0 0 moveto (test test) dup true charpath pathbbox 3 -1 roll sub 2 div neg 3 1 roll sub 2 div exch 200 700 moveto rmoveto show"
El uso de Linux:
gs \
-o my.pdf \
-sDEVICE=pdfwrite \
-c "/Helvetic-Oblique findfont 10 scalefont setfont 200 700 1 0 360 arc fill 0 0 moveto (test test) dup true charpath pathbbox 3 -1 roll sub 2 div neg 3 1 roll sub 2 div exch 200 700 moveto rmoveto show"
formas Mejor legibles son:
gswin32c^
-o my.pdf^
-sDEVICE=pdfwrite^
-c "/Helvetic-Oblique findfont 10 scalefont setfont"^
-c "200 700 1 0 360 arc fill 0 0 moveto (test test) dup"^
-c "true charpath pathbbox 3 -1 roll sub 2 div neg 3 1 roll"^
-c "sub 2 div exch 200 700 moveto rmoveto show"
y
gs \
-o my.pdf \
-sDEVICE=pdfwrite \
-c "/Helvetic-Oblique findfont 10 scalefont setfont" \
-c "200 700 1 0 360 arc fill 0 0 moveto (test test) dup" \
-c "true charpath pathbbox 3 -1 roll sub 2 div neg 3 1 roll" \
-c "sub 2 div exch 200 700 moveto rmoveto show"
+1 para su agradable explicación del PostScript. – DaveB