Windows上でTeX環境を構築すること

Windows上でTeX環境をどれにするか。迷ったのでいくつか選択肢を紹介します。基本的にTeXwikiの情報と、それ以外に自分で検索した内容が主です。

W32TeX

TeXインストーラ3」というものがあるようで、それを用いれば比較的簡単にインストールできます。
こつなんですが、インストーラ中のダウンロードサーバー選択は、デフォルトではなく適当なものを選択するといいそうです。
これによるインストールは一度経験しました。
Windows 7 Businessでしたが、プラグインあたりのインストールが毎度「失敗」と表記され、原因が分からず、どうにもできませんでした。動くことは動いています。TeXだけかと思いきや、関連ソフトのインストールが多い印象です。スタートメニュー項目が少し増えてしまいます。構いませんが。

TeXlive

インストールは、アーカイブをダウンロードして、それを展開、バッチファイルの起動にて行います。wikiにインストール方法が詳しく書かれています。
私の環境(Win7 Home)では、Perlが動作しなかった(プログラムは動作を停止しました)ので、ActivePerlを入れることで対処しました。個人的にPerlはたまに利用していたのでActivePerlのインストールに抵抗はなかったのですが、そのあたりは人によりけりでしょう。
私は訳あってCUIでインストールしました。結構かかります。2時間以上かかりました。

cygwin + TeXlive

自分ではこれを試していませんので、調べたことと私自身の期待についての内容になります。
cygwinは、Windows上でUNIXライクの環境を構築します。ここに、TeXliveを乗せるのです。
cygwinレジストリに依存しない(ポータブル化可能)という記事を目にしましたので、そのあたりに主に注目しています。具体的には、ポータブルなUNIXライク環境+TeX環境が構築できるのではないか、ということです。
しかし、cygwinの容量が大きいことが問題です。あとはUNIXコマンド慣れしていないと使うのは厳しいというあたりでしょうか。
使ったことないので、何とも言えません。

仮想PC + TeXlive

私が初めてまともにTeXを利用したのがこれ。
VMWareでUbuntu12.04を動かし、そこでTeXliveをインストールしました。wikiにインストールについては書かれています。
特徴としては、Linuxと一緒に使えることでしょうか?
余談ですが、Windows上でTeXliveをインストールするよりも速くインストールが完了しました。不思議です。

ダミーパッケージの問題

TeXliveは、dpkgの管理とは別にインストールします。よって、競合に関する問題があります。
これは、ダミーパッケージの作成で回避します。wikiを参照してください。


統合環境

コマンド慣れしていない人は、TeX統合環境を利用してください。
いろいろあります。wikiに載ってます。調べてみてください。
ただし、私はあまりおすすめしません。エラーメッセージときちんと向き合えないからです。

まずはエディタで書き、コマンドでコンパイルし、はかれたエラーを一つずつ潰していくことをおすすめします。

ポインタ式の記述について考える

C言語。構文が簡素で、記述しやすい言語ですね。よく学習用に用いられています。
とはいえ、不可解な表記がないわけではありません。特に、私が疑問に思ったのは、間接参照演算子「*」です。

間接参照演算子

「*」は、間接参照演算子、といいます。乗算も同じ記号を用いますが、乗算は二項を演算するのに対し、こちらは単項です。両側に作用するか、片側に作用するかの違いですね。
めんどくさいので、この記事では「*」を「ポインタ(演算子)」と表記します。

不可解なポインタ演算記法

さて、ポインタ演算子をどのように記述するよう教わったでしょうか。私は以下のように教わりました。

int i;
int *p;

はい。ざっくりポイントをまとめます。

  • ポインタは変数の前につける。
  • pの型は「int *」型(実際にそう呼ぶかどうかではなく「ポインタ」型であると言いたいのです)。

こうでした。

私はこのとき、大きな矛盾を感じたのです。

  • 型と変数名をきっちり分けて書くのが、C言語として綺麗な書き方ではないのか。
  • ポインタのキャストにも同様にするが、汚いのではないか。
    • 仮に、キャストだけスペースしなかったら、統一的な書き方ではなくなる。
    • 逆に、キャストのスペースは汚い。

いろいろありますが、主にこの辺。ポインタ変数を複数定義するときに、それぞれに「*」をつけなければいけない実装も文句ありました。

気持ち悪さを少しだけ解消する

今日突然、思い出したように気がついたのです。何故このように書くのかを。
さて、以下は私の主なスペーシングです。それほど不可解ではないと思います。

for (i = 0; i < n; i++) {
    s += p[i]->n / 2;
}

ここで、突然ですが、演算子の結合規則を考えます。

  • 後置増分は左結合です。
  • 代入文は右結合です。
  • 算術式は左結合です。
  • 添え字は左結合です。
  • 比較は左結合です。
  • アローは左結合です。

では、これらを無駄に強調したスペーシングで書いてみます。

for ( i =0 ; i< n; i++ ) {
    s +=(p[i])-> n/ 2;
}

大分変わりましたね。スペースって大事ですね。
ところで、代入文や算術式、比較式は、Cでは両辺を対等に考えるのが普通ですので、そのあたりのスペースを両辺対等におきます。更に、アロー演算子は間接参照と構造体メンバ変数参照を兼ねたような役割であり、構造体参照のポインタ版のように使うのでしたら、(変数名->メンバ名)は一括りとして扱いますので、両辺スペースを消します。
するとどうでしょうか。ほとんど元に戻るのではないでしょうか。

ポインタに関して

ポインタは単項演算子です。右辺がー左辺がーとか、ありません。
では、素直に結合規則を強調した書き方をすると、やはり冒頭で紹介した形になるわけです。
そこで、変数定義の見方を変えます。

int n, *p, **pp, *q;

これ、やっぱりみんなに「*」をつけるのは、今までの解説だとちょっと不可解です。
そこで、こう見ます。

  • 一文は、int型の定義。
  • 「n」は、int型の変数。
  • 「*p」は、int型の変数。
    • よって、「p」はint型へのポインタ。
  • 「*pp」は、int型の変数。
    • よって、「*pp」は、int型へのポインタ。
      • よって、「pp」は、int型へのポインタのポインタ。
  • 「*q」は、int型の変数。
    • よって、「q」はint型へのポインタ。

トップレベルの項目だけを眺めてみてください。こうすれば不思議さが減少するのではないでしょうか。
最初からこのように教えろ、と思わなくもないのですが、やはり無理でしょう。
だってこれ、すごく回りくどいんですもの。ポインタ型(派生的な型)で、普通困らないじゃないですか。だから、仕組みを理解したあとに説明されてもいいんじゃないですかね。
少なくとも私は、説明が欲しかったですね。

キャスト(保留)

キャスト演算、あれはどうしましょうか。
括弧の位置的には、前述の見方はできませんね。

Cygwin導入検討

今日はこれぐらいしかかけることがないので。


Cygwin。「良さ」の評判はいい。「悪さ」の評判が悪い。
すごく微妙なんだよね。導入するのにHDD食い過ぎるのがちょっといただけない。
それさえなければ、いいLinux環境になりそうなんだけれども。

Portableできるようになってるのはいいね。でもね、容量食い過ぎてあんまり現実的じゃないよ。
ターミナルがMinttyなのはそこそこいいと思う。

結果、導入は諦めました。容量さえ問題なければ、texliveとvim乗っけて持ち歩こうかと思ってた。

代替環境

現在、二つ候補があります。どちらもvimを持ち歩いてtexはパソコンに入っているものを使う想定。

Console2でcmdをフィルタする

vimのカラースキームが使えます。windowsのコマンドがパスを(手動で)通さずに使えます。ターミナルフォントがインストール済みのものしか使用できません。基本は本当にフィルタです。

Mintty (on gnupack)

ターミナルの善し悪しはConsole2と一長一短でどっこいどっこい。gnupackならls等が使えます。
フォントを非インストールで持ち歩けるのも利点。cygwinの一部分だけを使える感じでなかなか。
ただ、いくつか問題がある。一番大きいのはパスの問題で、windowsコマンド使うには手動で通す必要がある。文字コードも決め打ちするので、搭載されているコマンドとwinコマンドで異なる文字コードをどう扱うかが問題。

共通の問題

USBメモリ上のアプリケーションにパスを通すとき。バッチファイルやシェルスクリプトは苦手で、そういうの書けないんです。

texliveほか

texlive

解決しました。ドキュメントをちゃんと読んでいないというのが結論。
wikiにあるけど、必要のないパッケージがあとでインストールされないように、ダミーパッケージを作る必要があったらしい。これやってなかったのね。
これで、いいTeX環境が出来上がりました。しばらくは仮想Ubuntuが頑張ってくれます。
たぶんNUC手に入ったら、それに入れるんだろうなぁ。まぁいいかそれは。

文芸スクリプト

とりあえず一段落。ほとんど全てを出力できました。
やっていないと言えば奥付、あとはとびらと目次の三題噺対応とか、そのへんですかね。これ部活に置いて置いたら誰かメンテナンスできるんですかね。わかりませんね。

TeXmaker

統合環境って便利だね。補完がそれ専用になっていて、そういうのはちょっと適わないなぁ。
でもあれだね、ついEscとか:wとか押しちゃう癖を何とかしないとね。Vim使い過ぎかも。

Vim

マジでメインにしちゃいそう。Emacsやってないんだけど大丈夫ですかね。まぁいいか。
両方やっておきたい気持ちはあるよ。気持ちは。

ブログを書くこと

たぶん性格的に向いてないんだろうなぁ。何書いたらいいか分からないし。
そんなもんかな。とりあえず毎日のタスクとして登録したから、頑張ってこなしていこう。

商品とTeXliveのはなし

Amazon注文商品

届きました。

梱包

箱にビニールのアレ巻いた台紙付きの、いつものパターンだったんだけど、
アレで本を押さえるのはよくないと思うの。表紙の薄い紙が少しでもずれてると折り目付いちゃうよ。

メモリ

問題なしです。メモリテストは一週しかしてないけど。

microUSBケーブル

Amazonロゴのやつ。太め。ジャック部分も大きめだからものによっては干渉しそう?
今のところ問題なし。普通の充電ケーブルです。
包装がすごく簡易。レビュー通り。

モバブ

ポータブル充電器と言うべきか。何故この略称なのかよく分からない。
充電は普通にできました。10000mA容量で、Nexus7に0%から充電したところ、4ゲージ→2ゲージに。
初期状態のまま使ったからフルじゃなかったのだろう。充電時間は4時間ほどでした。まずまず。

USB給電コネクタ

あの家庭用電源をUSBに変換するやつ。
モバブを少し充電してみたけど、若干の放熱。あとなんか妙に大きい。割に軽い。
2ポートあるから仕方ないかな。

ラクダ本

Perlのアレ。一番上になってて泣きたい。問題なさそう。

その他本

ラクダ本より下にあったので問題なし。

Ubuntu12.04 & TeXlive

昨日の記事に書いたとおり、新しい仮想環境で再現した。仕方ないのでそのまま日本語フォーラムに質問した。
関連がありそうな記事はあったんだけど、それ見ても解決しなかった。スキル不足かもね。

おまけ:Androidアプリ・ストア巡り

ホームアプリやらその辺のデザインカスタマイズやら、ゲームやら見てた。
ちょっと見ない間に結構変わったねぇ。いろいろ新しいのがあったよ。