调试“字体形状未定义”和“损坏的 NFSS 表”(T5、concretevn 和 sig-alternate)

调试“字体形状未定义”和“损坏的 NFSS 表”(T5、concretevn 和 sig-alternate)

有人告诉我查看一下由...生成的我的一个 PDF 中的字体是否存在未指明的问题pdflatex。我没有发现任何明显的问题,除了无害的问题:

LaTeX Font Warning: Font shape `T1/lmr/bx/sc' undefined
(Font)              using `T1/lmr/bx/n' instead on input line 103.

嗯,我想要的是将部分文本用小写字母书写,我喜欢具体化;然而,我不知道的是,这是越南语字体,它遵循 T5 编码!我直到找到并查看后才意识到这一点concretevn-test.tex

所以我想我试着用一个最小的例子来看一下这个问题,我认为使用这种字体时存在一些问题,替代 ACM LaTeX2e 样式文件 V2.4(2009 年 4 月 CLS)(从ACM SIG 会议论文集模板 — 计算机协会)。

article首先,使用默认文档类(调用文件fonttest.tex)时似乎没有任何问题:

\documentclass{article}

\usepackage[T5]{fontenc}    % must have for new font selection style (11533 bytes PDF size)
                            % , else on \fontencoding{T5} line:
                            %% ! LaTeX Error: Encoding scheme `T5' unknown.
                            % ... not needed for old (?) font selection style;
                            % but if used, 11534 bytes - if not used, 17846 bytes of PDF size


%%%%% old (?) font selection style
% \newfont{\myscfont}{vncccsc10 scaled 900}

\begin{document}

This is a test of normal text... This is a test of normal text... This is a test of normal text... This is a test of normal text...

{
%%%%% old (?) font selection style
% \myscfont

%%%%% new font selection style
\fontencoding{T5}
\fontfamily{ccr}
\fontseries{m}
\fontshape{sc}
\fontsize{10}{12}
\selectfont
  Trying Small Caps Out...
}

This is a test of normal text... This is a test of normal text... This is a test of normal text... This is a test of normal text...

\end{document}

旧的(?)和新的字体选择系统(NFSS)工作正常(上述文件演示了 NFSS 方法);pdflatex没有给出任何警告或错误;evince打开 PDF 文件正常;pdffonts报告:

$ pdffonts fonttest.pdf
name                                 type              emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
TVOLGQ+VNR10                         Type 1            yes yes no       4  0
VNWFOD+Vncccsc10                     Type 1            yes yes no       5  0

 

article如果我将文档类替换为以下内容,就会出现问题\documentclass{sig-alternate}

...
No file fonttest.aux.
! Corrupted NFSS tables.
wrong@fontshape ...message {Corrupted NFSS tables}
                                                  error@fontshape else let f...
l.14 \begin{document}
...

如果我在这里按下 ENTER 键,pdf 实际上就会生成:

LaTeX Font Warning: Some font shapes were not available, defaults substituted.
...
Output written on fonttest.pdf (1 page, 17702 bytes).

$ pdffonts fonttest.pdf
name                                 type              emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
NJOBBG+CMR10                         Type 1            yes yes no       4  0
VNWFOD+Vncccsc10                     Type 1            yes yes no       5  0

... 奇怪的是,字体似乎嵌入得很好?!无论如何,evince打开后显示正确的字体...

现在,令我感到惊讶的是,如果我查看 .log 文件:

...
LaTeX Font Info:    Redeclaring font encoding T1 on input line 43.
)
LaTeX Font Info:    Try loading font information for T1+aer on input line 100.

(/path/to/texlive/texmf-dist/tex/latex/ae/t1aer.fd
File: t1aer.fd 1997/11/16 Font definitions for T1/aer.
)))
(/path/to/texlive/texmf-dist/tex/latex/base/fontenc.sty
Package: fontenc 2005/09/27 v1.99g Standard LaTeX package

(/path/to/texlive/texmf-dist/tex/latex/vntex/t5enc.def
File: t5enc.def 2006/11/21 v1.4 Vietnamese T5 encoding
)
LaTeX Font Info:    Try loading font information for T5+aer on input line 100.
LaTeX Font Info:    No file T5aer.fd. on input line 100.

LaTeX Font Warning: Font shape `T5/aer/m/n' undefined
(Font)              using `T5/cmr/m/n' instead on input line 100.

LaTeX Font Info:    Try loading font information for T5+cmr on input line 100.
(/path/to/texlive/texmf-dist/tex/latex/vntex/t5cmr.fd
File: t5cmr.fd 1999/05/25 v2.5h Standard LaTeX font definitions
))
....
LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line 14.
LaTeX Font Info:    ... okay on input line 14.
LaTeX Font Info:    Checking defaults for T5/cmr/m/n on input line 14.
LaTeX Font Info:    ... okay on input line 14.
! Corrupted NFSS tables.
wrong@fontshape ...message {Corrupted NFSS tables}
                                                  error@fontshape else let f...
l.14 \begin{document}

?

LaTeX Font Warning: Font shape `T5/aer/m/n' undefined
(Font)              using `OT1/cmr/m/n' instead on input line 14.
...
LaTeX Font Info:    Try loading font information for T5+ccr on input line 28.

(/path/to/texlive/texmf-dist/tex/latex/vntex/t5ccr.fd
File: t5ccr.fd 2006/08/02 Fontinst v1.927 font definitions for T5/ccr.
) [1

{/path/to/texlive/texmf-var/fonts/map/pdftex/updmap/pdftex.map}

] (./fonttest.aux)

LaTeX Font Warning: Some font shapes were not available, defaults substituted.
....

请注意,如果我使用旧的(?)字体选择样式,也会发生同样的行为(损坏的 NFSS 表sig-alternate),但是除非\usepackage[T5]{fontenc}使用了行“ ”!如果注释了此行,则pdflatex不会报告任何警告,并且 evince 可以正常呈现 PDF。

现在,如果我正确读取了 .log 的话,“字体形状“T5/aer/m/n”未定义“基本上意味着某些东西请求了aerT5 编码的字体;但我不明白是什么?!该类sig-alternate确实使用了这种aer字体:

$ grep -n --context=1 aer sig-alternate.cls
1458-\ProcessOptions
1459:\fontfamily{aer}
1460-\RequirePackage[T1]{fontenc}
--
1466-    \renewcommand{\sfdefault}{aess}
1467:    \renewcommand{\rmdefault}{aer}
1468-    \renewcommand{\ttdefault}{aett}

...但在我看来——所有这些(与aer字体相关的)难道不应该在“ ”命令执行时设置好\documentclass{...};然后当 .tex 文件进入“ \fontencoding{T5}”部分时,它不应该只引用“ \fontfamily{ccr}”字体吗?!

这就是我想更好地理解的 - 因为在我最初的问题中(我使用旧式字体选择)pdflatex似乎在 T1 编码中寻找小写字体(并寻找错误的字体,lmr),我无法在上面的最小示例中重现这个问题;我也许可以尝试添加一个“ \usepackage[T5]{fontenc}”来解决这个问题 - 但最小示例告诉我那里有麻烦?那么我该如何继续调试呢?

提前感谢任何评论,
干杯!

答案1

您不想使用 T5 编码作为默认编码。因此不要将其作为唯一(也是最后一个)编码加载。加载两种编码并通过最后加载将 T1 设置为默认值:

\documentclass{article}
\usepackage[T5,T1]{fontenc}    
\begin{document}
abc 

{\fontencoding{T5}
\fontfamily{ccr}
\fontseries{m}
\fontshape{sc}
\fontsize{10}{12}
\selectfont
  Trying Small Caps Out...
}
\end{document}

这也适用于你的班级。

您的班级默认使用 ae 字体。如今没有人会这样做。此外,出于某种原因,将序言中的字体系列设置为 aer,这会使 latex 与 T5 编码混淆,并导致您的 NFSS 表消息损坏。

我建议撤消 aer 设置,例如

\fontfamily{cmr} %only needed it T5 is default encoding
\renewcommand{\sfdefault}{cmss}
\renewcommand{\rmdefault}{cmr}
\renewcommand{\ttdefault}{cmtt}

或者

\fontfamily{lmr} %only needed it T5 is default encoding
\usepackage{lmodern}

相关内容