perl との連携

数値計算を,perl に外注し,その結果を受け取ります。
 

定義されているスタイルファイル

emathPl.sty など

解説

趣旨

  • tex は数値計算ソフトではありません。
    128.0×128.0 でオーバーフローします。
    また,計算精度もあまりよくありません。
  • そこで,emath パッケージでは,計算を perl に外注し,
    その結果を補助ファイルを通じて取得する方法も用意しています。

連携の準備

  1. perl のインストール
    Unix, Mac では標準でインストールされていますから,この項はスキップです。次の 2. に進みます。
    Windows の場合は
        http://www.activestate.com/activeperl/downloads
    からインストールします。
  2. perl の動作確認をします。
    コマンドプロンプトで(MAC ではターミナル),キーボードから
      perl -v
    と打ち込み,エンターキーを押します。
    (コマンドプロンプトの操作に不慣れの方は「コマンドプロンプトのページ」をご覧ください。)
    反応は次の2つのケースがあります。
    1. 画面に
        This is perl 5, version 16, subversion.....
      とバージョンが表示されれば,perl はインストールされました。
    2. 不幸にして
        'perl' は、内部コマンドまたは外部コマンド、
        操作可能なプログラムまたはバッチ ファイルとして認識されていません。
      と表示された場合は,環境変数 PATH を設定する必要があります。
      ( perl を c:\perl にインストールした場合は,環境変数 PATH に
         c:\perl\bin
       を追加します)
      PATH の設定は,OS(あるいはそのバージョン)によって異なります。
      それぞれの OS の解説書,あるいは web の解説ページでお調べください。
  3. emath のライブラリファイルの配置
    emath では,perl のライブラリファイル emath.pl などを用いますから,
    当サイトの目次から
      emath に必要なスタイルファイルなど
        2. perl と連携するための補助ファイル emath.pl など
    からダウンロードした emathpl??.zip を解凍して得られる
      emath.pl, degsine.pl, nCr.pl
    などをしかるべき場所に配置します。
    しかるべき場所とは,環境により異なりますので,次のようにして調べます。
    コマンドプロンプト(ターミナル)で
      perl -V
       (-V の 'V' は大文字です)
    を実行したとき,一番最後の方に登場するメッセージ
      @INC:
    の次の行から,perl のライブラリファイルを配置し得る場所が列記されます。
    そのうちのどこかに emath.pl などを置きます。
    〈注〉emath.pl などを更新する際は,旧ファイルに上書きコピーします。
     旧ファイルが残っていて思わぬトラブルになる事例がBBS #9834からのスレッドにあります。
  • texlive でインストールし,texworks を使用する場合は,さらに操作が必要となる場合があります。
    TeXWorks で perl との連携をご覧ください。

サンプルリスト

  • 次のサンプルリストは,2 の平方根を perl に計算させて,その結果を \foo という制御綴に取得します。
    以下,このサンプルリストを rootii.tex と名付けます。
    \documentclass{jarticle}
    \usepackage{emath}
    \usepackage{emathPp}
    \begin{document}
    \calcval[s]{sqrt(2)}\foo
    \foo
    \end{document}
  • コマンド \calcval については,その解説ページをご覧ください。

実行の前に

上のサンプルリスト 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 の危険性はなくなりません。
    自分が作ったものなど,信頼できるソースリストにのみ適用しましょう。
17406

添付ファイル: filerootii.tex 1304件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-11-27 (木) 19:49:04 (1242d)