3

しばらくの間、質問の答えを見つけようとしましたが、自分に合ったものを思いつくことができませんでした. 私の質問は: Xelatex を使用して Matplotlib でテキストをコンパイルするにはどうすればよいですか?

このページがあることは知っています: http://matplotlib.org/users/pgf.html

しかし、私はうまくいくものを思いつくことができませんでした。私が今得たもの:

import matplotlib as mpl

mpl.use("pgf")

## TeX preamble
preamble = """
\usepackage{fontspec}
\setmainfont{Linux Libertine O}
"""

params = {"text.usetex": True,
          'pgf.texsystem': 'xelatex',
          'pgf.preamble': preamble}

mpl.rcParams.update(params)

import matplotlib.pyplot as plt

plt.plot([1, 2, 3])
plt.xlabel(r'\textsc{Something in small caps}', fontsize=20)
plt.ylabel(r'Normal text ...', fontsize=20)

plt.savefig('test.pdf')

このコードを実行すると、次の警告が生成されます。 warnings.warn('fc-list からフォントを取得中にエラーが発生しました', UserWarning)

出力ファイルは作成されますが、フォントがインストールされていて、XeLaTex で使用できるにもかかわらず、フォントが間違っているわけではありません (Linux Libertine ではありません)。 Linux Libertine フォント)。

どんな助けでも本当に感謝します....

4

1 に答える 1

1

コードにはいくつかの問題があります。

  • 次のオプションを使用して、latex にフォントを制御させる必要があります。 'pgf.rcfonts': False
  • xelatex: にも unicode を使用する必要があります'text.latex.unicode': True
  • 「pgf.preamble」は、単一の latex コマンドの python リストを想定しています。
  • フォントを「Linux Libertine O」に設定すると、おそらくセリフ フォントが必要になるので、'font.family': 'serif'
  • プリアンブルのエスケープ シーケンスに注意してください。生の文字列にする必要があります。
  • ファイルの先頭に unicode タグを追加し、エンコーディングが utf-8 であることを確認してください

これを使用すると、コードは次のようになります。

# -*- coding:utf-8 -*-
import matplotlib as mpl

mpl.use("pgf")

## TeX preamble
preamble = [
    r'\usepackage{fontspec}',
    r'\setmainfont{Linux Libertine O}',
]

params = {
    'font.family': 'serif',
    'text.usetex': True,
    'text.latex.unicode': True,
    'pgf.rcfonts': False,
    'pgf.texsystem': 'xelatex',
    'pgf.preamble': preamble,
}

mpl.rcParams.update(params)

import matplotlib.pyplot as plt

plt.plot([1, 2, 3])
plt.xlabel(r'\textsc{Something in small caps}', fontsize=20)
plt.ylabel(r'Normal text ...', fontsize=20)

plt.savefig('test.pdf')

結果:

結果

于 2015-09-22T21:26:20.353 に答える