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. 在命令行運行下述命令:

  2. initexmf --edit-config-file updmap

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

    Map fontawesome.map
  3. 在命令行運行下述命令:initexmf --mkmaps

  4. 或者 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
        郵箱聯系[email protected]
        淘寶店鋪https://shop240512713.taobao.com/ 提供排版,模板定制,培訓,圖片處理,視頻教程等LaTeX服務。

        關注我們微信公眾號

        如果您投稿或者希望加入我們團隊,請發送您的簡歷到[email protected]
        飞艇人工免费计划下载