KOMA & mathbbol: falsche Schriftbreite im PDF

KOMA & mathbbol: falsche Schriftbreite im PDF

Wie kann ich KOMA-Script zusammen mit dem Paket verwenden mathbbol?

%\documentclass{article} % works
\documentclass{scrartcl} % fails

\usepackage{mathbbol}
\usepackage{pdfx} % just to calm PDF/A-validators a bit

\begin{document}
\thispagestyle{empty}
$\scriptstyle\mathbb{E}$
\end{document}

pdflatex(TeX Live 2019 auf Ubuntu 18.04 LTS) meldet weder Fehler noch Warnung. Allerdings beklagen sowohl veraPDF als auch Acrobats Preflight ein und dieselbe Schriftartinkonsistenz. veraPDF gibt an

<validationReport profileName="PDF/A-1B validation profile" statement="PDF file is not compliant with Validation Profile requirements." isCompliant="false">
  <details passedRules="102" failedRules="1" passedChecks="398" failedChecks="1">
    <rule specification="ISO 19005-1:2005" clause="6.3.6" testNumber="1" status="failed" passedChecks="0" failedChecks="1">
      <description>For every font embedded in a conforming file and used for rendering, the glyph width information in the font dictionary and 
                   in the embedded font program shall be consistent.</description>
      <object>Glyph</object>
      <test>renderingMode == 3 || isWidthConsistent == null || isWidthConsistent == true</test>
      <check status="failed">
        <context>root/document[0]/pages[0](5 0 obj PDPage)/contentStream[0](7 0 obj PDContentStream)/operators[11]/usedGlyphs[0](ZCDUID+BBOLD7 69 0  0)</context>
      </check>
    </rule>
  </details>
</validationReport>

und Acrobats Preflight sagt

List of glyph width mismatches (PDF data versus embedded font data)
  649.3 versus 676.593 (676.593/1000)

FontForge bestätigt die Breite (676, wobei "Em Size" 1000 ist) von BBOLD7 im PDF und RUPS (oder $EDITOR) zeigt effektiv

<<  /Type /Font  /FirstChar 69  /LastChar 69  /Widths [649.3]  …  >>

Was ist der Auslöser dieser Inkonsistenz?

Das Paket pdfxscheint dieses Problem nicht zu beeinflussen. Das Problem verschwindet, wenn die Klasse articleverwendet oder \scriptstyleentfernt \mathbbwird oder das Paket mathbboldurch ersetzt wird amssymb.

Antwort1

Die Schriftarten bbold7usw. wurden ursprünglich in MetaFont entworfen und verwendeten die Funktionen von MetaFont, um viele optisch skalierte Schriftarten zu generieren. Daher ist die Schriftart, einschließlich der Breite der Buchstaben, für jede Schriftgröße leicht unterschiedlich. (Deshalb gibt es bbold5/bbold7/bbold10.) Diese MetaFont-Schriftarten endeten als Type-3-Bitmap-Schriftarten im PDF, daher bevorzugen wir heute Vektorschriftarten, in diesem Fall im Type-1-Format von Adobe. Die Vektorversion von bboldexistiert nur in drei Größen: 5, 7und 10, aber die Bereitstellung nur dieser drei Größen würde zu leichten Änderungen an allen LaTeX-Dokumenten führen, die diese Schriftarten verwenden.

Insbesondere die Schriftmetriken (hauptsächlich Breite/Tiefe/Höhe jedes Zeichens) sollten sich nicht ändern, unabhängig davon, ob Sie die Type 1- oder die MetaFont-Version verwenden, sodass LaTeX weiterhin tfmDateien (aus denen TeX die Schriftmetriken liest) für alle Größen lädt, die ursprünglich separate Schriftarten hatten, nämlich 5, 6, 7, , 8, 9, 10, 12und 17.

Jede Größe wird der geschlossenen, bestehenden Type-1-Version zugeordnet. Anschließend wird diese nächstliegende Version neu skaliert, um die richtige Größe zu erhalten. Dadurch gehen die leichten Abweichungen verloren, die ursprünglich in allen optischen Größen vorhanden waren. Da TeX jedoch immer noch die ursprünglichen TFM-Dateien verwendet, reserviert TeX für jedes Zeichen immer noch die gleiche Menge an Platz, was insgesamt zu weniger Änderungen in bestehenden Dokumenten führt. Da diese tfmDateien nun tatsächlich Versionen der Schriftart beschreiben, für die keine Vektorschriftarten existieren, stimmen die Maße, insbesondere die Breite, nicht mit der tatsächlichen Breite in der Schriftartdatei überein, was zu diesen Fehlern führt.

Was können Sie dagegen tun? Wenn es Ihnen nichts ausmacht, die Schriftmetrik ein wenig zu ändern, können Sie LaTeX anweisen, nur die Metrik für die vorhandenen Schriftarten zu verwenden:

% \documentclass[11pt]{article} % works
\documentclass[11pt]{scrartcl} % works

\DeclareFontFamily{U}{bbold}{}
\DeclareFontShape{U}{bbold}{m}{n}
{  <5> <6> bbold5
   <7> <8> bbold7
   <9> <10> <10.95> <12> <14.4> <17.28> <20.74> <24.88> bbold10
}{}
\usepackage{mathbbol}
\usepackage{pdfx} % just to calm PDF/A-validators a bit

\begin{document}
\thispagestyle{empty}
$\scriptstyle\mathbb{E}$
\end{document}

Wenn Sie stattdessen die vorhandene Lösung bevorzugen und die Metriken der Originalschriften beibehalten möchten, auch wenn die entsprechenden Schriften nicht mehr existieren, können Sie virtuelle Schriften erstellen, bbold6/8/9/12/17die die neu skalierten Glyphen explizit von laden bbold5/7/10. Die Verwendung virtueller Schriften anstelle der Verwendung falscher Schriftmetriken stellt sicher, dass pdfTeX versteht, was Sie tun, und dies in der PDF-Datei korrekt meldet.

Ich würde aber empfehlen, zunächst die obige Lösung auszuprobieren, da die Erstellung virtueller Schriftarten hierfür deutlich komplizierter ist.

verwandte Informationen