IEEE PDF eXpress compliant な PDF の作成 (初稿を改編)

どんな問題?

 w32tex を利用して dvipdfmx により pdf をつくると,出来上がった pdf には欧文の基本14フォントが埋め込まれないのだそうです。それを忘れたまま IEEE PDF eXpress のチェックを受けると

Error :  Font xxxxx is not embedded 

というエラーメッセージが出ます。これは,w32tex でインストールされる dvipdfmx の pdf 変換設定が,デフォルトで

Courier,  Courier-Bold, Courier-Oblique, Courier-BoldOblique, Helvetica, Helvetica-Bold, Helvetica-Oblique, Helvetica-BoldOblique, Times-Roman, Times-Bold, Times-Italic, Times-BoldItalic, Symbol, ZapfDingbats

 の欧文14フォントを埋め込まない設定となっていることが原因のようでした。

解決策(1)

 web 上の情報として,dvi ファイルから pdf を作成するときに,上記14フォントのmap 情報を指定した dlbase14.map ファイルを, -f オプションの引数として指定して

  dvipdfmx -f dlbase14.map hogehoge.dvi

 とすれば良いと書いてあったのですが... bunta の手元の環境ではなぜか symbol フォントだけがこの方法で埋め込めませんでした。

 

 慌てたbuntaは,adobe acrobat で解決しようとしましたが,acrobat の pdf 印刷機能の設定を「プレス設定」として作ったファイルには確かに symbol フォントも埋め込まれるものの,今度はその symbol フォントが使われている元凶?と思われるグラフ(MATLABで eps に export したもの)が原稿の中でずれてしまい,状況は余計悪化・・・。

 

最終解決策

 で,最終的な解決策ですが,以下の2つのことを行いました。備忘録Mさまのブログと奥村先生の TeXFaq を参考にさせて頂きました。

1)c:/Program Files (x86)/gs/gs9.0x/Resource/Init/gs_pdfwr.ps の頭の方,/.standardfonts[ から始まる部分のフォント14個の指定を以下のようにコメントアウト。

/.standardfonts [

%  /Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique

%  /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique

%  /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic

%  /Symbol /ZapfDingbats

] readonly def

 

2)c:\w32tex\share\texmf\dvipdfmx\config\dvipdfmx.cfg の内容変更

このファイルの中ほどにある,gs を用いて pdf を出力する configuration を指定している記述があります(下記参照)が,そこに以下の赤字で書いた内容を追加。

%% GhostScript (Windows):

D "gswin32c -q -dSAFER -dNOPAUSE -dBATCH -sPAPERSIZE=a0 -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dAutoFilterGrayImages=false -dAutoFilterColorImages=false -dGrayImageFilter=/FlateEncode -dColorImageFilter=/FlateEncode -dUseFlateCompression=true -sOutputFile=%o -c .setpdfwrite << /NeverEmbed [] >> -f %i -c quit"

また,同じファイルの下の方にある,font map file の読み込み指定で,デフォルトだとdlbase14.map がコメントアウトされているので,先頭の % を削除して dlbase14.map が読み込まれるようにする(これは解決策(1)に書いた -f オプションによる指定と同じ意味だと思いますが,cfg ファイルに書いておけばコマンドラインでいちいち指定しなくていいので、ずぼらな私にはこちらが合ってます)

 

dvipdfmx のバージョンによっては,.setpdfwrite のあとにもともと << /NeverEmbed [...] >> の記述があり,... の部分に1)の欧文14フォントが指定されているものもあるということで,「その場合は記載されていたフォントを消して、それらのフォントが埋め込まれるようにする必要がある」という web 情報を参考にしたのですが,私の dvipdfmx.cfg では /NeverEmbed 自体がもともと存在していなかったので,もしかしたら新しい dvipdfmx ではこれはしなくていいのかもしれません。

 

 ただ、bunta の手元ではこれで symbol フォントも含めフォントが pdf に埋め込まれるようになりました。

 

(bunta未解決疑問)文字コードからfontの対応関係を与える cmap ファイルと,*.map は別物?