LaTeX技巧928: 怎样在PdfLaTeX中使用fontawesome package?

根据CTAN: Package fontawesome说明,4.4.0version的fontawesome package可以不依赖其他包在Pdf(La)TeX中直接使用,我用MiKTeX安装了v4.4.0的fontawesome package,然而经过测试使用PdfLaTeX无法通过,但使用XeLaTeX却可以通过(甚至不需要声明fontspec包),,如下源代码通过XeLaTeX编译可以成功出现一个哲♂学符号。

 类似问题在StackExchange上也有提问pdftex - fontawesome and pdflatex,检查了一下MiKTeX的安装路径发现文件是齐全的,MiKTeX也确实是最新的,但是AppData文件夹下没有MiKTeX的缓存文件。 测试代码如下:

\documentclass{article}
%\usepackage{fontspec}
\usepackage{fontawesome}
\begin{document}
	\faMars
\end{document}

字体配置过程

我在 TeX Live 2015 下面试了一下,代码没问题。 简单地说,代码没问题,不是你的错。问题可能是这个字体包当初安装时出现异常错误,此时你需要打开 MiKTeX 的 Package Manager,找到这个包,在里面删除(- 号)再重装(+ 号)fontawesome 包,应该就正常了。问题也可能是 MiKTeX 对字体包打包出错,此时你可能需要等待 MiKTeX 更新更正这个错误,你再跟着 Update。 我找到我的测试机上的 MiKTeX,重现了这个问题。查看了一下文件,确定应该是 MiKTeX 本身的错误。手工解决办法是:

  1. 在命令行运行下述命令:

    initexmf --edit-config-file updmap

    在弹出的记事本中增加下面一行并保存退出:

    Map fontawesome.map
  2. 在命令行运行下述命令:

    initexmf --mkmaps

    或者 updmap  命令也可。

上面的步骤会手工修复 fontawesome 字体的映射,并保存于用户目录中。 (按:如果从来没有生成过用户目录的字体映射,上面的命令加上 --admin 选项,则会修改系统目录的字体映射文件,也可以,对所有用户有效。但如果用户自己已经生成过字体映射,加 --admin 选项的设置会无效。) 当然,鉴于 TeX Live 没在这里出问题,改为使用 TeX Live 也是一种解决方案。个人以为出现这种问题,是 MiKTeX 处理管理员安装的系统宏包与用户安装宏包时,逻辑有问题造成的错误,还是换 TeX Live 省心。 ------------ 技术细节的分割线 ------------ 在 pdfLaTeX 要使用 fontawesome 字体的 \faMars 命令。顺利的话,这个过程是这样的:

  • LaTeX 从 fontawesome 宏包代码找到应该使用 U 编码的 fontawesomeone 字体族。

  • 为此,LaTeX 会首先查找 ufontawesomeone.fd 这个字体定义文件:

    \DeclareFontFamily{U}{fontawesomeone}{}
    \DeclareFontShape{U}{fontawesomeone}{m}{n}{<-> FontAwesome--fontawesomeone}{}
  • 这里字体定义文件将 U/fontawesomeone/m/n 这个 NFSS 字体坐标映射到了 FontAwesome--fontawesomeone 这个实际字体名。

  • 然后一方面,TeX 引擎查找 FontAwesome--fontawesomeone.tfm 文件,找到字体的 metrics 信息,为字符生成合适大小的盒子。

  • 另一方面,pdfTeX 会查找字体映射文件 pdftex.map,在其中找到对应的字体映射行:

    FontAwesome--fontawesomeone FontAwesome " fontawesomeone ReEncodeFont " <[fontawesomeone.enc <FontAwesome.pfb
  • 于是知道使用文件 fontawesomeone.enc 来处理字符编码重映射,而实际的字符 glyph 则在字体文件 FontAwesome.pfb 中寻找。

  • 于是 pdfTeX 就从 pfb 字体文件中找到的 glyph 输出到最终的 PDF 文件中,这个符号占用的位置由 tfm 文件决定,而符号的编码由 enc 文件确定。

那么现在,MiKTeX 出错了。问题出在哪个环节?如果对上面过程不够熟悉,可以看 tex-font-errors-cheatsheet 这个文档。就会知道这个错误信息出现在文档中的第 4 步,也就是说没有找到正确的字体映射(注意到 fontawesome 并没有使用 virtual font):文档已经给出了大致的解决思路,即为 pdfTeX 重建字体映射。对于这个问题,应该是:

  • 首先确定字体本身的字体映射文件存在。即应该有 fontawesome.map 文件,并在 TEXMF/fonts/map/dvips/fontawesome/ 目录下,其中 TEXMF 是 MiKTeX 的包安装根路径。如果不在或者位置不对,说明宏包安装时出错,或者 MiKTeX 打包有问题。

  • 然后使用字体映射更新工具 updmap,将 fontawesome.map 文件加入其配置文件。图里面给的是 Linux 下 TeX Live 的命令,MiKTeX 应该用 initexmf --edit-config-file 修改配置文件,加入 fontawesome.map,并用 updmap 更新。

上面做完应该就好了。 作者:刘海洋 链接:https://www.zhihu.com/question/27589739/answer/37255728来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

分享到:
未经允许不得转载:LaTeX技巧928: 怎样在PdfLaTeX中使用fontawesome package?
已有 条意见

    最新文章

    加载中...
      本站提供专业LaTeX排版、咨询、定制服务,请点击下图咨询详情


      全国首个精品的LaTeX视频教程,大牛带着你入门,让LaTeX学习不再纠结,请点击下图咨询详情

      热门评论

        联系我们

        交流QQ群:91940767
        本站QQ号:343083553
        邮箱联系latexstudio@qq.com
        淘宝店铺latexstudio.taobao.com 提供排版,模板定制,培训,图片处理,视频教程等LaTeX服务。

        关注微信公众号: latex2015

        如果您投稿或者希望加入我们团队,请发送您的简历到latexstudio@qq.com。

        科技艺术的完美融合,专业精致的排版体验

        联系我们联系我们