MetaFont: a dimensão dos caracteres dos glifos inalterados muda ao adicionar novos glifos?

MetaFont: a dimensão dos caracteres dos glifos inalterados muda ao adicionar novos glifos?

Tenho um efeito muito estranho ao depurar yhmathitens de fontes matemáticas. Estou gerando cmex10.tfma partir de cmex10.mfe converto o arquivo tfm em pl.

Então eu renomeioapenasrenomeie o arquivo do driver para yrcmex10.mfeadicionara seguirnovodefinições de glifos em bigdel.mf, sem alterar nada no restante dos arquivos:

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;

Portanto, a única diferença entre a cmex10fonte e yrcmex10a fonte é a adição dos caracteres acima.

Convertendo tfm para pl e fazendo uma diferença, vejo mudanças emnão relacionadoglpyphs, em particular o DPparâmetro muda:

--- 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)
    )
...

Isso é muito surpreendente, eu teria adivinhado que as dimensões do glifo de outros glifos não alterados não mudam. Além disso, essas mudanças se tornam maiores quanto mais glifos eu adiciono.

Alguém tem uma explicação para isso?

Responder1

De acordo com MetaFont, o programa:

Como é bastante comum que muitos caracteres tenham a mesma altura, profundidade ou correção de itálico, o formato TFM impõe um limite de 16 alturas diferentes, 16 profundidades diferentes e 64 correções de itálico diferentes.

Aliás, a relação largura[0]=altura[0]=profundidade[0]= itálico[0]=0 deve sempre ser mantida, de modo que um índice zero implica um valor zero.

Portanto, pode haver no máximo 15 valores de profundidade diferentes além de 0 em um único arquivo TFM. Agora vamos dar uma olhada nos valores de profundidade em seu 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 gerada usando grep 'CHARDP' yrcmex10.pl|sort|uniq|nl)

Portanto, sua fonte já contém o número máximo de profundidades distintas, o que explica as alterações: A profundidade de 0was 1.160013, mas esse valor não faz parte da lista acima. Portanto, teria que ser adicionado, mas haveria muitas profundidades distintas. Portanto, quando o MetaFont leu os caracteres adicionais, percebeu que não poderia armazenar todas as profundidades no arquivo TFM. Portanto, alguns valores tiveram que ser arredondados e 1.135567estão 1.160013muito próximos, tornando-os candidatos ideais.

Isso também explica por que a mudança se torna maior quanto mais glifos adicionais você adiciona: se os novos glifos novamente tiverem profundidades diferentes, há ainda mais profundidades distintas que o MetaFont precisa reduzir para 15. Isso requer ser mais agressivo em relação à "unificação de valores", resultando em mudanças maiores.

informação relacionada