文字コードを判別してTeXにかけるPerlスクリプト

とある事情で、Ubuntu上ではUTF-8およびShift_JISの2種類のTeX文書を処理している。一々 platex -kanji=utf8 とか platex -kanji=sjis とか、したくないので、文字コードを判別してから組版し、ついでにPDFに変換して文書ビューアで表示させる Perl スクリプトを作ってみた。

ユーザーは自分だけなので、思いっきり手抜きだが、まずまず役立っている。

#! /usr/bin/perl -w
#
# [usage] myplatex hoge
#  hoge.tex の文字コードを判別して、platex -kanji=KANJICODE とコンパイル
#  引き続いて dvipdfmx で PDF を作り、文書ビューアー evince を起動する
#  とりあえず,普段使っている UTF-8 と Shift_JIS のみサポート

use strict;

my $basename;   # hoge
my $texfile;    # hoge.tex
my $dvifile;    # hoge.dvi
my $pdffile;    # hoge.pdf
my $kanjicode;  # UTF-8, Shift_JIS

$basename = $ARGV[0];
$texfile = $basename."\.tex";
$dvifile = $basename."\.dvi";
$pdffile = $basename."\.pdf";

open (INFILE, "<$texfile") || die "File Not Found\n";
close INFILE;

$kanjicode = `nkf -g $texfile`;
chomp($kanjicode);

if ($kanjicode eq "UTF-8") {
 system("platex -kanji=utf8 -interaction=nonstopmode $texfile");
} elsif ($kanjicode eq "Shift_JIS") {
 system("platex -kanji=sjis -interaction=nonstopmode $texfile");
} else {
 die "Not supported\n";
}

system("dvipdfmx $dvifile");
system("evince $pdffile");

MePoTeXで悪戦苦闘

図版を作るために、ひさしぶりにMePoTeX (LaTeXからMetapostを呼び出して使うためのマクロ集) を使ったのだが、どうも思う通りに行かず、イライラする。腹立ちまぎれ(?)に状況をメモ。

まず、Mac OS X 上では、何故か pensize が思うように変えられない。\sendMP{…} の中で pickup pencircle scaled 1.2pt などとしても線は細いまま。ええいと、3ptにしたら突然太くなる。いや、3ptは太すぎなんだってば。あれこれやっていると、ペンサイズは変えてないのに、ある場所に \mptDraw{…} と、MePoTeX の描画マクロを加えた瞬間に全体のペンサイズが変更になったり、もう訳が分からんというか、なんじゃ〜これ〜。

原因がマクロ集にあるのか、それともMacのMetapostにあるのか判断できないので、Ubuntu (Linux) 上でやってみようとするのだが、これが上手く動作せずに、これまたイライラ。ちゃんと shell escape のオプションも指定しているのに、何故か sh: mpost not found のエラーメッセージ。おいおい、パスが通ってないのかよ、と思いつつ、シェルから実行してみると、パスは通っている模様。というか、platexと同じ /usr/local/teTeX/bin/ にmpost もあるんですけどね。そういえば、エディターからlatex呼び出すときも、何故か実行ファイルを見つけられなかったことあったよなあ、と思いつつ、mepotex.sty を読んで、mpostを呼び出している部分を /usr/local/teTeX/bin/mpost と、絶対パス指定に変更してみた。いやあ、こんな乱暴、普通あり得んだろう。結果・・・ちゃんと mpost 呼び出されるじゃないすか。うーん、やっぱり、ここかあ。

しかし・・・こんな現象、いくら検索しても出てこない。ってことは、ワタシの設定が間違っている可能性が高い、と思われる。うーむ、パスが通ってるのに何故に絶対パスを記述しないとダメなんでしょうか。理由が分からない。あーイライラするなあ。

やはり日本語ファイル名だと読み込まれない

実験してみたが、ダメだった。メインのファイルをutf-8で編集し、「なんとか.tex」というファイルを読み込もうと \input なんとか.tex としても、
ファイルが見つからないというエラーメッセージ。ううむ。

以前読んだことがあるが、日本語TeX (ASCII pTeX) では、内部的にはJISコードで処理しているとか何とか、とにかく、何らかの処理をしていたような気がする。もしそうであれば、Ubuntu側はutf-8でファイル名を管理しているのだから、無理というものだ。TeXの内部処理に手を付けて、\input など外部ファイルを読み込むルーチンを書き換える必要がある。それはワタシの手に余るなあ。

Mac OS X 10.3.9 までの井上版pTeXでは、そういう処理が施されているのだろうと想像。今のところ UNIXベースの日本語TeXシステムで日本語ファイル名が普通に使えるものを他に知らない。みんなファイル名だけはアルファベットで表記しているのだろうが、不便じゃないのかなあ。

原因はUSBケーブルの接触不良だった

携帯電話(SoftBank 705NK = Nokia N73) で撮った動画をコンピューターに転送しようとして一苦労。USBケーブルでMacに繋いでも、マウントしない。あれ?おかしいなあ。たしか以前はあっさりとマウントしたのに〜。

試しにUbuntu稼働中のVAIOに繋いでも同じ。大容量ストレージモードになっている旨の表示が出るが、マウントしない。マウントする方法をネットで調べても、繋げばあっさりとマウントする、という話ばかり。ありゃりゃ、どうなっているの?

何回かトライしているうち、瞬間的にマウントし、また直ぐに表示が消えるという現象が起きた。ははあ、さてはもしやケーブルが犯人か・・・。Nokiaに接続するコネクター部分のあそびが大きいのが気にはなっていたのだが、それが犯人とは気づかなかった。

ケーブルの下に物を置いて、コネクター部分が動かないようにして接続する。ほら〜、あっさりとマウントするじゃないか〜。

結論。Ubuntuでも、USBケーブルでNokia N73を接続するだけで、メモリーカードはあっさりとマウントされる。あ〜疲れた 😡 。

Ubuntuの見た目をMac OSX Leopard風に

多分あるだろうと検索したら、すぐに見つかった :mrgreen:

Turn Your Ubuntu Hardy to Mac OSX Leopard – Make Tech Easier

Ubuntu 8.04 (Hardy Heron)のデスクトップをMac OS X風に変える方法と、必要なファイル一式がある。読むと、というか、眺めて行くと、ログイン画面までMac風にしているので、思わず笑ってしまった。ここまでするか〜(笑)。

それにしても、ちょっと検索すると沢山ヒットする。これ以外にもUbuntu関係の情報は多い。ユーザー、案外多いのかも。Macクローン化はしないつもりだけど、壁紙あんまり好みじゃないし、少しずつ変えてみようと思う。さすがに、この Ubuntu-tan (ウブンツたん?)とかいうキャラクターの壁紙だけにはしないつもりだが(苦笑)。でも、壁紙ダウンロードでは一番人気なのだそうだ 😉 。

おお、エイリアスとシンボリックリンクは違うのか!

フォントファイルは数メガバイトあるので、TeXで使うとき、dvipdfmxが参照するディレクトリーにすべてのフォントファイルを置くことはできれば避けたい。とくにTeX以外でも利用するフォントについてはそうである。2カ所に同じファイルを置くのは無駄であるし。ということで、エイリアスを置いてみたのだが、何故かdvipdfmxによるPDF変換が上手く行かない。やむを得ず、多数の日本語フォントを2重に配置していた。

今日、ふと(ファインダーから行う)エイリアスじゃなくて(UNIX Shellで作る)シンボリック・リンクで試してみようと思いついてやってみた。あっさりとPDFに変化されて拍子抜け。何てこった。やっぱりリンク張って処理できたんじゃないか〜 🙁 。

何故にシンボリックリンクだと上手く行って、エイリアスでは駄目なのか。そもそも、マックのエイリアスってUNIXのSymbolic Linkの事ではなかったのか? どちらもファイルの種類はエイリアスと表示されるが、良く見るとアイコンのデザインが微妙に違う。ファイルサイズも違う。いずれにしても dvipdfmx で使うためには、「エイリアスを作る」では駄目で、シェルから

$ ln -s hogehoge.otf hogehoge-link.otf

のようにシンボリック・リンクを張るべし、という結論。

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と原理は似ている。画面上でコントロールポイントをいじるのは面白い。慣れないと思い通りにはならないが。いや,これは楽しい作業だ。

MacPorts

TrueTypeフォントをPS Type1に変換するためのツール ttf2pt1 をインストールしようとFinkで探すがない。あちこち探すと MacPorts でインストールできるらしい。単独のインストールもできるみたいだが、良い機会なので MacPorts をインストール。Finkのイメージでもっと親切かと思っていたら、えらい違い(笑)。GUIはまったくなし :mrgreen:

パッケージをインストールしたら、まずPATHを通すために .bashrc に

export PATH=/opt/local/bin:/opt/local/sbin/:$PATH
export MANPATH=/opt/local/man:$MANPATH

を追加。bashを再起動して

$ sudo port -d selfupdate
$ sudo port -d sync

これでインストール準備完了。ttf2pt1を探すには、

$ port search ttf2pt1

ちゃんとあることを確認したので、インストール

$ sudo port install ttf2pt1

以上で終了。

Windowsの自己解凍ファイルをMac OS X で開く

MS Comic Sans というフォントをMac上のTeXから使うためのメモ。フォント自体はMacにもインストールしてあるが,ファイル形式が Font Suitcase なので,拡張子が ttf の普通の TrueType フォントが欲しい。変換ツールが見つからなかったので,フォントをダウンロードすることにした。

An easy way to install Microsoft’s TrueType core fonts on linux

Download Microsoft Core Fonts

Windowsのフォントは自己解凍形式で comic32.exe という実行ファイルとしてしか入手できないみたいだ。しかし,これを他のプラットフォームで解凍するためのツール CabExtract (Extract Cabinet Fileということかな?) がある。

cabextract

Mac OS X には,Finkのパッケージがあったので,Fink Commander からインストール。シェルから

$ cabextract comic32.exe

とすれば,comic.ttf と comicbd.ttf の2つが生成される。

日本語フォントを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

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