読者です 読者をやめる 読者になる 読者になる

TeX で作った pdf にフォントを埋め込む

原稿提出が pdf の際,フォントを埋め込めと言われますが,僕は意外と苦労したので,方法をメモっておきます. 多分主に Times-Roman と Helvetica を埋め込むのに苦労. 環境は Ubuntu 10.04.
といっても上手くいった方法はめっちゃシンプルで,Ghostscript のフォント埋め込みポリシーを書き換えるというもの.

手元環境だと,/usr/share/ghostscript/8.71/Resource/Init/gs_pdfwr.ps がそれで,/.standardfonts の中を全てコメントアウト.これは,Ghostscript さんが「コレは普通のフォントだから埋めこまなくていいな」と考えるもので,それをコメントアウトすると埋め込まれるようになるっぽい.

あとは,普通に platex → dvipdfmx でも pdflatex でも無事埋め込まれる. pdffonts コマンドで確認すべし.

余談

最初に ACM SIG スタイルの FAQ を見ていましたが,ここに書かれている方法はあまり上手くいきませんでした.

dvips -P pdf は効果が無かった気がする.

上にも書かれている dvips -P download35 は良い感じで,Times-Roman は埋め込まれるようになる.でも Helvetica はダメ.しかも,そこから ps2pdf で作った pdf を pdffonts や evince で開くと "Error: Illegal entry in bfrange block in ToUnicode CMap" というのが大量に出てくる.怪しい.どうやら以下のバグっぽい.

gs に長いオプションをつけるやつは,"Error: /undefined in NeverEmbed" とか言われて上手くいかない.どうやらこれは最近の Ghostscript では無理になったらしい.

余談 2

ところで,TeX ってエラーが起こったときなんか入力を求めてきてウザい,みたいなのがありますが, "-interaction=nonstopmode" とかオプションをつけておくと良いらしいです

追記@2014/01/28

Ubuntu 12.04 では,上をやっただけでは Helvetica が埋め込まれなくなってしまった(そのせいで再提出を食らってしまった!).

色々調べて試行錯誤したが,以下をやったら上手くいった (http://tex.stackexchange.com/questions/10391/how-to-embed-fonts-at-compile-time-with-pdflatex).

gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dEmbedAllFonts=true -sOutputFile=$YOUR_OUTPUT_FILE.pdf -f $YOUR_INPUT_FILE.pdf

過程で以下の操作を行ったのでもしかしたらこれらも必要かもしれない (http://www.linuxquestions.org/questions/linux-software-2/error-message-regarding-fonts-in-grace-943919/).

apt-get install xfs xfstt
apt-get install t1-xfree86-nonfree ttf-xfree86-nonfree ttf-xfree86-nonfree-syriac xfonts-75dpi xfonts-100dpi