茱萸note

電子工作の備忘録と旅行の記録

TeX 電子工作

TeXの多書体化

投稿日:2016年3月14日 更新日:

TEXを多書体化して、文書中で自由にフォントを変えられるようにします。


目次


TeXを多書体化するには主に2つの方法があります。

  • pLaTeXを使ったまま(強引に)多書体化
  • XeLaTeXを使う

pLaTeXを使ったまま多書体化する

利点
  • 普段使っているpLaTeXがそのまま使える。
欠点
  • 手順が面倒
  • OpenTypeフォントの従属欧文を使いたい場合、w32texではインストールされない他のツールを用いる必要がある

普段使っているpLaTeXがそのまま使えるのは大きな利点でしょう。XeLaTeXもpLaTeXの文章を殆ど流用できるとはいえ、少なくともプリアンブルは書き換えないといけません。

和文部分を多書体化する(TrueType・OpenType共通)

  1. フォントファイル(ここではhogemincho.ttf)をダウンロード。作業フォルダに保存。
  2. c:¥w32tex内の何処かにあるjis.tfmを作業フォルダにコピー。ファイル名を好きな名前(ここではhoge).tfmに変更。
  3. コマンドプロンプトを開く。カレントディレクトリを作業フォルダに。
  4. makejvf hoge.tfm hogeを実行。
  5. hoge H hogemincho.ttfと書いたmapファイル(ここではfont-hoge.map)を作業フォルダに作る。
  6. 以下をプリアンブルに書き加える。
\AtBeginDvi{\special{pdf:mapfile font-hoge}}
\DeclareKanjiFamily{JT1}{hoge}{}
\DeclareFontShape{JT1}{hoge}{m}{n}{<-> s * [0.961] hoge}{}
\DeclareFontShape{JT1}{hoge}{bx}{n}{<-> s * [0.961] hoge}{}
\DeclareKanjiFamily{JY1}{hoge}{}
\DeclareFontShape{JY1}{hoge}{m}{n}{<-> s * [0.961] hoge}{}
\DeclareFontShape{JY1}{hoge}{bx}{n}{<-> s * [0.961] hoge}{}

蛇足:以下をプリアンブルに書き加えるとPDFの用紙サイズが正しくなる。

\AtBeginDvi{\special{papersize=\the\paperwidth,\the\paperheight}}

同じように、以下をプリアンブルに加えると指定したマップファイルをコンパイル時に読み取らせることができる。

\AtBeginDvi{\special{pdf:mapfile font-hoge}}

TrueTypeの従属欧文を使う

  1. c:¥w32tex内の何処かにあるUnicode.sfdを作業フォルダにコピー。
  2. コマンドプロンプトで「ttf2tfm hogemincho.ttf 好きな名前(ここではhogeA)@Unicode@」を実行。
    この時、hogeA4f.tfmみたいなファイルが沢山できるが、この際hogeA00.tfm以外は削除してもらっても構わない。
  3. c:\w32tex内の何処かにあるttfonts.mapをメモ帳で開き、何処でもいいのでhoge@Unicode@ hogemincho.ttfを書き加える。
  4. c:\w32tex内の何処かにあるcid-x.mapをメモ帳で開き、何処でもいいのでhoge@Unicode@ UniJIS-UCS2-H hogemincho.ttfを書き加える。
  5. 以下をプリアンブルに書き加える。
\DeclareFontFamily{OT1}{hogeA}{}
\DeclareFontShape{OT1}{hogeA}{m}{n}{ <-> s * hogeA00}{}
\DeclareFontShape{OT1}{hogeA}{bx}{n}{ <-> s * hogeA00}{}

OpenTypeの従属欧文を使う

一番厄介です。PXacidパッケージを使います。

zrbabbler.sp.land.to

PXacidの実行にはw32texの他にPerlのインストールが必須です。

ActivePerl Downloads – Perl Binaries for Windows, Linux and Mac

以後、c:¥w32tex内の何処かにあるrunscr.exepxacid.exeの名前で作業フォルダにコピーし、pxacid.plやフォントファイル(.otfかそのシンボリックリンク)を作業フォルダに置いた前提で話を進めます。

> pxacid hogea hogemincho.otf

とすれば、ファイルが生成されます。生成されたファイルのうち、

hogea-r-j40.ofm
hogea-r-ot1.tfm
hogea-r-ot1.tfm

以外は使用しないこととしますので、削除しても問題ありません。フォント定義ファイル(.fd)やmapファイルも自動生成されますが、和文部分と一緒にプリアンブルに書きまとめるのが収まりが良いように思われるので使いませんでした。

次に、以下を記述したmapファイル(ここではfont-hoge.map)を作ります。既にmapファイルを作ってある場合は書き足してください。

hogea-r-j40  Identity-H  hogemincho.otf

最後に、以下をプリアンブルに加えます

\AtBeginDvi{\special{pdf:mapfile font-hoge}}
\DeclareFontFamily{OT1}{hogea}{}
\DeclareFontShape{OT1}{hogea}{m}{n}{<-> s * [0.961] hogea-r-ot1}{}

蛇足:シンボリックリンクの作成

シンボリックリンクの作成には、コマンドプロンプトを管理者として実行する必要がある。コマンドプロンプトを管理者として実行するには、「スタート>すべてのプログラム>アクセサリ」の順でたどり、「コマンドプロンプト」を右クリックして「管理者として実行」をクリックする。

あとは、以下のコマンドを入力すればシンボリックリンクが作成できる。

mklink /d "リンク先" "リンク元(ファイルが現存)"

XeLaTeXを使って多書体化する

利点
  • とても簡単に多書体化できる
  • 日本語対応は既にpLaTeX並に充実している
欠点
  • pLaTeXと比較すると利用できるパッケージが少ないかも知れない
  • 画像を多用した場合、コンパイルが遅くなる

画像を多用した場合、コンパイルが遅くなるのはXeLaTeXの特徴でしょう。pLaTeXでは初回コンパイル時に画像を読み取ってBoundingBox値を.xbbファイルに記録するので、二回目以降はコンパイルが早く終わりますが、XeLaTeXでは.xbbファイル或いはそれに準ずるファイルが生成されないので、恐らくコンパイルの度に画像を読み取っているのでしょう。

結局どっちを使ったか

はじめはXeLaTeXを使っていましたが、

  • 画像を多用した場合、コンパイルが遅くなる
  • \verb/.../\texttt{...}を使った時の文字位置が少々ずれて見栄えが悪い
  • \includegraphics[...]{...}のファイル名に全角文字が使えない

などの理由で、後にpLaTeXでもOpenTypeの従属欧文が使えることを知ってから使うのを辞めました。

-電子工作
-,

関連記事

Windows 10 で OpenSSH サーバーを使う

Windows 10 で OpenSSH サーバーを立ち上げて、外部から SSH ログインできるようにします。

ESP8266 で AES-CBC PKCS#7 Padding による暗号化・復号

ESP8266 で AES アルゴリズム・CBC モード・PKCS7 パディング の暗号化・復号化をする方法を述べます。

Raspberry Pi をスマートリモコン化! Alexa で部屋の照明を操作する【Alexa×Raspberry Pi その2】

Raspberry Pi に赤外線LED・赤外線受光モジュールを付けて、Raspberry Pi を学習リモコン・スマートリモコン化します。そして、Raspberry Pi を AWS IoT 連携させて Alexa で部屋の照明を操作します。

【Ubuntu】【上級者向け】Grubブートローダを削除する

「デュアルブートしてたけどUbuntuを削除することにした。」という人などに向けて、Grubブートローダ(Ubuntuのブートローダ)を削除する方法を説明します。

【Ubuntu】【上級者向け】Grubブートローダをインストールする

「EFIシステムパーティションを新たに作成した」などの理由でGrubブートローダをインストールしたい人に向けてその方法を説明します。