關於Linux下Texlive無法找到已安裝字型的問題與解決

極客鋒行發表於2021-08-12

關於Linux下Texlive無法找到已安裝字型的問題與解決

當我在Ubuntu系統下使用Latex時,在編譯渲染時報出了Font "xxx" does not contain requested這種錯誤,其中xxx就是你可能想使用的字型格式。

然而我的Ubuntu系統已經正確安裝了一些常用中文字型,然而在LaTeX編譯渲染時還會報出錯誤。

由於筆者為了解決這個問題翻遍了國內外的網站、去檢視了Texlive官方文件,耗費了許多時間與精力,都沒能找到解決我的問題的資訊,人們的時間往往都很珍貴,一般找不到解決方案過後,往往都不了了之,本著網際網路極客精神(開源精神),在這裡將筆者的解決過程記錄並分享,希望人們可以將這種精神繼承並傳承下去。

我甚至在Texlive的官方安裝文件中看到這麼一段話:

image

可以看到關乎於LaTeX排版中讓人非常頭疼的問題就是漢字的一些處理了,好在今天有非常多好用的巨集包可以解決處理這個問題。

首先看一下筆者出現的問題:

image

image

可以看到終端給出的錯誤提示是未能找到已安裝的字型(installed font not found),有了這句話的提示,筆者想的可能是,在我的系統上已安裝了的字型中,在LaTeX中未能正確地引用,檢視程式碼中可以看到:

image

在這裡設定字型格式的時候我們設定楷體對應的字型檔案為simkai,我們可以檢視我們的字型庫中是否有simkai.ttf楷體的字型檔案:

在Ubuntu存放字型的目錄/usr/share/fonts/下可以使用find命令查詢:

image

可以看到,筆者的系統中已經存放了simkai.ttf這個字型檔案,為什麼LaTeX還沒有找到這個字型呢。

通過一番排查,原來是在Ubuntu中,對字型的使用並不僅僅是字型檔名,而是另一個別名。

我們可以使用fc-list來檢視系統可用的字型列表,然後使用grep匹配simkai.ttf的字型檔案,可以進一步檢視字型的資訊:

image

原來,圖中1號框中的名字只是字型檔名,而在系統應用中想要使用這個字型,我們需要指定2號框中的字型名,例如本圖,我們想要使用楷體就需要指定KaiTi楷體這個名字。

回到LaTeX程式碼中,將之前出現錯誤原因的simkai替換成KaiTi即可解決問題。

image

image

為了進一步驗證筆者的猜想,可以看到上圖程式碼中,在KaiTi的下面還使用了SimSun宋體的使用,然而SimSun並不報錯,這裡筆者想可以繼續檢視SimSun的字型資訊,其後面的別名應該包含SimSun

image

所以筆者的猜想是正確的,所以在我們不同的系統、不同的字型檔案中,每個人發生無法正確找到我們想要使用的字型的錯誤可能都不一樣,因為我們使用的字型檔案不同可能導致我們的在應用中使用字型中需要引用的名稱的不同而不同,所以出現這種問題我們要具體問題具體分析,對症下藥。

相關文章