pdfTeX

pdfTeX は Hàn Thế Thành により開発された TeX の派生プログラムです。 主な特徴として

などがあります。

pdfTeX の Microtypography 拡張は主に次の二つの部分からなります:

サポートされているフォントフォーマットは PostScript Type1 と TrueType で、PostScript 系の OpenType (.otf) は十分なサポートがありません。

画像フォーマットは、PDF、PNG、JPEG、JBIG2 などをサポートします。



使い方

実際の利用は、TeX/LaTeX とほとんど変わりありません。

マニュアル (英語) は

です。

Microtypography 拡張

ここでは pdfTeX の Microtypography 拡張機能についてその使用法を解説します。 LaTeX での利用については後述の micortype パッケージを利用するとよいでしょう。

マージン・カーニング

マージン・カーニングの主な用途は、ハイフンやカンマなどをマージンにわずかにはみ出させることです。これは「ぶら下げ」とも呼ばれます。その他にも、"o" などの丸い文字などをマージンにわずかにはみ出させることもあります。これは両端揃えのときに、文章をより美しくみせるための処理です。

margin-kerning.jpg

pdfTeX における、マージン・カーニングのもっとも簡単な使用法は以下のようなものです:

 \font\f=cmr10
 \rpcode\f`\-=500
 \f
 \pdfprotrudechars=1
 Some text...

ここで \rpcode は ”right protruding code” ("右ぶら下げコード") です。最初のパラメータはフォントの識別子、そして二番目は文字コードです。三番目のパラメータは右のマージン (余白) に対してどれだけの量突き出すかを指定します。上の例では、フォント \f のハイフンが右マージンの境界に来たとき、それがマージンにフォントの em (エム) の 500 / 1000 (つまり 50%) だけ突き出すことを表します。

デフォルトでは、全ての文字に対して \rpcode はゼロに設定されています。このため \rpcode を陽に設定しない限りは "ぶら下げ" は起こりません。

プリミティブ \pdfprotrudechars はマージン・カーニングをグローバル・レベルで制御するのに用いられます。

同様に左マージンに対して作用する \lpcode も用意されています。 \lpcode と \rpcode への割り当ては常にグローバルなものです。

フォント・エクスパンション

段組みなどで狭い幅に文章を組むときには、良い改行位置が見つからず、ハイフネーションが複数行連続して起きてしまったり、単語間スペースがあまり一様でなくなったり、縦に空白の「線」(リバー)ができることがよくあります。これらの問題を解決する手法として、フォント・エクスパンションが有効です。

without-font-expansion.jpg
with-font-expansion.jpg
 

いくぶん極端な設定を行っていますが、左はフォント・エクスパンションなし、右はありです。

簡単な例として

 \font\f=cmr10
 \pdffontexpand\f 30 20 10 autoexpand
 \pdfadjustspacing=2

のようにするとフォント・エクスパンションが有効になります。ここで \pdffontexpand はフォント \f に含まれる文字に対して、最大 1000 分の 30 の伸張から 1000 分の 20 の収縮を 1000 分の 10 ステップ単位で許すということを意味します。"autoexpand" はとりあえず与えておきましょう。これがないと非常に面倒です。プリミティブ \pdfadjustspacing はフォント・エクスパンションを有効にするかどうかのスイッチです:

フォント・エクスパンションの効果を実際に確かめるには狭い幅に長い文章を組んでみるとよいです。\pdfadjustspacing の値を変化させながら結果の違いを確かめてみましょう。

microtype パッケージ

pdfLaTeX で Microtypography 拡張を使う場合は microtype パッケージ が便利です。

 \usepackage{microtype}

microtype パッケージはデフォルトで Microtypography 機能を可能な限り有効にします。

やや極端な例でその効果を試してみましょう:

 \documentclass{article}
 \usepackage[stretch=100,shrink=100]{microtype}
 \begin{document}
 \begin{minipage}{3cm}
 ...適当な長い英文をここに...
 \end{minipage}
 \end{document}

この例では幅 3cm という狭い領域に比較的長い文章を押し込んでいます。また、microtype パッケージのオプションでかなりのフォントの伸張・収縮を (10% まで) 許容しています。(実際の利用では 伸張 3%、収縮 2% 以内に収めるほうが良いそうです。) microtype パッケージを読み込まない場合と比較すると大きな違いがでるでしょう。

トラッキング

Microtypography に関連した別の機能としてトラッキングがあります。字間スペースの一様な調整です。この機能は例えば、スモールキャピタルで組まれた文章で字間スペースをわずかに広げるために用いることができます。また、小さいサイズのフォントで字間スペースを広げ、大きなサイズのフォントで逆に詰めることで可読性を向上させることもできます。(Computer Modern のように異なるオプティカル・サイズでフォントが用意されている場合にはこのようなことは不要ですが)以下に microtype パッケージのドキュメントにある例をあげます:

 \usepackage[tracking=true]{microtype}
 \DeclareMicrotypeSet*[tracking]{my}
    { encoding = *,
      size     = {small, Large},
      font     = */*/*/sc/* }
 \SetTracking[ no ligatures = f ]{ encoding = *, shape = sc}{ 50 }
 \SetTracking{ encoding = *, size = small }{  20 }
 \SetTracking{ encoding = *, size = Large }{ -20 }

この例では、文章がスモールキャピタルのフォントで組まれたときに字間スペースを 50/1000em だけ広げ、\small 以下のサイズのフォントが利用されている場合に 0.02em 広げ、さらに \Large 以上のサイズのフォントでは 0.02em だけ均等に詰めます。値は基本的にフォントの em に対する千分率で与えます。

PDF 関連の拡張機能

pdfTeX は PDF 出力用に PDF 関連の様々な拡張機能を備えます。それらのほとんどは pdfLaTeX を使う限りは使用することはないでしょう。hyperref など様々なマクロ・パッケージがこれらの機能に対する、より使いやすいインターフェースを提供します。

フォントの設定

フォントの設定はフォントマップ・ファイルで行います。フォントマップの役割は TFM ファイルと (アウトライン) フォント・ファイルとを結びづけることです。このファイルにはまた、フォントの再エンコーディングに関する情報やフォントの部分埋め込み (サブセッティング) 、文字変形パラメータ (SlantFont や ExtendFont) の設定を記述します。

デフォルトでは pdfTeX は pdftex.map を読み込みます。Web2c システムにおいては、マップファイルは TEXFONTMAPS で設定される場所で検索されます。フォントマップ・ファイル中では、一行ごとに各フォントに関する設定を記述します。書式は dvips のそれの拡張で、以下のようなものです:

 tfmname basename fontflags special encodingfile fontfile

最初のフィールドは tfmname である必要があります。もし basename を与えるとすれば、それは二番目のフィールドでなければなりません。同様に fontflags はあるとすれば二番目か三番目に (basename のあるなしで変わる) 来ます。special、encodingfile、fontfile の順番は決まっていませんが、最初の三つのフィールドの順序は固定です。

いくつかの例を挙げます:

 ptmri8r Times-Italic <8r.enc <ptmri8a.pfb
 cmr10 CMR10 <cmr10.pfb
 psyro StandardSymL ".167 SlantFont" <usyr.pfb
 pcrr8rn Courier ".85 ExtendFont" <8r.enc <pcrr8a.pfb

fontfile 名の先頭の "<" はフォントが部分埋め込みであることを指示します。最初と最後の例では "8r" エンコーディングが用いられ、後の二つでは斜体にしたりフォントを横方向に収縮したりしています。上の例ではすべてフォントの basename (ここでは PostScript フォント名) が指定されています。これは必須ではありませんが、常に使用することを強く推奨します。

fontflags はフォントの特徴を記述したフラグです。上記の例では全く使われていません。これはフォントが埋め込まれていない場合などに、PDF ビューアが代替フォントを見つけてくるのに利用されることがあります。フォントを埋め込まないことはあまり推奨されませんのでこのフラグは通常使いません。

pdfLaTeX で日本語

pdfLaTeX で日本語を扱うには CJK パッケージを使います。CJK パッケージについては

を参照してください。

基本的な使い方

とりあえず IPA 明朝を使って日本語を出してみましょう。フォントなどの設定が出来ていない場合はまず TFM や fd ファイルの準備が必要です。ttf2tfm プログラムでサブフォントを生成します。まずは、適当な作業ディレクトリを作り (大量のファイルを生成しますので必ずそうしましょう)、そこにフォントをコピーします。そして、以下を実行します:

 ttf2tfm  ipam.ttf ipam@Unicode@ &> log

(お使いの OS によって実際のコマンド・ライン入力は適切に変えてください) 大量の TFM ファイルができますので注意してください。そして fd ファイル "c70ipam.fd" を作ります。以下のような内容です:

 \ProvidesFile{c70ipam.fd}
 \DeclareFontShape{C70}{ipam}{m}{n}{<-> CJK * ipam}{}
 \endinput

LaTeX ソースを書きます。(この例ではエンコーディングを UTF-8 にします)

 \documentclass{article}
 \usepackage{CJK}
 \pdfmapline{=ipam@Unicode@ <ipam.ttf}
 \begin{document}
 \begin{CJK*}{UTF8}{ipam}
 こんにちは。
 \end{CJK*}
 \end{document}

ここで、"\pdfmapline" はフォントマップを定義する pdfTeX の拡張コマンドです。CJK パッケージには CJK 環境と CJK* 環境が用意されていますが、これらの違いは CJK 文字に続くスペースや改行文字の取り扱いの違いです。改行文字を無視して欲しい場合は CJK* 環境を使います。

このままでは生成された PDF では文字列の検索やコピー&ペーストができません。これを可能にするには CJK の代わりに CJKutf8 を使います。また、ブックマークなどに日本語を使うには、unicode オプション付きで hyperref パッケージを読み込みます:

 \usepackage{CJKutf8}
 \usepackage[bookmarks,unicode]{hyperref}

この場合、エンコーディングには UTF-8 を使います。

CJK* 環境では平仮名や漢字に続くスペースは無視されます。和文と英単語の間にスペース(四分アキ)を入れたい場合は \CJKtilde と "~" を使います。

 \begin{CJK*}{UTF8}{ipam}
 \CJKtilde
 日本語は~Japanese~です。
 \end{CJK*}

pdfLaTeX で CJK を利用する場合、PDF 出力におけるフォントの取り扱いに難がありますが、多言語環境を考える場合は有用です。


Last-modified: 2017-08-23 (水) 15:32:57 (330d)