MetaFont: Ändert sich die Zeichenabmessung unveränderter Glyphen beim Hinzufügen neuer Glyphen?

MetaFont: Ändert sich die Zeichenabmessung unveränderter Glyphen beim Hinzufügen neuer Glyphen?

yhmathBeim Debuggen von mathematischen Schriftartelementen tritt ein sehr merkwürdiger Effekt auf . Ich erzeuge cmex10.tfmaus cmex10.mfund konvertiere die TFM- in eine PL-Datei.

Dann benenne ichnurBenennen Sie die Treiberdatei um in yrcmex10.mf, undhinzufügendie folgendeneuGlyphendefinitionen in bigdel.mf, ohne etwas in den restlichen Dateien zu ändern:

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;

Der einzige Unterschied zwischen der cmex10Schriftart und yrcmex10der Schriftart ist also die Hinzufügung der oben genannten Zeichen.

Wenn ich beide TFM-Dateien in PL umwandle und einen Diff-Befehl erstelle, sehe ich Änderungen innicht verwandtglpyphs, insbesondere die DPParameteränderungen:

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

Das ist sehr überraschend, ich hätte vermutet, dass sich die Glyphenabmessungen anderer unveränderter Glyphen nicht ändern. Darüber hinaus werden diese Änderungen größer, je mehr zusätzliche Glyphen ich hinzufüge.

Hat jemand eine Erklärung dafür?

Antwort1

Laut MetaFont bietet das Programm Folgendes:

Da es recht üblich ist, dass viele Zeichen die gleiche Höhe, Tiefe oder Kursivkorrektur haben, ist das TFM-Format auf 16 verschiedene Höhen, 16 verschiedene Tiefen und 64 verschiedene Kursivkorrekturen beschränkt.

Im Übrigen sollte die Beziehung width[0]=height[0]=depth[0]= italic[0]=0 immer gelten, so dass ein Index von Null einen Wert von Null impliziert.

Es können also höchstens 15 verschiedene Tiefenwerte außer 0 in einer einzelnen TFM-Datei vorhanden sein. Sehen wir uns nun die Tiefenwerte in Ihrer Datei yrcmex10.pl an:

     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)

(Liste generiert mit grep 'CHARDP' yrcmex10.pl|sort|uniq|nl)

Ihre Schriftart enthält also bereits die maximale Anzahl unterschiedlicher Tiefen, was die Änderungen erklärt: Die Tiefe von 0war 1.160013, aber dieser Wert ist nicht Teil der obigen Liste. Er müsste also hinzugefügt werden, aber dann gäbe es zu viele unterschiedliche Tiefen. Als MetaFont die zusätzlichen Zeichen las, erkannte es, dass es nicht alle Tiefen in der TFM-Datei speichern konnte. Einige Werte mussten also gerundet werden, und 1.135567und 1.160013liegen sehr nahe beieinander, was sie zu idealen Kandidaten macht.

Dies erklärt auch, warum die Änderung umso größer wird, je mehr zusätzliche Glyphen Sie hinzufügen: Wenn die neuen Glyphen wiederum unterschiedliche Tiefen haben, gibt es noch mehr unterschiedliche Tiefen, die MetaFont auf 15 reduzieren muss. Dies erfordert ein aggressiveres Vorgehen bei der „Wertvereinheitlichung“, was zu größeren Änderungen führt.

verwandte Informationen