提交給ACM與IEEE的論文中(如CIKM),除了有明確具體字體類型的Type1和TrueType字體外,經常會出現Type3字體。 Type 3 字體是矢量外框字體,很多網站所稱Type 3是點陣字體其實是錯誤的。不同於 Type 1,PostScript Type 3 字體不支援 Hinting ...
在準備提交給ACM與IEEE的論文(如CIKM)時,我們手頭的文檔除了有明確具體字體類型的Type1和TrueType字體外,還經常會出現Type3字體,這種字體現在在雜誌印刷過程中是不予接受的。
Type 3 字體是矢量外框字體,很多網站所稱Type 3是點陣字體其實是錯誤的。不同於 Type 1,PostScript Type 3 字體不支援 Hinting,該技術優化了小字型的字形狀,意味著 PostScript Type 1 在低解析度的雷射印表機或是熒幕上的品質表現略勝一籌。[1][2]
Latex不能精確識別的字體也會被歸類到Type 3。這種字體在印刷刊物中有可能出現印刷錯誤,編譯為.dvi文件時也有幾率發生錯誤。Type 3基本上已經被淘汰,在正式文檔中是需要儘量規避的。
一、Type3 文件的識別
1、整體識別
1)閱讀器
用adobe/foxit 等reader打開pdf文件,"文件 -> 屬性" 打開屬性對話框,找到“字體”項目,可以看到pdf所包含的字體信息。通常如果有type3,會直接顯示在最前面。
2)Linux下使用命令
要檢查PDF文件中包含了,或者使用了什麼字體,你可以使用命令行工具:pdffonts。它是一個PDF字體分析工具。pdffonts是Poppler PDF工具集包中的一個部分。
a) 直接使用命令 [5]
pdffonts可以列出PDF文檔中使用的所有字體。
pdffonts的基本用法: pdffonts paper.pdf
pdffonts工具顯示了各個已使用的字體的各種信息,如字體名稱/類型等等。看輸出是否含有type3字體。
b) linux下安裝命令支持包
要安裝Poppler到Debian,Ubuntu或Linux Mint:
- $ sudo apt-get install poppler-utils
- $ sudo yum install poppler-utils
pdffonts可以列出PDF文檔中使用的所有字體。pdffonts的基本用法如下。
- $ pdffonts doc.pdf
2、問題定位
1)Windows
先註釋全文,編譯查看pdf類型,通常是type1。
然後逐章解開註釋,編譯查看pdf類型,直到出現type3。
再於沒問題的上一章和有問題的這一章之間逐步註釋並編譯查看,直到定位到type3所在。
2)Linux
如果一個PDF文檔有多頁,你可以使用“-f”(首頁)和“-l”(末頁)選項來限制字體掃描頁面範圍。例如,如果你想要找出某個文檔中的5-10頁中使用了哪種字體,運行該命令 $ pdffonts -f 5-l 10 doc.pdf
二、Type3 文件的處理
1)整體處理
a)先考慮官方的建議,在文件頭部加入以下命令(T1包含在cm-super巨集包中 [4])並重新編譯 [5]:
\usepackage[T1]{fontenc}
\usepackage{aecompl}
b)安裝cm-super巨集包
Tex -> MikTex -> MikTex Package Manager -> 在name中尋找所需的包並安裝
問題依舊的話,應該是插圖中含有type3字體。 比如用Python或Matlab畫圖,預設的似乎就是輸出成type3 [5],那麼往下看2)。
2)對已有圖片的處理
Python和Matlab生成的圖片字體,預設輸出就是Type3。有幾種可能的處理方法:
a) eps2eps [3][5]
eps2eps命令是包含在texlive發行版中的小工具,它能把一個eps圖片中字體全部曲線化,轉換後的eps再轉成pdf時,不帶任何字體信息。
所以我們可以將出問題的圖片(如果是eps格式)用eps2eps轉換一遍。
用法:Accessories -> Command Prompt 打開命令行,接著 eps2eps your.eps output.eps
但是,有人指出這樣圖片會變得不清晰;筆者這裡是出現圖片會被部分截取的情況。
b) epstopdf, pdftops [5]
先轉成pdf再轉回eps, 比如對fig.eps, Accessories -> Command Prompt 打開命令行, 然後使用命令:
epstopdf fig.eps fig.pdf
pdftops -eps -r 400 fig.pdf fig.eps
筆者這邊是出現pdftops命令不相容的情況。
c) convert-to-eps website
將問題圖片上傳至http://image.online-convert.com/convert-to-eps,下載下來也是eps,但字體也會被曲線化,從而使得圖片不再是type3。
三、Python的處理
比如用python畫圖,預設就是輸出成type3 [5]
修改 ~/.matplotlib/matplotlibrc
加入(或者修改)如下兩行
ps.fonttype : 42 # Output Type 3 (Type3) or Type 42 (TrueType)
pdf.fonttype : 42 # Output Type 3 (Type3) or Type 42 (TrueType)
Reference
[1] PostScript fonts https://en.wikipedia.org/wiki/PostScript_fonts#Type_3
[2] 請問Type3字體有什麼特別? http://www.cnprint.org/bbs/thread/165/180556/
[3] origin作圖,避免裡面有Type 3 字體 http://www.cnblogs.com/pankejia/p/3476432.html
[4] How to generate pdf without any Type3 fonts? http://tex.stackexchange.com/questions/18687/how-to-generate-pdf-without-any-type3-fonts
[5] 提交MNRAS的pdf文件中type3字體問題 http://asc.2dark.org/node/188