名前: ZR 日時: 2010-02-20 18:10:30 IPアドレス: 122.26.181.*
>>54564 (TFM を作成した後、どうすればよいかを説明します。) dvipdfmx では、エンコーディング(つまり TFM/JFM 等の TeX 側 フォントと物理フォントの間のグリフのマップ)の指定の方法 として次の 3 つがあります。 - enc ファイル: PostScript グリフ名での指定 - CMap ファイル: CID での指定 - "unicode": Unicode 値での指定 ここでは、 - TeX 側フォントをサブフォント(SFD)にする - エンコーディングを "unicode" にする という方式で Unicode フォントを LaTeX の標準的な欧文エンコー ディングで用いる方法を紹介します。この方法は、dvipdfmx の 他に、pdfTeX や dviout 等の「SFD をサポートするソフトウェア」 でも適用できます。 1) TFM ファイルを作成 所望のエンコーディングのTFMファイルを何らかの手段で作る。 XeTeX を使った方法を >>54564 で紹介した。ここでは、 IPA P明朝/IPA Pゴシック の T1 エンコーディングの TFM を ipam-r-t1/ipag-r-t1 の名で作成した。 →これで TeX において ipam-r-t1 で「T1 エンコーディング の IPA P明朝」を指定できるようになる。 # TeX のフォント指定は \font プリミティブで行うのだが、 # 今は LaTeX の使用を前提とし、TeX の話は割愛する。 # 取りあえず最初はファイルは全てカレントに置いておく。 2) SFD ファイルの用意 以下の内容のファイル TeXStdM.sfd を用意する。 %<TeXStdM.sfd>-------------- t1 0x0060 0x00B4 0x02C6 0x02DC 0x00A8 0x02DD 0x02DA 0x02C7 0x02D8 \ 0x00AF 0x02D9 0x00B8 0x02DB 0x201A 0x2039_0x203A 0x201C_0x201E \ 0x00AB 0x00BB 0x2013_0x2014 0x200C 0x2080 0x0131 0x0237 \ 0xFB00_0xFB04 0x2423 0x0021_0x0026 0x2019 0x0028_0x005F 0x2018 \ 0x0061_0x007E 0x002D 0x0102 0x0104 0x0106 0x010C 0x010E 0x011A \ 0x0118 0x011E 0x0139 0x013D 0x0141 0x0143 0x0147 0x014A 0x0150 \ 0x0154 0x0158 0x015A 0x0160 0x015E 0x0164 0x0162 0x0170 0x016E \ 0x0178_0x0179 0x017D 0x017B 0x0132 0x0130 0x0111 0x00A7 0x0103 \ 0x0105 0x0107 0x010D 0x010F 0x011B 0x0119 0x011F 0x013A 0x013E \ 0x0142 0x0144 0x0148 0x014B 0x0151 0x0155 0x0159 0x015B 0x0161 \ 0x015F 0x0165 0x0163 0x0171 0x016F 0x00FF 0x017A 0x017E 0x017C \ 0x0133 0x00A1 0x00BF 0x00A3 0x00C0_0x00D6 0x0152 0x00D8_0x00DE \ 224: 0x00E0_0x00F6 0x0153 0x00F8_0x00FE 0x00DF %<EOF>-------------- →「t1」という名前に Unicode 値 256 個の列を対応させている。 # 「ot1」「ly1」等の他の指定を加えることも可能。 2) DVIウェアの設定 dvipdfmx の場合、有効なマップファイル(cid-x.map)に以下の 記述を加える。 ipam-r-@TeXStdM@ unicode ipamp.otf ipag-r-@TeXStdM@ unicode ipagp.otf →TeXStdM.sfd に名前「t1」があるので、これで ipam-r-t1 と ipamp.otf(IPA P明朝)が対応付けられた。エンコーディング は TeXStdM.sfd の「t1」に対応するもの、つまり前掲の 256 個の値の列である。 # もし、TeXStdM.sfd が他の ot1、ly1 等の記述も持っている # 場合は、ipam-r-ot1 等にも対応付けが行われる。 pdfTeX の場合は LaTeX 文書のプレアンブルに以下の記述を行う。 \pdfmapline{ipam-r-@TeXStdM@ <ipamp.ttf} # pdfTeX はグリフ形式(CFF/TrueType)を拡張子で判断しているよう # なので、TrueType グリフの OTF は拡張子を .ttf に変える必要 # があるように見える。 dviout の設定方法は割愛…。 3) LaTeX の設定 例えば、次のような(奇妙な)設定をしてみる。 フォントファミリ「ipaf」を新設し、ipaf の標準ウェイト (\mdseries)を「IPA P明朝」、太字ウェイト(\bfseries)を 「IPA Pゴシック」にする 次のようなファイルを作成する。 %<t1ipaf.fd>-------- \DeclareFontFamily{T1}{ipaf}{} \DeclareFontShape{T1}{ipaf}{m}{n}{<->s*[0.925]ipam-r-t1}{} \DeclareFontShape{T1}{ipaf}{m}{it}{<->ssub*ipaf/m/n}{} \DeclareFontShape{T1}{ipaf}{bx}{n}{<->s*[0.925]ipag-r-t1}{} \DeclareFontShape{T1}{ipaf}{bx}{it}{<->ssub*ipaf/bx/n}{} %<EOF>-------------- →これで、LaTeX 中で、「T1 エンコーディングの ipaf ファミリ」 に切り替わった時に自動的にこのファイルが読み込まれる。 # ファイル名は「<エンコーディング名の小文字><ファミリ名>.fd」。 # pLaTeX の文書クラスでは和文を少し縮小するように設定して # いるが、欧文と和文を同じフォントから取る場合は当然同じ # 大きさで用いるべきである。ここでは、和文フォントは js # クラスのものをそのまま用いることを想定し、欧文にも同じ # スケール(0.925倍)を適用している。(js クラスの和文フォント # 宣言に記されている値 0.961 ではない。jsclasses.dtx に # その辺りの説明がある。) 4) LaTeX 文書での使用 プレアンブルで以下の記述を行うことで標準の欧文エンコーディング が T1 に切り替わる。 \usepackage[T1]{fontenc} その上で、文書中で NFSS の命令を用いる。例えば、 \fontfamily{ipaf}\selectfont と欧文が「IPA P明朝」に切り替わる。この状態で \textbf や \bfseries を用いると「IPA Pゴシック」になる。 文書の既定のセリフフォント(\rmfamily)を ipaf にするには プレアンブルで以下の命令を実行する。 \renewcommand{\rmdefault}{ipaf}\normalfont 5) ファイルの配置 カレントに置かなくても使えるようにするには、TeXMF ツリーの 以下の場所にファイルを移動する。 *.tfm → $TEXMF/fonts/tfm 以下 *.sfd → $TEXMF/fonts/sfd 以下 *.fd → $TEXMF/tex/latex 以下 W32TeX では Windows にインストールされた TTF/OTF は TeX で 使えるようになるが、それ以外の場合は以下の位置に配置する。 TTF → $TEXMF/fonts/truetype 以下 OTF → $TEXMF/fonts/opentype 以下 # TTF/OTF の区別はソフトウェアによって異なるかも知れない。 # ver.003 の IPA フォントは拡張子が .otf だが dvipdfmx では # TTF として扱う必要がある。
この書き込みへの返事: