perl との連携
数値計算を,perl に外注し,その結果を受け取ります。
定義されているスタイルファイル †
emathPl.sty など
解説 †
趣旨 †
- tex は数値計算ソフトではありません。
128.0×128.0 でオーバーフローします。
また,計算精度もあまりよくありません。
- そこで,emath パッケージでは,計算を perl に外注し,
その結果を補助ファイルを通じて取得する方法も用意しています。
連携の準備 †
- perl のインストール
Unix, Mac では標準でインストールされていますから,この項はスキップです。次の 2. に進みます。
Windows の場合は
http://www.activestate.com/activeperl/downloads
からインストールします。
- perl の動作確認をします。
コマンドプロンプトで(MAC ではターミナル),キーボードから
perl -v
と打ち込み,エンターキーを押します。
(コマンドプロンプトの操作に不慣れの方は「コマンドプロンプトのページ」をご覧ください。)
反応は次の2つのケースがあります。
- 画面に
This is perl 5, version 16, subversion.....
とバージョンが表示されれば,perl はインストールされました。
- 不幸にして
'perl' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
と表示された場合は,環境変数 PATH を設定する必要があります。
( perl を c:\perl にインストールした場合は,環境変数 PATH に
c:\perl\bin
を追加します)
PATH の設定は,OS(あるいはそのバージョン)によって異なります。
それぞれの OS の解説書,あるいは web の解説ページでお調べください。
- emath のライブラリファイルの配置
emath では,perl のライブラリファイル emath.pl などを用いますから,
修正パックに含まれる最新の
emath.pl, degsine.pl, nCr.pl
などをしかるべき場所に配置します。
しかるべき場所とは,環境により異なりますので,次のようにして調べます。
コマンドプロンプト(ターミナル)で
perl -V
を実行したとき,一番最後の方に登場するメッセージ
@INC:
の次の行から,perl のライブラリファイルを配置し得る場所が列記されます。
そのうちのどこかに emath.pl などを置きます。
〈注〉emath.pl などを更新する際は,旧ファイルに上書きコピーします。
旧ファイルが残っていて思わぬトラブルになる事例がBBS #9834からのスレッドにあります。
サンプルリスト †
実行の前に †
上のサンプルリスト rootii.tex は,普通にタイプセットしたのではエラーになります。
perl との連携を実現するには,emath から tex のコマンド
\write18{......}
を呼び出しますが,このコマンドは危険なコマンドであるため,デフォルトでは使用禁止となっています。
これを使用可能とする方法はありますが,\write18 の危険性は失われません。
\write18 を使用するのは,自分の作ったソースリストなどに限定して用いないといけません。
実行時オプション -shell-escape †
\write18 の使用を認めるオプションが -shell-escape です。
すなわち,コマンドプロンプトで,
カレントディレクトリを rootii.tex が存在するディレクトリ
とした上で
platex -shell-escape rootii.tex
を実行します。
エラーなく実行できたら,引き続きコマンドプロンプトで
dvipdfm rootii.dvi~
を実行します。rootii.tex と同じディレクトリに rootii.pdf が作成されるはずです。
それを PDF-viewer で開くと,2 の平方根の近似値
1.4142135623731
が画面に表示されます。
- tex環境によっては,
platex -kanji=utf8 -shell-escape rootii.tex
と,漢字コードも指定しなければならないこともあります。
kanji=... の右辺値は euc|jis|sjis|utf8 のいずれかで,使用している tex 環境に合わせます。
- もしエラーが起きるなら,上の
連携の準備
の3つの項を見直しましょう。見直しても解決しない,という場合は掲示板で質問します。
- (注1) 古い platex では,オプション -shell-escape の省略形として
-sh
も有効でしたが,近年の platex では(-shell-restricted オプションが新設され) -sh とした場合
-shell-escape
-shell-restricted
のいずれの省略形であるかが判断できませんから,platex は
platex: option `-sh' is ambiguous
という警告を出力します。ただし,これはログファイルには記録されません。
(この場合,\write18 は無効で,perl との連携は出来ません。)
省略形を用いるなら,少なくとも
-shell-e
までは書かないといけません。
- (注2) platex コマンドのオプションは
-shell-escape
です。
-shell -escape
と,-shell, -escape の間に空白を入れてはいけません。
前者の場合,platex には一つのオプション -shell-escape を与えたことになりますが,
後者の場合,platex には二つのオプション
-shell
-escape
が与えられたことになり,platex は
platex: option `-shell' is ambiguous
platex: unrecognized option `-escape'
を出力します(ログファイルには記録されません)。
- (注3) 歴史的(?)変遷
LaTeX2e のはじめの頃は,\write18 はデフォルトで使用可能となっていました。
すなわち,-shell-escape オプションは不要であった時代があります。
その後,\write18 の危険性が問題となり,デフォルトでは \write18 が使用禁止となりました。
すなわち,-shell-escape オプション(省略形:-sh)を付加しなければ \write18 は使えなくなりました。
ところが「それでは不便だ」ということでしょうか,
「限定付きで使えるようにしよう」
ということで,-shell-restricted オプションが新設され,これがデフォルトとなりました。
- (注4)MAC で
nkf: command not found
というエラーが出た場合は,奥村先生のページ
http://oku.edu.mie-u.ac.jp/~okumura/bibun5/
の「付録ソフトのサポート」
をご覧ください。
関連事項 †
注意事項 †
- shell-escape, shell-restricted いずれを用いるにせよ,程度の差こそあれ,\write18 の危険性はなくなりません。
自分が作ったものなど,信頼できるソースリストにのみ適用しましょう。
19909