KOMA & mathbbol: PDF のフォント幅が間違っている

KOMA & mathbbol: PDF のフォント幅が間違っている

パッケージと一緒に KOMA-Script を使用するにはどうすればよいでしょうか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(Ubuntu 18.04 LTS上のTeX Live 2019)はエラーや警告を報告しません。しかし、veraPDFとAcrobatのプリフライトはどちらも同じフォントの不一致について文句を言います。veraPDFは次のように述べています。

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

アクロバットのプリフライトでは

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

FontForgeはPDF内のBBOLD7の幅(「Emサイズ」が1000の場合676)を確認し、RUPS(または$EDITOR)は効果的に表示します。

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

この矛盾のきっかけは何でしょうか?

パッケージはpdfxこの問題に影響しないようです。クラスarticleが使用されるか、または\scriptstyle\mathbb削除されるか、パッケージmathbbolが に置き換えられると、問題は解消されますamssymb

答え1

フォントbbold7などは元々 MetaFont で設計され、MetaFont の機能を使用して光学的に拡大縮小されたフォントを多数生成しました。そのため、フォント サイズごとに、文字の幅を含むフォントがわずかに異なります ( が存在するのはそのためですbbold5/bbold7/bbold10)。これらの MetaFont フォントは PDF では Type 3 ビットマップ フォントになったため、今日ではベクター フォント (この場合は Adob​​e の Type 1 形式) が好まれています。 のベクター バージョンは、 、 のbbold3 つのサイズのみで存在しますが、この53つのサイズのみを提供すると、これらのフォントを使用するすべての LaTeX ドキュメントにわずかな変更が生じます。710

特に、フォント メトリック (主に各文字の幅/深さ/高さ) は、Type 1 バージョンと MetaFont バージョンのどちらを使用しても変わらないはずなので、LaTeX は、もともと別々のフォント (、、、、、、、および)を持っtfmていたすべてのサイズのファイル (TeX がフォント メトリックを読み取る場所) を引き続き読み込みます。56789101217

すべてのサイズは、閉じた既存の Type 1 バージョンにマッピングされます。次に、この最も近いバージョンが適切なサイズになるように再スケールされます。これにより、すべての光学サイズに元々存在していたわずかな変化はなくなりますが、TeX は元の tfm ファイルを引き続き使用するため、TeX はすべての文字に同じ量のスペースを確保し、既存のドキュメントの全体的な変更が少なくなります。これらのtfmファイルは実際にはベクター フォントが存在しないフォントのバージョンを記述するため、メトリック、特に幅はフォント ファイルの実際の幅と一致しず、これらのエラーが発生します。

これについて何ができるでしょうか? フォント メトリックを少し変更しても構わない場合は、LaTeX に既存のフォントのメトリックのみを使用するように指示できます。

% \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}

代わりに既存のソリューションを好み、対応するフォントが存在しなくても元のフォントのメトリックを保持したい場合は、bbold6/8/9/12/17から再スケールされたグリフを明示的に読み込む仮想フォントを作成できますbbold5/7/10。間違ったフォントメトリックを使用する代わりに仮想フォントを使用すると、pdfTeX が実行内容を理解し、これを PDF ファイルで正しく報告できるようになります。

ただし、仮想フォントの作成は非常に複雑なので、まずは上記の解決策を試すことをお勧めします。

関連情報