使用 LaTeX 渲染文字#

Matplotlib 可以使用 LaTeX 來渲染文字。這可以透過在您的 rcParams 中設定 text.usetex : True,或是在個別的 Text 物件上將 usetex 屬性設定為 True 來啟用。透過 LaTeX 處理文字比 Matplotlib 功能強大的 mathtext 慢,但更具彈性,因為可以使用不同的 LaTeX 套件(字型套件、數學套件等)。結果可能會令人驚豔,特別是當您注意在圖表中使用的字型與主要文件中使用的字型相同時。

Matplotlib 的 LaTeX 支援需要一個可運作的 LaTeX 安裝。對於 *Agg 後端,還需要 dvipng;對於 PS 後端,還需要 PSfragdvipsGhostscript。對於 PDF 和 SVG 後端,如果存在 LuaTeX,將會使用它來加速一些後處理步驟,但請注意它並不用於解析 TeX 字串本身(僅支援 LaTeX)。這些外部相依性的執行檔都必須位於您的 PATH 中。

僅支援少數幾個字型系列(由 PSNFSS 方案定義)。它們在此處列出,並附帶對應的 LaTeX 字型選擇命令和 LaTeX 套件,這些套件會自動使用。

通用系列

字型

襯線 (\rmfamily)

電腦現代羅馬體、Palatino (mathpazo)、Times (mathptmx)、Bookman (bookman)、New Century Schoolbook (newcent)、Charter (charter)

無襯線 (\sffamily)

電腦現代無襯線體、Helvetica (helvet)、Avant Garde (avant)

草書 (\rmfamily)

Zapf Chancery (chancery)

等寬 (\ttfamily)

電腦現代打字體、Courier (courier)

預設字型系列(不需要載入任何 LaTeX 套件)是電腦現代體。所有其他系列都是 Adobe 字型。Times 和 Palatino 各自都有其隨附的數學字型,而其他 Adobe 襯線字型則使用電腦現代數學字型。

要啟用 LaTeX 並選擇字型,請使用例如

plt.rcParams.update({
    "text.usetex": True,
    "font.family": "Helvetica"
})

或等效地,將您的 matplotlibrc 設定為

text.usetex : true
font.family : Helvetica

也可以將 font.family 設定為通用系列名稱之一,然後設定對應的通用系列;例如

plt.rcParams.update({
    "text.usetex": True,
    "font.family": "sans-serif",
    "font.sans-serif": "Helvetica",
})

(這是 Matplotlib 3.5 之前的必要方法)。

這裡是標準範例,使用 TeX 渲染數學方程式

../../../_images/sphx_glr_tex_demo_001.png

請注意,不支援顯示數學模式 ($$ e=mc^2 $$),但加入 \displaystyle 命令(如上述範例所示)會產生相同的結果。

非 ASCII 字元(例如上方 y 標籤中的度數符號)在 inputenc 支援的範圍內受到支援。

注意

為了與非 usetex 情況保持一致,Matplotlib 會特殊處理換行符號,以便單一換行符號產生換行(而不是在標準 LaTeX 中被解讀為空白)。

Matplotlib 使用 underscore 套件,以便在文字模式下「按原樣」印出底線 (_)(而不是像在標準 LaTeX 中一樣導致錯誤)。底線在數學模式下仍然會引入下標。

注意

某些字元需要在 TeX 中進行特殊跳脫,例如

# $ % & ~ ^ \ { } \( \) \[ \]

因此,這些字元的行為會根據 rcParams["text.usetex"](預設值:False)而有所不同。如上所述,底線 (_) 在數學模式之外不需要跳脫。

注意

LaTeX 一律預設使用襯線字型來顯示數學(即使 rcParams["font.family"] = "sans-serif")。如果需要,將 \usepackage{sfmath} 加入 rcParams["text.latex.preamble"] 可讓 LaTeX 輸出無襯線數學。

PostScript 選項#

為了產生可以嵌入到新的 LaTeX 文件中的封裝 PostScript (EPS) 檔案,Matplotlib 的預設行為是精餾輸出,這會移除 LaTeX 使用的一些 PostScript 運算子,這些運算子在 EPS 檔案中是非法的。此步驟產生的結果對於某些使用者來說可能是無法接受的,因為文字會被粗略地光柵化並轉換為點陣圖,這不像標準 PostScript 一樣具有可縮放性,而且文字是無法搜尋的。一個解決方法是在您的 rc 設定中將 rcParams["ps.distiller.res"] (預設值:6000)設定為較高的值(可能為 6000),這會產生較大的檔案,但可能看起來更好且縮放合理。更好的解決方法(需要 PopplerXpdf)可以透過將 rcParams["ps.usedistiller"] (預設值:None)變更為 xpdf 來啟用。此替代方法會產生不光柵化文字的 PostScript,因此它可以正確縮放、在 Adobe Illustrator 中編輯,並在 pdf 文件中搜尋文字。

可能的問題#

  • 在 Windows 上,可能需要修改 PATH 環境變數,以包含 latex、dvipng 和 ghostscript 執行檔所在的目錄。有關詳細資訊,請參閱環境變數在 Windows 中設定環境變數

  • 使用 MiKTeX 與電腦現代字型,如果您得到奇怪的 *Agg 和 PNG 結果,請前往 MiKTeX/選項並更新您的格式檔案。

  • 在 Ubuntu 和 Gentoo 上,基本的 texlive 安裝不包含 type1cm 套件。您可能需要安裝一些額外的套件,才能取得其他 LaTeX 發行版隨附的所有好東西。

疑難排解#

  • 請嘗試刪除您的 .matplotlib/tex.cache 目錄。如果您不知道在哪裡找到 .matplotlib,請參閱 matplotlib 設定和快取目錄位置

  • 請確認 LaTeX、dvipng 和 Ghostscript 皆可正常運作,並已將它們的路徑加入您的 PATH 環境變數中。

  • 請確認您嘗試執行的操作在 LaTeX 文件中是可行的,您的 LaTeX 語法是有效的,並且在必要時使用了原始字串,以避免產生非預期的跳脫序列。

  • rcParams["text.latex.preamble"] (預設值: '') 並非官方支援的選項。這個選項提供了很大的彈性,但也可能導致許多問題。在回報問題之前,請先停用此選項。

  • 如果您仍然需要協助,請參閱 取得協助

此範例集由 Sphinx-Gallery 生成