matplotlibで日本語混じりのPDF出力時もフォントを埋め込む
https://gyazo.com/483e666d618dcdef25673f0bd311fdfa
https://gyazo.com/39f1caf8dd2cc2b6098a9548e771b1cb
Type3は論文発表時には推奨されないことが多い
フォントが埋め込まれてないと出版で意図しない字形になったりする
Acrobatのプリフライトで埋め込む,イラレでアウトライン化するなど後処理で頑張る方針もあるが,できればmatplotlibの出力からフォントが埋め込まれてほしい
Type3フォントではなくType1フォントにする方法
それぞれ少しずつ方法が違うものの,最低限必要なのは以下↓らしい
code:py
文字列ごとにLaTeXのコンパイルが走るので,プロット表示はワンテンポ遅れる(キャッシュされて次回から速くなる)
しかし,上記の設定ではlatexコマンドが使用されてしまい,日本語文字があるとエラーで停止する
LaTeXとは別に,PythonからもUnicodeDecodeError: 'utf-8' codec can't decode bytes in position 1911-1912: invalid continuation byteなるエラーが出ていた これはLaTeXのエラーログを読めずに出ているエラーのようなので本質ではなかった
latex以外のLaTeXを使えないか?
できそう.platexは流石にないがpdflatexが使える
code:py
import matplotlib
matplotlib.use('pgf')
無理でした…
inputencが日本語文字を読んでくれない
では,lualatexなら?
code:py
import matplotlib
matplotlib.use('pgf')
plt.rcParams'pgf.preamble' = r'\usepackage{unicode-math}\setmainfont{IPAexGothic}\setmathfont{Fira Math}' すんなり日本語入りPDFができた
フォントの指定もかんたん
\setmainfontだけだと数式がセリフ体になって統一感が削がれる
unicode-math使ってサンセリフに
pgfを使う場合,プリアンブルは'text.latex.preamble'じゃなくて'pgf.preamble'らしい
'pgf.rcfonts'はFalseがいいらしい.書かなくてもフォント変えられたけど……
ちゃんと埋め込みサブセットになっていて,ファイルサイズも小さい
https://gyazo.com/483e666d618dcdef25673f0bd311fdfa
ただし,副作用としてJupyter Notebookでplt.show()してもプロットが出てこない
plt.savefig()で保存したら大丈夫
解決策はまだググってない /icons/TODO.icon
Matplotlib is currently using pgf, which is a non-GUI backend, so cannot show the figureらしい
ImageMagickとWandでPDF表示できる?