TeX

情報の孤島

情報の�島

手元にLaTeXマニュアルの類もないし、ネットもないので、こういうときに困る。
原稿の取りまとめをしているのだが、TeXファイルをコンパイルしようとしたら、画像ファイルがないことが判明。あー、Y氏、メインのTeXファイルと出力のdviファイルだけを添付している。このままではコンパイルできない。画像をあきらめて、後で貼り込むこともできるが、こういう時に何とかしたいと頑張ってしまうのが、損な性分ではある。否、原稿を書くよりもこういう作業の方が好きなのさ〜 :mrgreen:

まず、dviファイルをdvipdfmxでPDFに変換して、それをPreviewで開く。画像の部分だけ切り取って保存する。これで画像単独のPDFファイルが完成。こういう時にPDFが標準になっているマックは便利だ。Graphic ConverterでPDFをEPSFに変換する。あとはこれを読み込めばよい。あー、読み込み方を覚えていない、orz… ハードディスクの中をあちこち探して、以前、かみさんのレポートを作成したときの文書を発見。それを真似して記述する。コンパイルすると・・・Bounding Box の情報がない、というエラーメッセージ。はあ〜。あーBounding Box ねえ。え〜と、どうやって調べるんだったっけ。ダメだ、完全に忘れている。やっぱり諦めるか〜と思ったとき、ふと、それってファイル自身に書いてあるはずだよねえ、ということで、ダメもとで Emacs でファイルを開く。そうか、EPSFも基本的にはPSだから、テキストファイルなんだ。えらいぞ、アドビ(笑)。あれこれ苦労したが、Bounding Boxも判ったので、以上で完了。備忘録として記録。

\begin{wrapfigure}{r}{6truecm}
  \vskip -1truecm
  \includegraphics[width=7truecm, bb=0 0 217 204]%
     {hogehoge-fig1.epsf}
  \vskip 2truecm
\end{wrapfigure}

あー、でも、これってネットがないと読めないから、備忘録にならないか・・・。

TeXでセプテンバー・フォントの半角英数を使う

とりあえず成功。下の画像みたいになる。

TeXでセプテンバー・フォント(3)

日本語化されたTeXは 大きく分けて 本文の和文書体と欧文書体,数式の書体を指定することになっている。組版するには,それぞれのメトリック・ファイル (拡張子 .tfm)が必要。今回はセプテンバーの半角部分に対するメトリック・ファイルと,PDFに変換する際に必要なマップ(どの文字コードにどのグリフを対応させるか)を作成した。

まずは ttf2tfm を用いて,セプテンバー・フォントの本体 SeptM.ttf からフォントの幅の情報を抽出する。シェルから

$ ttf2tfm SeptM.ttf September-M@Unicode@

のようにする。名前は適当に。ここではSeptember-M とした。@Unicode@ というおまじないが良くは分からないながら,おそらくはユニコードでの区域割りということかな?実行すると,September-M00.tfm, September-M01.tfm, etc. ファイルが沢山作られる。おそらくは256個ずつ(8ビット)分割したのであろう。英数半角部分のメトリック情報は September-M00.tfm にあるので,これだけを所定のディレクトリーに移動する。この September-M00 を読み込んだフォントをローマン・デフォルトにすれば,TeX はコンパイルできる。TeXが関知するのはメトリックだけだから。

今回はバーチャル・フォントは作らなかったので,あとはマップだけ。dvipdfmx 用に,次の行を適当なマップファイルに書き足す。

September-M@Unicode@ UniJIS-UTF16-H SeptM.ttf -m <00>

理解できてないところもあるが,想像するに,SeptM.ttf というフォントのユニコード 00区画から UniJIS-UTF16-H なるエンコードでフォントグリフを読み出せ,という感じなのだと思う。

スタイル・ファイル(マクロ集)は省略したが,そこは既存のいろんなものを参考にすればOK。一応これで使えるようになった。

日本語フォントの半角部分をTeXで使う為のメモ

とりあえず,情報を集める。次のページからあちこち辿ればなんとかなりそうかな?

全角半角メモ – TeX Wiki

フォントの処理は大きく分けて2通り?元のフォントから半角部分だけを抽出したType1フォントをFontForgeなどで生成する方法。しかし,これは著作権に抵触するから多分ダメ。もう一つは,Virtual Font (仮想フォント) を作り,元のフォントにマッピングさせる。まあ,こちらが本線か。やるべきことは,次の通り。和文フォント foo.ttf から半角関係のメトリック情報を抽出させて(これは単にフォントの幅の情報なので著作権に抵触しないと思われる),foo.tfm を作る。dvipdfmxがPDFに変換するときにフォントを参照できるように,仮想フォント foo.vf を作る。

セプテンバー・フォント

TeXで手書き風のフォントを使いたいと思い、あちこち探してやっとめぐりあったのが、セプテンバーという書体。タイプラボから発売されている。佐藤豊さん(@タイプラボ)という方がお一人でこつこつとデザインされたという。手書きながら完成度はさすがプロの作品。そこいらのフリーフォントとは品質が全然違う。これは買うしかないでしょう!TeXでHermann Zapf の Euler math font と組み合わせてみた。(下の画像)

TeXでセプテンバー・フォント

セプテンバーができるまで、というコラムがまた興味深い。ふーん、そうかあ、こんなことして作るんだ~、大変だなあ、いやありがたや、ありがたや。フォントもステキだけど、コラムも面白い。コラムと言えば、マッキントッシュが出た頃、イラストレータと格闘しつつフォントを作ったという話があり、マッキントッシュ・プラス以来のユーザーとしては共感しつつ、笑いながら楽しく読んだ。そうそう、ハードディスク20Mとかだったんだよなあ、あの頃。

TeX (LaTeX) で使うにはいろんな作業が必要。まず、マック版ではなくウィンドウズ版を購入することがポイント。マック版だとフォント・スーツケースになっているから、これからTrueType(TTF)を抽出するのが困難(かどうか知らないが、ワタシにはできない)。ウィンドウズ版は自己解凍形式になっているが、キャビネットファイルではないので、cabextract (UNIX Tool) では解凍できなかった、orz… ということで、Windows PC に持っていって解凍し、マックに移す。

LaTeXで使うために、メトリックファイル(tfm, vf)とマップファイルを作る。jis.tfm をコピーして、たとえば september-jis.tfm とし、

$ makejvf september-jis.tfm r_september-jis

これで、ヴァーチャル・フォントの september-jis.vf と dvipdfmx が参照する r_september-jis.tfm というメトリックファイルが出来る。Map file は新たに作るか、既存のファイルに

r_september-jis H :0:SeptM.ttf

という行を追加する。SeptM.ttf というのがフォントのファイル名。以上のファイルをそれぞれ適切な場所に移動して、必要なら texhash して終了。あー、スタイルファイルを忘れていた。otfパッケージなどを参考にして、適当に作ったけど、ここは改良の余地がある。改良と言えば、セプテンバーフォントの全部がまだ使えない。半角の英数はTeXの仕組みで欧文フォントに割り当てられている。これが次の課題。

FontForgeを使ってみた

フリーのフォント編集ソフト FontForge を Mac にインストールしてみた。直接の動機は Comic Sans MS フォントのアルファ (α) がラテン文字のエー (a) と区別つかないのを何とかしたいということ。いや,こんなコミカルなフォントをTeXの数式フォントにしなければいいのだが,CTANからcomicsansパッケージをダウンロードしたら,存外良さそうだったので。

FongForge on Mac OS X

このFontForgeは,もともとUNIXのソフト。だから,マック上というよりは X11上で動く。初め最新のパッケージをインストールしたのだが,X11のライブラリーが不足しているとかで起動できなかった。どうも最新のはMac OS X 10.4 以上でないとダメみたい。そこで,少し前のパッケージを入れてみた。基本的にベジェ・スプライン曲線で輪郭を作るわけで,Metafontと原理は似ている。画面上でコントロールポイントをいじるのは面白い。慣れないと思い通りにはならないが。いや,これは楽しい作業だ。

Comic Sans の埋め込みに成功したが・・・

あれこれやっていたら成功したので 😉 どこがポイントなのかイマイチ不明だが,メモ。

前回失敗した原因は多分2つ。ひとつはMapファイルがpdfTeX用(dvipsと同じか?)であったこと。もう一つが納得できないのだが,dvipdfmxがMapファイルを読めてなかったこと。正確に言うと,updmapしたのに認識されてなかったこと。直に dvipdfmx.cfg に f comicsans.map と書き込んだら上手く行った。おまけに,Type 1 に変換せずとも TrueType のままでも埋め込めることまで判明。あー無駄な作業しちゃったなあ。

updmap-sys –enable Map=comicsans.map とやればそれでOKだと思っていたが,違うのかな?
/texmf/web2c/updmap.cfg には追加されていたが,dvipdfmx.cfg には反映されてなかった。

よく分かってないが,ともかく dvipdfm(x) 用の書式に合わせて,
rcomic8r 8r ComicSansMS.ttf
のように「TeXでのフォント名,エンコーディング,フォント本体」を並べて Map ファイル comicsans.map を作り,これを dvipdfmx.cfg に登録すれば,とりあえずはOKみたいである。根本的理解はしてないので不満が残るが。

Comis Sansの埋め込みに失敗

CTANからComis Sansパッケージをダウンロードしてインストール。texhashもupdmapもちゃんとして実験。dviファイルは作られるが,dvipdfmxでPDFに変換中にエラー。

** ERROR ** Unable to find TFM file "ComicSansMS"

試しに日本語TeXではなく,欧文専用のpdfTeX (dviを経由せずに直接PDFを生成するもの) でコンパイルすると,とくにエラーもなくPDFが作られる。ということは,基本線は間違ってないはず。しかし解せないのは,メトリックファイル(TFM)が見つからないというエラーの意味。TeXのコンパイルは出来ているのに・・・。dvipdfmx が変換時にどういう情報を必要としているのか,調べる必要があるなあ。

日本語フォントをPDFに埋め込む実験

このところ,Windows版TeXでの実験ばかりだったが,Mac OSX にはもともとヒラギノという美しいフォントが付属しているわけで,これを使わない手はなかった。ということで,埋め込みの実験。実は,utfパッケージを拡張した otfパッケージを使えば,自動的にヒラギノが埋め込まれる。しかし,それ以外にも埋め込みたいフォントがあるので,仕組みを理解しておきたいのであ〜る。

参考にしたのは,otfパッケージを作成された齋藤修三郎さんのサイト LaTeX2e的 と 具体的な事例が紹介されている MacPorts の pTeX における和文多書体環境の整えかた というページ。作業は意外と簡単だったが,忘れないうちにメモ。

とりあえず,ファイル群はすべてカレントに置いて実験。本格的に使うときは,適切なディレクトリーに置いて,texhash すること。

まず,フォント本体をダウンロード。今回は cinecaption.otf というOpenType Font を使う。jis.tfm あるいは otfパッケージの tfm ファイルをコピーして cinecaption.tfm なるメトリックファイルを作る。今回は otfパッケージのをコピーした,あとで縮尺するのだが,jis.tfmと違い,0.92469倍にすることに注意。

次に,vf (Virtual Font) などを作る。makejvf を使って,cinecaption.vf と cinecap.tfm を生成する。作り方は

% makejvf cinecaption.tfm cinecap

さらにマップファイルを作る。次の内容を cinecap.map というファイルに保存する。

cinecap H cinecaption.otf

最後に,このフォントを使うためのマクロ。とりあえず,sample.tex というファイルで実験。プリアンブルの部分に次のような記述をする。


\makeatletter
\DeclareKanjiFamily{JY1}{cinecap}{}
\DeclareFontShape{JY1}{cinecap}{m}{n}{<-> s * [0.92469] cinecaption}{}
\newcommand{\cinecapdefault}{cinecap}
\DeclareRobustCommand\cinecapfamily{%
  \not@math@alphabet\cinecapfamily\relax
  \kanjifamily\cinecapdefault\selectfont}
\def\textcinecap#1{\relax\ifmmode\hbox\fi{\cinecapfamily #1}}

これで,コンパイルすれば,sample.dvi ができる。これを PDF に変換する際には,マップファイルへの参照が必要となる。本格運用時は cid-x.map に書き込んで updmap するが,今回は実験なので dvipdfmx が読み込むように,オプションで指定する。

% dvipdfmx -f cinecap.map sample.dvi

以上でフォントがちゃんと埋め込まれているのを確認。

TeXマクロメモ

理由がよく分からないのだが,とりあえず動いたのでメモ。

丸数字(数字を○で囲んだもの)を実現するマクロ \Maru{数字} を適当に組んで使っている。あちこちのサイトや書籍で紹介されているのと基本的には同じで,数字と○を重ねて表示する。それはそれで良いのだが,utfパッケージを利用して,ヒラギノフォントなどで使える本物(?)の丸数字を使おうと

\def\Maru#1{\ajMaru{#1}}

などとマクロを組んでいたのだが,相互参照でうまく行かない。数式番号として丸数字を使うマクロを組んでいるのだが,\eqref{hoge} で hoge というラベルを付けた数式番号を表示しようとするとエラーになってしまう。一回目のLaTeX処理ではまだ hoge が何番か分かってないので,hogeを参照するマクロ \r@hoge は未定義(つまり \relax と同じ値)。そこで,未定義の時は■を出力し,定義されているときは丸数字を表示させようと,

\def\eqref#1{%
  \expandafter\ifx\csname r@#1\endcsname\relax
     \hbox{■}%
  \else\Maru{\ref{#1}\fi }

と定義した。\Maru の定義が以前のものだと問題なく動くのだが,\Maru を \ajMaru を呼び出す形だと,何故かエラーになる。どうも引数が数字と認識されてない様子。あれこれ試したけどダメ。最後にままよ,とカウンター変数を使って次のようにしたらうまくいった。

\newcount\eqcounter
\def\eqref#1{%
  \expandafter\ifx\csname r@#1\endcsname\relax
     \hbox{■}%
  \else\eqcounter=\ref{#1}\Maru{\the\eqcounter}%
  \fi}

しかし,何故これで上手く行って,それまでのマクロはダメなのか,理解できていない。要は,きちんと数字を渡せれば良いはずなのだが。

dvipdfmxで日本語フォントの埋め込み実験

ポータブル化とはあまり関係ないが、出来上がりのPDFにフォントが埋め込まれてないと、印刷時の環境に依存してしまう、ということで、日本語フォントの埋め込みの実験。フリーのIPAフォントというのを入手してきて、やってみた。

正式には、mapファイルやフォント関係を適切なディレクトリーに配置するべきだが、とりあえず実験ということで、文書と同じディレクトリーに mapファイルとTrueTypeフォントを置いた。IPAフォントを解凍して、すべてをカレントディレクトリーに配置。次に、

rml   H      ipam.ttf
rmlv  V      ipam.ttf
gbm   H      ipag.ttf
gbmv  V      ipag.ttf

なる内容を、例えば IPA_font.map という名前で保存する。そして、コマンドラインから

> dvipdfmx -f IPA_font.map sample.dvi

とすれば、IPAフォントが埋め込まれた sample.pdf が作られる・・・のだが、何故か警告が。

** WARNING ** UCS-4 TrueType cmap …

という警告メッセージが出るのだが。これは無視して良いのかな?