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 的 Preflight 都抱怨同一种字体不一致。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>

Acrobat 的 Preflight 功能说

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

FontForge 确认 PDF 中 BBOLD7 的宽度(676,其中“Em Size”为 1000),并且 RUPS(或 $EDITOR)有效显示

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

造成这种不一致现象的因素是什么?

软件包似乎不会影响此问题。如果使用该类,或删除或将该软件包替换为,则pdfx问题会消失。article\scriptstyle\mathbbmathbbolamssymb

答案1

字体bbold7等最初是在 MetaFont 中设计的,并使用 MetaFont 的功能生成大量光学缩放字体。因此,对于每种字体大小,字体(包括字母宽度)都略有不同。(这就是为什么有bbold5/bbold7/bbold10。)这些 MetaFont 字体最终成为 PDF 中的 Type 3 位图字体,所以今天我们更喜欢矢量字体,在这种情况下是 Adob​​e 的 Type 1 格式。的矢量版本bbold仅存在三种尺寸:5710,但仅提供这三种尺寸会导致使用这些字体的所有 LaTeX 文档发生轻微变化。

特别是字体指标(主要是每个字符的宽度/深度/高度)不应该改变,无论您使用的是 Type 1 还是 MetaFont 版本,因此 LaTeX 仍然会加载所有大小的文件(TeX 从中读取字体指标) ,tfm这些文件最初具有单独的字体,即5678910和。1217

每个尺寸都映射到现有的封闭式 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 文件中正确报告。

但我建议首先尝试上述解决方案,因为为此创建虚拟字体要复杂得多。

相关内容