マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

(フォントを)埋め込むか、埋め込まざるか、その設定方法が問題だ(W32TeX 編)

論文を PDF で提出する場合に、最近では全てのフォントを埋め込むことが要請されることが増えている。この記事では、W32TeX を前提として、各 DVI ウェアでのフォントの埋込の設定の方法を列挙する。

2012 年 4 月以降W32TeX を対象とする。

前提知識

TeX により PDF 文書を作った場合、埋め込まれない可能性があるフォントは通常は次の 2 種類に限られる。*1

  • Adobe の欧文の「基本 14 書体(Base14)」、例えば Times や Helvetica など。

    (あるいは、これを拡張した「基本 35 書体(Base35)」。*2
  • pTeX 系の標準の和文フォント、すなわち(等幅の)「明朝」「ゴシック」。

例えば、以下の pLaTeX 文書では欧文の Times と和文明朝体が用いられているが、これらはともに非埋込となる可能性がある。この文書を処理してみることで、上記の 2 種のフォントの各々について「今の設定では埋込が行われるか否か」が確認できるだろう。*3

[sample.tex]

\documentclass[a4paper]{jsarticle}
\usepackage{times}
\begin{document}
\LaTeX の代わりになるWordがあると聞いて飛んできました。
\end{document}

dvips で TeX→DVI→PS→PDF と変換する場合
  • 欧文 Base35 フォントを埋め込む:*4

    dvips -Pdl sample.dvi


  • 欧文 Base35 フォントを埋め込まない:

    dvips -Pbi sample.dvi

    なお、「dl」「bi」はそれぞれ「download」「built-in」の意味である。*5また、「-Pdl」「-Pbi」の何れも指定しない場合は欧文フォントは(Base35 も含めて)ビットマップとして埋め込まれる。


  • dvips では和文は常に非埋込として扱われる。PDF に変換した時に埋込になるかは PS→PDF の変換の方式に依存する。*6

dvipdfmx で TeX→DVI→PDF と変換する場合
  • 欧文 Base14 フォントを埋め込む:

    dvipdfmx -f dlbase14.map sample.dvi


  • 欧文 Base14 フォントを埋め込まない(既定):

    dvipdfmx -f psbase14.map sample.dvi


  • 標準和文フォントとして MS フォントを埋め込む(既定):

    dvipdfmx -f msembed.map sample.dvi


  • 標準和文フォントとして IPA フォントを埋め込む:*7

    dvipdfmx -f ipaembed.map sample.dvi


  • 標準和文フォントを埋め込まない:

    dvipdfmx -f noembed.map sample.dvi


  • 和文の設定として他に hiraembed.mapヒラギノフォント)、kozembed.map(小塚フォント Pro 版)、kozembed.map(小塚フォント Pr6N 版)がある。もちろん利用には当該のフォントが必要である。

  • 既定の設定は、設定ファイル dvipdfmx.cfg において「f psbase14.map」の行を修正することで行える。((和文については、既定の設定は 〜embed.map の読込でなく cid-x.map の記述で行われているが、既定の変更については全く同様に「f noembed.map」等を追記すればよい。))

pdfTeX で PDF 出力する場合
  • 欧文 Base14 フォントを埋め込む(既定*8):

    $TEXMF/fonts/map/pdftex/updmap に移動して、embedbase14-base.map を pdftex-base.map にコピーする。その後 updmap を実行する。
  • 欧文 Base14 フォントを埋め込まない:

    $TEXMF/fonts/map/pdftex/updmap に移動して、noembedbase14-base.map を pdftex-base.map にコピーする。その後 updmap を実行する。
  • pdfTeX なので「pTeX 系の和文」は存在しない。CJK パッケージにおける和文(CJK)フォントは(慣習的に)常に埋め込まれる。
XeTeX で PDF 出力する場合
  • LaTeX の fontspec パッケージ等で OpenType/TrueType フォントを用いた場合はそれは常に埋め込まれる。日本語(CJK)フォントもこれに含まれる。
  • ただし、従来の TFM ベースの(8 ビットな)欧文フォントについては、dvipdfmx と同じ扱いになる。従って、(TFM ベースの)Base14 フォントは埋め込まれない可能性がある。(既定では埋め込まれない。)特に数式フォントについては TFM ベースのものが使われることが多いので注意が必要である。

    [sample-xetex.tex]

    \documentclass[a4paper]{article}
    \usepackage{txfonts}
    \usepackage[no-math]{fontspec}
    \setmainfont[Ligatures=TeX]{TeX Gyre Termes}
    \begin{document}
    That's like $\mathrm{e}^{\pi\mathrm{i}}=-1$.
    \end{document}
    

    この文書では、数式中の「e」「i」「1」には TFM ベースの「Times-Roman」が使われる。*9従って、普通に「xelatex sample-xetex」としたのでは、その部分のフォントが埋め込まれない可能性がある。(既定では埋め込まれない。)全てのフォントを埋め込むには、内部で呼ばれる xdvipdfmx について上述の dvipdfmx のオプションを指定する必要がある。

    xelatex -output-driver="xdvipdfmx -q -f dlbase14.map" sample-xetex


  • LuaTeX で PDF 出力する場合
    • LaTeX の fontspec パッケージで OpenType/TrueType フォントを用いた場合はそれは常に埋め込まれる。*10
    • TFM ベースの(8 ビットな)欧文フォント(数式フォントも含む)については、pdfTeX の設定が適用される。(だから既定では Base14 フォントは埋め込まれる。))

    • LuaTeX-ja の和文フォントには「非埋込にする」という設定が可能であり、また既定では標準の和文フォントは非埋込である。フォントを埋め込むか否かは文書中の設定により指定される。LaTeX の場合は luatexja-fontspec を利用することになる。

    *1:実際にはこれら以外のものを非埋込にすることもできるが、正常に表示できない可能性がかなり高くなるので普通は行われない。

    *2:Base35 は Base14 に加えて Palatino や Zapf Chancery 等を含む。ソフトウェアによって「非埋込の可能性のある欧文フォント」は Base14 と Base35 の一方に固定されているので、「全て埋め込むか」という観点に立つなら両者の違いは気にしなくてよいだろう。

    *3:原理的には「Times は埋込だが Helvetica は違う」「明朝は埋込だがゴシックは違う」という設定もありうるが、実際にはまず行われない。

    *4:この場合に埋め込まれるのは本物の(Adobe の)Baseet フォントではなくフリーのクローンである。以降の説明でも同じ。

    *5:これらの用語は「PostScript プリンタでの印刷時のフォントの扱い」を指すものである。「built-in」はプリンタ自身が備えているフォントデータを用いること、「download」は PC からフォントデータをプリンタに送信することを意味する。

    *6:と言って逃げる。この辺りはよく解らないので。

    *7:IPA フォントは W32TeX には含まれないので別途入手してインストールする必要がある。

    *8:microtype が有効であるためにはフォントを埋め込む必要があり、従って、dvipdfmx と異なり埋込を既定としている。

    *9:「=」「−」は txfonts が提供する Type1 フォントのグリフであり、これらは常に埋め込まれる。

    *10:LuaTeX 自体には OTF/TTF を非埋込で指定する設定がある。LuaTeX-ja の和文の非埋込はそれを利用している。