MetaFont: ¿la dimensión de los caracteres de los glifos sin cambios cambia al agregar nuevos glifos?

MetaFont: ¿la dimensión de los caracteres de los glifos sin cambios cambia al agregar nuevos glifos?

Tengo un efecto muy extraño al depurar yhmathelementos de fuentes matemáticas. Estoy generando cmex10.tfmdesde cmex10.mfy convierto el archivo tfm a pl.

Luego cambio el nombresolocambie el nombre del archivo del controlador a yrcmex10.mfyagregarla siguientenuevodefiniciones de glifos en bigdel.mf, sin cambiar nada en el resto de archivos:

cmchar "\big left parenthesis";
beginchar(oct"200",8u#,rule_thickness#,2.5dh#-rule_thickness#);
adjust_fit(1.75u#,-.25u#); left_paren(hair,stem); endchar;

cmchar "\big left parenthesis";
beginchar(oct"201",10u#,rule_thickness#,3.5dh#-rule_thickness#);
adjust_fit(2.25u#,-.25u#); left_paren(hair,stem); endchar;


cmchar "\big left parenthesis";
beginchar(oct"202",12u#,rule_thickness#,4.5dh#-rule_thickness#);
adjust_fit(2.75u#,-.25u#); left_paren(hair,stem); endchar;

cmchar "\big left parenthesis";
beginchar(oct"203",13u#,rule_thickness#,5dh#-rule_thickness#);
adjust_fit(3u#,-.25u#); left_paren(hair,stem); endchar;


cmchar "\big left parenthesis";
beginchar(oct"204",15u#,rule_thickness#,6dh#-rule_thickness#);
adjust_fit(3.5u#,-.25u#); left_paren(hair,stem); endchar;

cmchar "\big left parenthesis";
beginchar(oct"205",17u#,rule_thickness#,7dh#-rule_thickness#);
adjust_fit(4u#,-.25u#); left_paren(hair,stem); endchar;

cmchar "\big left parenthesis";
beginchar(oct"206",19u#,rule_thickness#,8dh#-rule_thickness#);
adjust_fit(4.5u#,-.25u#); left_paren(hair,stem); endchar;

Entonces, la única diferencia entre cmex10fuente y yrcmex10fuente es la adición de los caracteres anteriores.

Al convertir tfm a pl y hacer una diferencia, veo cambios enno relacionadoglpyphs, en particular los DPcambios de parámetros:

--- cmex10.pl   2019-03-07 09:30:01.263513678 +0900
+++ yrcmex10.pl 2019-03-07 09:52:25.578670436 +0900
@@ -1,7 +1,7 @@
 (DESIGNSIZE R 10.0)
 (COMMENT DESIGNSIZE IS IN POINTS)
 (COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
-(CHECKSUM O 37254272422)
+(CHECKSUM O 35311171576)
 (FONTDIMEN
    (SLANT R 0.0)
    (SPACE R 0.0)
@@ -20,85 +20,85 @@
 (CHARACTER O 0
    (CHARWD R 0.458336)
    (CHARHT R 0.039999)
-   (CHARDP R 1.160013)
+   (CHARDP R 1.135567)
    (NEXTLARGER O 20)
    )
 (CHARACTER O 1
    (CHARWD R 0.458336)
    (CHARHT R 0.039999)
-   (CHARDP R 1.160013)
+   (CHARDP R 1.135567)
    (NEXTLARGER O 21)
    )
...

Esto es muy sorprendente, habría adivinado que las dimensiones de los glifos de otros glifos que no han cambiado no cambian. Además, estos cambios se vuelven mayores cuanto más glifos adicionales agrego.

¿Alguien tiene una explicación para esto?

Respuesta1

Según MetaFont, el programa:

Dado que es bastante común que muchos caracteres tengan la misma altura, profundidad o corrección en cursiva, el formato TFM impone un límite de 16 alturas diferentes, 16 profundidades diferentes y 64 correcciones en cursiva diferentes.

Por cierto, la relación ancho[0]=alto[0]=profundidad[0]= cursiva[0]=0 siempre debe mantenerse, de modo que un índice de cero implica un valor de cero.

Por lo tanto, puede haber como máximo 15 valores de profundidad diferentes además de 0 en un único archivo TFM. Ahora veamos los valores de profundidad en su yrcmex10.pl:

     1     (CHARDP R 0.300003)
     2     (CHARDP R 0.580007)
     3     (CHARDP R 0.900009)
     4     (CHARDP R 1.000013)
     5     (CHARDP R 1.135567)
     6     (CHARDP R 1.480014)
     7     (CHARDP R 1.780019)
     8     (CHARDP R 2.060022)
     9     (CHARDP R 2.222246)
    10     (CHARDP R 2.360025)
    11     (CHARDP R 2.660028)
    12     (CHARDP R 2.9600315)
    13     (CHARDP R 3.560038)
    14     (CHARDP R 4.160044)
    15     (CHARDP R 4.76005)

(Lista generada usando grep 'CHARDP' yrcmex10.pl|sort|uniq|nl)

Entonces su fuente ya contiene el número máximo de profundidades distintas, lo que explica los cambios: La profundidad de 0era 1.160013, pero este valor no forma parte de la lista anterior. Así que habría que añadirlo, pero entonces habría demasiadas profundidades distintas. Entonces, cuando MetaFont leyó los caracteres adicionales, se dio cuenta de que no podía almacenar todas las profundidades en el archivo TFM. Por lo tanto, algunos valores tuvieron que redondearse y 1.135567están 1.160013muy cerca, lo que los convierte en candidatos ideales.

Esto también explica por qué el cambio se vuelve mayor cuanto más glifos adicionales se agregan: si los nuevos glifos nuevamente tienen diferentes profundidades, hay incluso más profundidades distintas que MetaFont tiene que reducir a 15. Esto requiere ser más agresivo en cuanto a la "unificación de valores", lo que resulta en cambios más grandes.

información relacionada