pdf論文中python畫的圖Type 3 fonts字體不兼容的解決方案

python matplotlib畫圖產生的Type 3 fonts字體不兼容

更改措施:

使用Type 42字體來生成PostScript 和PDF 文件。

import matplotlib
matplotlib.rcParams['pdf.fonttype'] = 42
matplotlib.rcParams['ps.fonttype'] = 42

補充:Type 3字體的解決辦法

這個問題困擾瞭我一天瞭,成功解決,這種感覺太爽瞭。

提交MNRAS的pdf文件可能會因為含有type3字體而無法在線生成proof。

如遇此種情況,可先如下確認

pdffonts paper.pdf

看輸出是否含有type3字體

如果是,則先考慮官方的建議,在文件頭部加入:

\usepackage[T1]{fontenc}
\usepackage{aecompl}

重新編譯

問題依舊的話,應該是插圖中含有type3字體。比如用python畫圖,默認的似乎就是輸出成type3. 修改

~/.matplotlib/matplotlibrc

加入(或者修改)如下兩行

ps.fonttype : 42 # Output Type 3 (Type3) or Type 42 (TrueType)
pdf.fonttype : 42 # Output Type 3 (Type3) or Type 42 (TrueType)

重新畫圖

另一種解決方式是,將問題圖片(如果是eps格式)用eps2eps轉換一遍。但轉換之後的圖片中的字體被像素化瞭,放大時不清晰,不推薦。

還有一個方法效果好一些:先轉成pdf再轉回eps, 比如對fig.eps,

epstopdf fig.eps fig.pdf
pdftops -eps -r 400 fig.pdf fig.eps

補充:python3 PIL使用font字體錯誤:OSError: cannot open resource問題解決

錯誤日志

>>> from PIL import ImageFont
>>> ImageFont.truetype
<function truetype at 0x0000021178B82B70>
>>> ImageFont.truetype("NotoSansCJK-Regular.ttc", 30)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\Users\52489\Anaconda3\lib\site-packages\PIL\ImageFont.py", line 261, in truetype
    return FreeTypeFont(font, size, index, encoding, layout_engine)
  File "D:\Users\52489\Anaconda3\lib\site-packages\PIL\ImageFont.py", line 144, in __init__
    self.font = core.getfont(font, size, index, encoding, layout_engine=layout_engine)
OSError: cannot open resource

解決方法

缺少對應字體文件: NotoSansCJK-Regular.ttc

在網上找到對應的font文件

以我的Ubuntu 16為例, 字體文件在”/usr/share/fonts/truetype”中,

因此,把下載到的ttc文件放到 /usr/share/fonts/truetype 文件夾當中.

重新啟動python環境,即可正常導入.

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。