我使用 TeX 已有大约 20 年了,现在正在尝试学习 LaTeX。字体一直是 TeX/LaTeX 中最棘手的部分,我完全不知所措。我尝试遵循本指南ftp://ftp.dante.de/tex-archive/info/tex-font-errors-cheatsheet/tex-font-cheatsheet.pdf这看起来很棒,但虽然它可能帮助我找出我做错的地方,但它并不能帮助我找出如何做正确的事。
问题 1
我设置了这些命令
\usepackage{bookman}
\newcommand*{\largeheadfont}{\fontfamily{pbk}\fontsize{28pt}{28pt}\selectfont}
{\largeheadfont \textsc MyName}
LaTeX 已决定使用名为 的字体pbklc7t
。我有两个文件:
/usr/share/texmf/fonts/tfm/adobe/bookman/pbklc7t.tfm
/usr/share/texmf/fonts/vf/adobe/bookman/pbklc7t.vf
但显然,这还不足以真正生成字体。
mktexpk: don't know how to create bitmap font for pbklc7t.
我检查了我的各种地图文件,没有找到任何关于的引用pbklc7t
。我确实看到了以下引用
dvipdfm.map: pbkd8r 8r ubkd8a
psfonts.map: pbkd8r Bookman-Demi "TeXBase1Encoding ReEncodeFont" <8r.enc
pdftex.map: pbkd8r URWBookmanL-DemiBold "TeXBase1Encoding ReEncodeFont" <8r.enc <ubkd8a.pfb
因此显然我缺少和/或找不到pbklc7t
填充适当的地图文件以使用该字体所需的文件。
我的下一步是什么?我该在哪里找到我需要的文件pbklc7t
,或者我如何让 LaTeX 使用我实际拥有的 pbk 字体之一?
编辑
根据@egreg 的建议,我得到了这个:
INPUT /usr/share/texmf/tex/latex/psnfss/ot1pbk.fd
INPUT /usr/share/texmf/fonts/tfm/adobe/bookman/pbkl7t.tfm
INPUT /usr/share/texmf/fonts/tfm/adobe/bookman/pbkl7t.tfm
INPUT /usr/share/texmf/fonts/tfm/adobe/bookman/pbklc7t.tfm
OUTPUT test.dvi
INPUT test.aux
我没有得到 .vf 文件或 .map 文件或 pbkl8r.tfm 文件中的所有额外行。
问题2
(此处已更新,因此部分评论可能已过时)
过去,我很喜欢一种叫做 的字体cmdunh10
。所以我尝试了那个字体。
\usepackage[T1]{fontenc}
\newcommand*{\largeheadfont}{\fontfamily{cmdh}\fontsize{28pt}{28pt}\selectfont}
{\largeheadfont\textsc{MyName}}
我没有收到小写字母。我收到的是这些消息:
LaTeX Font Warning: Font shape `T1/cmdh/m/n' in size <28> not available
(Font) size <29.86> substituted on input line 23.
LaTeX Font Warning: Font shape `T1/cmdh/m/sc' undefined
(Font) using `T1/cmdh/m/n' instead on input line 23.
LaTeX Font Warning: Some font shapes were not available, defaults substituted.
在我看来,这Font shape 'T1/cmdh/m/sc' undefined
意味着“没有可用的小写字母”。
此外,我以为 mktexpk 应该知道如何获取我的字体并生成我想要的大小,但我得到的却是 29.86 pt。为什么没有发生这种情况?
字体可能cmdh
没有小型大写字母吗? 有什么方法可以确定字体是否有小型大写字母?
答案1
问题 1
如果我继续pdflatex
跑
\documentclass{article}
\usepackage{bookman}
\newcommand*{\largeheadfont}{\fontfamily{pbk}\fontsize{28pt}{28pt}\selectfont}
\begin{document}
{\largeheadfont \textsc{MyName}}
\end{document}
使用该选项-recorder
,系统会生成一个扩展名的文件.fls
,其中包含以下信息:
INPUT /usr/local/texlive/2017/texmf-dist/tex/latex/psnfss/ot1pbk.fd
INPUT /usr/local/texlive/2017/texmf-dist/fonts/tfm/adobe/bookman/pbkl7t.tfm
INPUT /usr/local/texlive/2017/texmf-dist/fonts/tfm/adobe/bookman/pbkl7t.tfm
INPUT /usr/local/texlive/2017/texmf-dist/fonts/tfm/adobe/bookman/pbklc7t.tfm
INPUT /usr/local/texlive/2017/texmf-dist/fonts/vf/adobe/bookman/pbklc7t.vf
INPUT /usr/local/texlive/2017/texmf-dist/fonts/tfm/adobe/bookman/pbkl8r.tfm
INPUT /usr/local/texlive/2017/texmf-dist/fonts/tfm/adobe/bookman/pbkl8r.tfm
INPUT /usr/local/texlive/2017/texmf-var/fonts/map/pdftex/updmap/pdftex.map
INPUT /usr/local/texlive/2017/texmf-dist/fonts/vf/adobe/bookman/pbkl7t.vf
INPUT /usr/local/texlive/2017/texmf-dist/fonts/tfm/adobe/bookman/pbkl8r.tfm
INPUT /usr/local/texlive/2017/texmf-dist/fonts/enc/dvips/base/8r.enc
INPUT /usr/local/texlive/2017/texmf-dist/fonts/type1/urw/bookman/ubkl8a.pfb
我们怎样读它?
该文件ot1pbk.fd
包含将 TeX 字体名称与文件关联的信息.tfm
。具体来说,我们可以在其中找到
\DeclareFontShape{OT1}{pbk}{m}{sc}{<->ssub * pbk/l/sc}{}
它告诉 LaTeX,当系列中存在中等粗细的小型大写字体时pbk
,应该用细细的小型大写字体替换它;反过来,这定义为
\DeclareFontShape{OT1}{pbk}{l}{sc}{
<-> pbklc7t
}{}
OK,现在我们知道了\largeheadfont\textsc{MyName}
,TeX 会加载对应的字体pbklc7t.tfm
。
让我们回到文件。在显示文件已读入的.fls
那一行之后,我们发现也已加载。是的,是一个.tfm
pbklc7t.vf
pbklc7t
虚拟字体,由两个副本构建pbkl8r.tfm
(它是一种假的小型大写字体,其中小写字母是缩放的大写字母)。
类似的行pbkl7t.tfm
是因为页码而存在的,这里不需要关心。
应该pdftex.map
包含一行pbkl8r
,事实上,在我的计算机上有
pbkl8r URWBookmanL-Ligh " TeXBase1Encoding ReEncodeFont " <8r.enc <ubkl8a.pfb
对应于生成PDF文件的8r.enc
(重新编码向量)和字体文件的输入。ubkl8a.pfb
如果你收到消息
mktexpk: don't know how to create bitmap font for pbklc7t.
那么你的 TeX 系统就有问题。安装满的从头开始的新 TeX Live 2017 可以提供帮助。
问题2
ot1cmdh.fd
除了不相关的评论外,该文件还包含
\ProvidesFile{t1cmdh.fd}
[2014/09/29 v2.5h Standard LaTeX font definitions]
\providecommand{\EC@family}[5]{%
\DeclareFontShape{#1}{#2}{#3}{#4}%
{<5><6><7><8><9><10><10.95><12><14.4>%
<17.28><20.74><24.88><29.86><35.83>genb*#5}{}}
\DeclareFontFamily{T1}{cmdh}{}
\EC@family{T1}{cmdh}{m}{n}{ecdh}
\endinput
这意味着它只cmdh
适用于固定大小、中等粗细和正常形状。请求 28pt 的字体将导致 29.86pt 的字体被替换。更重要的是,没有定义小写字母形状,因此当您请求它时,您将获得正常形状,这就是警告
LaTeX Font Warning: Font shape `T1/cmdh/m/sc' undefined
(Font) using `T1/cmdh/m/n' instead on input line 23.
确切的意思是:你不能获取根本不存在的字体。