![¿Es esto un error en el archivo pfb o un error en el "glifo" de metapost?](https://rvso.com/image/281597/%C2%BFEs%20esto%20un%20error%20en%20el%20archivo%20pfb%20o%20un%20error%20en%20el%20%22glifo%22%20de%20metapost%3F%20.png)
Recién comencéjugandocon el "glifo" de metapost. Descubrí (MWE a continuación) una anomalía con las rutas en serifas para la fuente cm establecida en estos experimentos.
Punto de partida: parece que metapost obtiene los glifos del archivo .pfb para la fuente (por ejemplo .../texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb
).
Mi pregunta es cuál de los siguientes está causando las anomalías, para poder determinar si se justifica un informe de error y a quién enviarlo...
- Hay un error en el archivo .pfb. Ya que es un camino quecasise duplica sobre sí mismo, lo que puede resultar en que no se llenen ningún píxel, por lo que nadie se ha dado cuenta.
- Me equivoco acerca de dónde obtiene Metapost los glifos, y el error está dondequiera que esté.
- Hay un error en el código de glifos en metapost.
- Algo más.
Cosas que he hecho:
- Verifiqué que otros programas que usan estas fuentes usan el mismo archivo .pfb (sí, AFAICT para
pdflatex
y paralatex|dvips|pstopdf
) y observé los caracteres muy ampliados en la salida PDF de estos; no hubo suerte. - Busqué otras herramientas para extraer glifos de un .pfb; no encontré ninguna. (Sería bueno recibir consejos sobre esto)
- Revisé los trazos
cmr.mf
(en realidadcmbase.mf
): las serifas de Knuth son un trazo separado del resto de la letra, por lo que no hay pista allí. - Busqué las diversas herramientas que pueden haberse utilizado para producir estas fuentes tipo 1 (MFTOEPS, etc.) de la fuente de Knuth, pero decidí que eso está más allá de mi experiencia.
- Busqué en Texexchange y más allá.
- Verifiqué la información de la versión (MetaPost=v1.504, cmr10.pfb=v003.002) y revisé el registro de cambios para ver metapost más reciente.
Mi MWE muestra que el límite del glifo se sobrepasa, luego se duplica en el serif y una pequeña cantidad de área adicional dentro del glifo para "I" en cmr10
. Debido a la geometría de las serifas, cmti10
todavía hay un exceso pero no hay área adicional. También aparece en algunas otras fuentes (negrita, inclinada) en el conjunto de fuentes cm y en serifas tanto en mayúsculas como en minúsculas.
picture pic[];
path p[];
pair d;
pic0=btex I\it I etex; % <---- the text to be analysed
_i:=1;
for $ within pic0:
p[_i]=pathpart glyph (textpart $) of (fontpart $) scaled 1/100 shifted llcorner $ scaled 20;
_i:=_i+1;
endfor
beginfig(1)
for i = 1 upto 20:
if known p[i]:
fill p[i] withcolor (.8,.8,.9);
for j = 0 upto (length(p[i])-1):
draw point j of p[i]--postcontrol j of p[i] dashed withdots scaled 1/4;
draw point j+1 of p[i]--precontrol j+1 of p[i] dashed withdots scaled 1/4;
fill fullcircle scaled 0.5mm shifted point j of (p[i]);
d:=direction j of p[i];
if abs(d)=0: d:=point j+4 of p[i] - point j-4 of p[i]; fi
a:= if abs(d)=0: 0 else: angle(d) fi;
draw thelabel.lft(decimal j infont "cmbx5",(0,0))
rotated (a+90)
shifted (point j of (p[i] )) withcolor blue;
endfor
draw p[i] withpen pencircle scaled 0.1;
fi
endfor
endfig;
bye
Respuesta1
Este problema parece estar relacionado con el uso de pathpart
en la imagen devuelta por glyph
. Considere el siguiente programa:
prologues := 3;
outputtemplate := "glyph%c.eps";
beginfig(1);
picture a;
a = glyph "I" of "cmti12";
draw a withcolor .9 white;
draw pathpart a withcolor red;
endfig;
end.
lo que produce la siguiente imagen. Puedes ver claramente los dentados en las serifas abombadas (en rojo), pero observa que no hay dentados en la parte gris.
El glyph
operador devuelve una imagen del carácter dado en la fuente dada. Si solo tomo draw
esa imagen, entonces el contorno se ve correcto (la parte gris de la imagen). Pero si dibujo el camino de regreso pathpart
, obtendremos irregularidades adicionales en los platos.
Esto muestra que no hay ningún error en el archivo de fuente, sino que hay un problema al pathpart
aplicarlo a la imagen devuelta por glyph
. Le planteé un problema al equipo de desarrollo de MP ->
http://tracker.luatex.org/view.php?id=935
Actualizar: A partir del 15 de mayo de 2015, este error ya está solucionado.
Aquí está el resultado usando una mpost
versión 1.999 recién compilada: