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(TeX Live 2019 на Ubuntu 18.04 LTS) не сообщает об ошибках или предупреждениях. Однако и veraPDF, и Acrobat's 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's Preflight говорит

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

FontForge подтверждает ширину (676, где «Em Size» равен 1000) BBOLD7 в PDF, а 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 в конечном итоге стали растровыми шрифтами Type 3 в PDF, поэтому сегодня мы предпочитаем векторные шрифты, в данном случае в формате Adobe Type 1. Векторная версия bboldсуществует только в трех размерах: 5, 7и 10, но предоставление только этих трех размеров приведет к небольшим изменениям во всех документах LaTeX, использующих эти шрифты.

В частности, метрики шрифта (в основном ширина/глубина/высота каждого символа) не должны меняться, независимо от того, используете ли вы версию Type 1 или MetaFont, поэтому LaTeX по-прежнему загружает tfmфайлы (из которых TeX считывает метрики шрифта) для всех размеров, которые изначально имели отдельные шрифты, а именно 5, 6, 7, 8, 9, 10, 12и 17.

Каждый размер сопоставляется с закрытой существующей версией 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.

Но я бы рекомендовал сначала попробовать вышеприведенное решение, поскольку создание виртуальных шрифтов для него значительно сложнее.

Связанный контент