LaTeX で用紙サイズがおかしくなるときは

実は、TeX Live 2010 以降に、妙な問題に悩まされていた。LaTeX の文書内でハイパーリンクを張るための hyperref というマクロがあるのだけど、これを使うと用紙のサイズがおかしくなってしまうのである。

具体的には、A4 よりもやや横に大きなサイズにタイプセットされてしまう。どうも、用紙サイズがレターサイズになってしまっているようで、\documentclass の引数に用紙サイズを a4paper 等と明示(って、普通明示するんだけど)しても治らない。困った挙句に、

\usepackage[a4paper]{geometry}
と書いて押し込んでいたのだけど、こう書くと、文字のポイント数が小さくなってしまう。うーん……と、困っていたのだった。

で、何となくググっていたところ、『4403 is written(終了しました)』2010年2月 7日 15:15 に辿りついたのだった。なになに……

ポイントはPDFしおりの文字化け対策と用紙サイズが適切に認識されない問題への対応です.PDFのしおり文字化け問題は昔のエントリーを見てください.documentclassのオプションにpapersizeを付けてやると用紙サイズがdvipsやdvioutに送られます.詳しくはマニュアルを読んでください.参考にしたのはこの情報.だいぶ昔からあった問題みたい・・・.何故,オレが博論執筆していたときは問題が具現化しなかったんだろう??
PDF のしおりが文字化けするのは既に分かっていて、これには対策を施していたのだけど、「documentclassのオプションにpapersize」というのは不明にして知らなかった。これを試すと……嘘のように簡単に、hyperref に関する問題が解決したではないか!

やはり、思い出したときにはマニュアルには目を通さなければダメだなあ、と、今更ながらに思い知らされたのであった。

W32TeX

基本的に、僕は音楽関連の作業をするとき以外は Microsoft Windows を立ち上げることはない。勿論、基本的な UNIX 系のコマンドセットを入れ、日本語変換も SKKIME で行うようにして、perl や ruby も使えるような環境を整えているのだけど、無理して Windows を使う理由がないのだ。

しかし、僕の Windows のシステムで、アンチウイルスソフトを更新する時期が近付いているので、それに合わせてメンテをしているうちに、ちょっと入れてみようかなあ、と、ふと思ったのだった。最初は TeX Live にしようと思っていたのだが、Windows 版の TeX Live は未だに 64 bit 化されていない。それだったら、角藤氏の W32TeX を入れるのとあまり差がない(まあ TeX Live は tlmgr で常に最新の状態に維持できる、というメリットはあるのだけれど)。ということで、W32TeX を導入することにした。

基本的な導入手順は、角藤氏のページに書かれている通りである。彼のアーカイブは RING server 等に置かれているので、wget 等を利用してあるディレクトリにごそっと取っておいて、インストールを実行するだけである。

フォント埋め込み用のファイルや、先日導入した emath なども、Linux から NTFS パーティションをマウントして、全て C:\w32tex\share\texmf-local に流し込む。後は TeX Live 同様に、texhash で ls-R データベースを更新するだけである。

タイプセットしてみると、Linux 上で行うのと何ら変わらない。まあ、こんなものでしょうねえ。しかし……だったら 64 bit native の TeX Live を Linux で使う方がいいわけで、やはり Windows を使うことには何もメリットがないのであった……

初めて文字コードで

先日導入した emath のテストのために、tDB 氏の書かれたドキュメントをいくつか LaTeX でタイプセットしていたのだが、そのままでは変換できないものがいくつかあった。

TeX Live の platex は、iconvでプリプロセスするような仕様になっているので、.tex ファイルの文字コードが何であっても、通常は問題が生じないはずである。事実、僕の場合も、JIS と UTF-8 が混在する環境で使っているのだが、今迄これでトラブったことはない。しかーし、今回のファイルはいわゆるシフト JIS だったので、初めてこれを疑ったのだった。

昔から、テキストファイルを複数の環境で扱う人間にとって、この文字コードの問題は悩みのタネだった。伝統的に、UNIX 等のシステム上では EUC-jp か JIS を使うことが多かったわけだけど、パソコンという代物は皆シフト JIS が一般的であった。昔は、自宅のパソコンを常時接続環境で使っている人などまず存在しなかったので、家と学校 / 職場で作業を行う場合、これらの間で文字コードを変換することは不可避だった。

それだけならまだよかったのだけど、これに加えて、UNIX 系のシステムと Microsoft 系のシステムでは、テキストファイルにおける改行を示すコードが違っていた。前者は LF、後者は CR + LF というコードで改行を示していたのだけど、丁度僕が大学に入る頃から出てきた Mac では、困ったことにこれを CR で表わしていた。つまり、

文字コード 改行コード
UNIX EUC-jp / JIS LF
Microsoft Shift-JIS CR + LF
Mac(〜 OS9) Shift-JIS CR
……という、ややこしい状況になっていたわけだ。

こういう状況で、僕等が便利に使っていたのが QKC というソフトだった。この QKC は、JIS・EUC-jp・シフト JIS の3種類の文字コードの間での相互変換、そして LF・CR+LF・CR の3種類の改行コードの間での相互変換を簡単に行うことができる。しかも、ワイルドカードで複数のファイルを指定することができるので、とにかく便利だった。

今も僕は /usr/local/bin/ にこの QKC を入れているのだが、今回のような事態では、QKC だけでは用が足りない。というのも、QKC は UTF-8 を扱うことができないのである。この辺の話はこの blog でも『今更漢字コード』(on 2011/01/24)で触れているのだが、ここで言及している NKC という ruby スクリプトはもう入手できなくなっている。公開元サイトがドメインごと消失してしまったのだ。

ということで、とりあえず頭の体操である。先の LF とか CR とかいうのをエスケープシーケンスで書くと、前者が \n で後者は \r である。だから、文字コードが単一であるならば、この2者を置換してやればいいということになる。UNIX には tr という便利なコマンドがあるので、たとえば LF を CR に置換するならば、

$ tr \\n \\r < foo.txt > bar.txt
とかしてやればいい。CR+LF を LF にするのなら、-d オプションを使って、
$ tr -d \\r < foo.txt > bar.txt
で出来そうだ。逆だったら……まあ、僕はこういうときは sed を使うのだけど、
sed -e 's/$/\r/' foo.txt > bar.txt
……こんな感じか。

しかし、tr を使うにせよ、sed を使うにせよ、ワイルドカードで一発処理、というわけにはいかないので、スクリプトを書くことになる。それが面倒なことがあるので、僕はこの手の処理をするときには、改行コードの変換を QKC で行い、文字コードの変換を NKF で行うことが多い。たとえば、

nkf -w --in-place ./*.txt
のように --in-place オプションを使えば、NKF でもワイルドカードを使った一発処理が可能になる。実は今回は、Microsoft のシステム上で作られたと思しきファイルを、まず QKC で改行コードを変え、次に NKF で文字コードを UTF-8 に変えた。このご時世、こんなことでバタバタやっているのは僕位なのかもしれないけれど、メモ代わりに、そして時代の記録として、これを書いておくことにする。

emath を入れる

相変わらず、GNU Emacs で書きものをして LaTeX でタイプセットする機会は頻繁にあるわけだけど、最近は解説のようなものを書く頻度が増えているので、たとえば数学の教科書などにあるような書き方をしたい、と思うときがある。

まさにこういう目的で作られたのが emath である。どのようなものなのかは、http://homepage3.nifty.com/emath/pdf/sample.pdf をご覧いただければお分かりいただけると思う。この emath は非常に多機能だし、便利だろうと思うのだけど、僕は今迄手を出すのに二の足を踏んでいたのである。

それは何故か、というと、この大熊一弘氏によるマクロ集は、コマンドが日本語ローマ字書きのものが多いので、書きながらさくっと使う上での直感性がイマイチなのである。では、50音索引付きのマニュアルのようなものがあるのか、というと、先の sample.pdf の基になった原稿から生成した sample.idx を mendex に読ませて索引を生成させればいい(上のリンク先の PDF はそうなっている)わけだけど、これは目次用のインデックスで作成した索引なので、充実した索引にするためには更にインデックスを付け足していく必要があるだろう。しかし、その作業の量を考えると……これは結構大変そうである。

まあ、でも、無いと困るんだから、これは作るしかなさそうである。こうやって僕のお盆休みは順調に潰れていくのだろうか、と、少し鬱な気分になるわけだけど、まあ、後でやっておくことにしよう。

インストール自体は単純である。まず emath の index page から emath のページにアクセスし、この「入口」からアーカイブにリンクされたページを見る。「スタイルファイル」の「丸ごとパック」のページから、基本となるアーカイブを取得するのだが、ここで ID とパスワードを要求される。これは「入口」に書いてある(すぐ暗記出来る程度の単純なものである)ので、それを入れればよろしい。アーカイブ取得後、同じく「スタイルファイル」の下にある「修正パック」と「実験版」の最新のアーカイブを取得する。

まず手近な作業用ディレクトリを確保し、emathf??????c.zip を展開する。sty.zip, doc.zip, pdf.zip の3つのアーカイブと readme が出てくるのだが、これらを LaTeX のファイルを置くべき場所に展開する。僕の場合だと、

$ cd /usr/local/texlive/texmf-local/tex/latex/
$ sudo mkdir emath$ cd emath$ sudo unzip ~/tmp/emath/emathf??????c/sty.zip
$ sudo mkdir -p /usr/local/texlive/texmf-local/doc/emath
$ cd /usr/local/texlive/texmf-local/doc/emath$ sudo unzip ~/tmp/emath/emathf??????c/doc.zip
$ sudo unzip ~/tmp/emath/emathf??????c/pdf.zip
$ sudo /usr/local/texlive/2011/bin/x86_64-linux/texhash

のように /usr/local/texlive/texmf-local/tex/latex/emath 内にスタイルファイルを、/usr/local/texlive/texmf-local/doc/emath内にドキュメントと PDF ファイルを展開して、最後には texhash で ls-R データベースの更新をしておく。

「修正パック」も「実験版」も、同様の手順で(「丸ごとパック」のファイルを上書きするようにして)入れればよろしい。大熊氏も警告されているようだが、必ず「丸ごとパック」→「修正パック」→「実験版」の順に作業を行うこと。なお、Perl スクリプトのインストールに関しては、emathWiki の『perl との連携』に詳しく説明されているので、そちらを御参照いただきたい。

……と、ここまでやってから、あーそう言えば一番面倒な作業をしてないじゃん、と思い出した。emath は前提として必要としているスタイルファイル・クラスファイルが結構な数あるのだけど、それらをチェックしながら入れなければならないのだ。詳細は、『math に必要なスタイルファイルなど』を参照されたい。

というわけで……これから TeX Live のファイルとバッティングしないように、この必要なファイルのインストールをすることになりそうだ……

というわけで、今さっき作業を終えたところである。僕の環境(TeX Live 2011)の場合は、

  • EMwallpaper
  • eclarith
  • eclbkbox
  • hhdshln
  • jcm
  • kunten2e
  • mbboard
  • random.sty
  • ruby.sty
  • uline--
……と、ざっとこれだけを入れる必要があった。

しかしなあ、うーん……この emath って、おそらく中高の数学の先生とか塾講師なんかが使うんでしょう?まあ、数学専攻の人だったら LaTeX を使うことにはあまり抵抗はないかもしれないけれど、tfm や pk フォントの生成とか、分からない人はどうするんだろう。あと、おそらく DOS / Windows 以来の弊害かもしれないけれど、マクロ名が大文字小文字混在になっているところでトラブルが発生することが何度かあった(たとえば EMwallpaper とか)。これも、分からない人には理解し難いような気がする。そういう辺りを(分かっている人には面倒なだけなのかもしれないが)refine することが、今後求められるのかもしれない。

Profile

T.T.Ueda
Tamotsu Thomas UEDA

茨城県水戸市生まれ。

横山大観がかつて学んだ小学校から、旧水戸城址にある中学、高校と進学。この頃から音楽を趣味とするようになる。大学は、学部→修士→博士の各課程に在籍し、某省傘下の研究所に就職、その2ヵ月後に学位を授与される(こういう経緯ですが最終学歴は博士課程「修了」です)。職場の隣の小学校で起こった惨劇は未だに心に深く傷を残している。

その後某自動車関連会社の研究法人で国の研究プロジェクトに参画、プロジェクト終了後は数年の彷徨を経て、某所で教育関連業務に従事。

New Entries

Comment

Categories

Archives(902)

Link

Search

Free

e-mail address:
e-mail address

Counter

11657745