ことの始まり
論文を投稿するに当たりIEEE形式のフォント埋め込み済みPDFを作る必要があった。
IEEE PDF eXpressを使えばtexファイルなどから埋め込み済みPDFを生成できるが、
分割されたtexファイルや画像やらがたくさんあってアップロードが面倒(というかファイルが20個超えそうなのでできないっぽい)という状況だった。
そこで自分でコンパイルしようと思ったのだが調べてみてもアドビ製品の話やTexの統合開発環境用の話が多く、
Vim + quickrunでコンパイルしている私にマッチする情報がうまく見つからなかった。
なんとかフォントを埋め込みIEEE形式に従うPDFが作れたのでまとめる。
環境
- コンパイルコマンド:
latexmk -gg -pdfdvi
- OS: Windows 10
- 言語: 英語
- 論文内の画像ファイルの形式: PDF
ゴール
pdffonts PDF_NAME
としてembの列が全てyesになることをゴールとする。
(他の体裁が整っていればIEEE PDF eXpressにチェックしてもらうとOKが返ってくるはず)
ゴールにたどり着くためには下の2つの項目を達成する必要がある。
- 論文中で使用しているフォントの埋め込み (今回はIEEE形式の論文なのでtimes系)
- 論文中の画像で使用されているフォントの埋め込み (今回はRのggplotでPDFを作成する場合の話のみ)
方法
論文中のフォント埋め込み
手順
簡単に手順をいうと
- mapファイルを用意して
- texファイルの先頭に
\AtBeginDvi{\special{pdf:mapfile MAP_FILE_NAME}}
と書く
だけである。
mapファイル
mapファイルは埋め込むフォントの情報を持っているテキストファイルである。
これを書くことができれば問題は解決なんだが、mapファイルは例を見てすぐに真似して書けるようなものではなさそうで自分で書くのはかなり大変そうだと思った。
結論を言うとmapファイルを書こうとするよりフォント名でググって対応するmapファイルが用意されているか調べるほうが良さそうだと思った。
実際、今回(timesやHelveticaなど)の場合はデフォルトで用意されていて、MAP_FILE_NAMEの部分をdlbase14.map
とすれば解決した。
dlbase14.mapの存在場所が気になったので調べてみたところ、コンパイラが認識できる場所はkpsewhich -var-value TEXMF
で調べられた。
(kpsewhich自体はlatexmkと同じディレクトリにあったのでlatexmk持ってる人ならkpsewhichもおそらく持ってる)
私の環境では上のコマンドを実行した結果C:\LaTeX\share\texmf-dist
が出力の一つにあり、mapファイルはC:\LaTeX\share\texmf-dist\fonts\map\dvipdfmx\base
内にあった。
自分でmapファイルを書けちゃう人はkpsewhichでパスを調べて置いてあげると解決すると思われる。
画像のフォント埋め込み
注意: 私の環境では画像はベクター系画像はすべてPDFなので他の形式の場合はわかりません
(特にこだわりがないならベクター画像はポストスクリプトよりPDFで持つほうが扱いやすいのでおすすめです。
pdfcropで余白切れるしgmailやslack上でも開けるので他人にシェアしやすいし。inkscapeで編集もできるしRでの生成も簡単だし。)
注意: 今回はRのggplotで描画する場合の話のみです
手順
画像へのフォントの埋め込みはtexファイルのコンパイル時に行うのではなく、画像の保存時に行う方が簡単そうだった。(そもそも後からできるのかどうかわからない)
RのggplotでPDF画像を保存する際にフォントを埋め込むにはggsaveの引数にdevice=cairo_pdf
と加えればOKだった。
ちなみにggplotでのフォントファミリーの指定は↓のようにthemeとelement_textを使って行える。
FONT_FAMILY <- "Helvetica"
p <- ggplot(something) +
theme(text=element_text(family=FONT_FAMILY))
ggsave(plot=p, file="hoge.pdf", device=cairo_pdf)