KOMA & mathbbol: largura de fonte errada em PDF

KOMA & mathbbol: largura de fonte errada em PDF

Como posso usar o KOMA-Script junto com o pacote 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 no Ubuntu 18.04 LTS) não relata nenhum erro ou aviso. No entanto, tanto o veraPDF quanto o Preflight do Acrobat reclamam da mesma inconsistência de fonte. estados 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>

e o Preflight do Acrobat diz

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

FontForge confirma a largura (676 onde "Em Size" é 1000) de BBOLD7 no PDF e RUPS (ou $EDITOR) mostra efetivamente

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

Qual é o gatilho para essa inconsistência?

O pacote pdfxparece não afetar esse problema. O problema desaparece se a classe articlefor usada, ou \scriptstyleremovida \mathbb, ou se o pacote mathbbolfor substituído por amssymb.

Responder1

As fontes bbold7etc. foram originalmente projetadas em MetaFont e usaram os recursos do MetaFont para gerar muitas fontes em escala óptica. Portanto, para cada tamanho de fonte, a fonte, incluindo a largura das letras, é ligeiramente diferente. (É por isso que existem bbold5/bbold7/bbold10.) Essas fontes MetaFont acabaram como fontes bitmap Tipo 3 no PDF, então hoje preferimos fontes vetoriais, neste caso no formato Tipo 1 da Adobe. A versão vetorial de bboldexiste apenas em três tamanhos: 5, 7e 10, mas apenas fornecer esses três tamanhos levaria a pequenas alterações em todos os documentos LaTeX que usam essas fontes.

Especialmente as métricas de fonte (principalmente largura/profundidade/altura de cada caractere) não devem mudar se você usar a versão Type 1 ou MetaFont, então o LaTeX ainda carrega tfmarquivos (de onde o TeX lê as métricas de fonte) para todos os tamanhos que originalmente tinham fontes separadas , que são 5, 6, 7, 8, 9, 10, 12e 17.

Cada tamanho é mapeado para a versão Tipo 1 existente fechada. Em seguida, esta versão mais próxima é redimensionada para chegar ao tamanho certo. Isso perde as pequenas variações que estavam originalmente presentes em todos os tamanhos ópticos, mas como o TeX ainda usa os arquivos tfm originais, o TeX ainda reserva a mesma quantidade de espaço para cada caractere, levando a menos alterações gerais nos documentos existentes. Agora, como esses tfmarquivos realmente descrevem versões da fonte para as quais não existem fontes vetoriais, as métricas, especialmente a largura, não correspondem à largura real no arquivo de fonte, o que leva a esses erros.

O que você pode fazer sobre isso? Se você não se importa em alterar um pouco as métricas das fontes, você pode dizer ao LaTeX para usar apenas as métricas das fontes existentes:

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

Se você preferir a solução existente e quiser manter as métricas das fontes originais, mesmo que as fontes correspondentes não existam mais, você poderá criar fontes virtuais bbold6/8/9/12/17que carreguem explicitamente os glifos redimensionados de bbold5/7/10. Usar fontes virtuais em vez de apenas usar métricas de fontes erradas garante que o pdfTeX entenda o que você está fazendo e relate isso corretamente no arquivo PDF.

Mas eu recomendaria tentar primeiro a solução acima, porque criar fontes virtuais para isso é significativamente mais complicado.

informação relacionada