&size(24){''\calcval''}; 計算を perl に外注し,結果を受け取ります。 #contents #br *定義されているスタイルファイル [#k5930020] emathPl.sty *書式 [#b11c6f2b] \calcval[#1]#2#3 -[[#1>#format]]: perl の printf の書式指定~ デフォルトは [f] すなわち固定小数点形式の浮動小数点数 -#2: perl の計算式~ perl の文法で記述します。 TeX の制御綴りは展開されて perl に引き渡されます。 -#3: 結果を受け取る制御綴 *例 [#wc876ac3] **基本例 [#l32076c0] perl を起動して計算をさせ,結果を受け取ります。 計算式の部分は,そのまま perl に引き渡されますから, perl の文法に従って記述します。 #ref(calcval1.png) **式に制御綴を含む場合 [#s0a8f97d] TeX の制御綴は展開されて perl に渡されますが,~ 負の数の場合,注意が必要です。~ 下の場合,エラーとなります。 #ref(error01.png) \aval-\bval は,展開されて 1--2 となって,perl に引き渡されますが, perl の文法エラーを惹起します。 perl はエラーメッセージを出力しますが,TeX の統合環境の多くはこのエラーを無視します。 正しい perl の式を作るには \bval を (...) で括ってやります。 すなわち \aval-(\bval) とすれば,perl に引き渡される式は 1-(-2) となり, 正しい結果が返ります。 #ref(error02.png) -上の例で,\aval も括弧で括って~ \calcval{(\aval)-(\bval)}~ としてもよいわけで,~ perl に渡す制御綴は (....) で括れ~ が安全策です。 **書式指定 [#format] デフォルトでは,perl の printf の書式指定が %f となっていますが, これを変更するオプションが [...] です。 ... の部分は,perl の printf の書式指定の先頭 `%' を除去したものを与えます。 次の例は [.4f] として,小数点以下4桁を指定しています。 なお,この機能を利用して四捨五入をするのは危険です。 下の注意事項をご覧ください。 #ref(calcval2.png) 戻り値として整数を指定するには,[d] をオプションに指定します。 なお,整数の桁数が多いときに,3桁ごとにコンマを入れるには emathKs.sty で定義されている \ketakugiri を用います。 #ref(calcval3.png) -perl の関数 printf の書式指定については,perl の解説書をご覧ください。~ 例えば,「初めてのPerl」の場合~ 6.3.2 printf を使用した書式指定出力~ のところに解説があります。 *注意事項 [#note] +このコマンドは,perl との連携機能を必要とします。~ したがって,platex を起動するさい~ platex -shell-escape hoge.tex~ などど,起動オプション~ -shell-escape~ を付加しなければなりません。~ 詳しくは[[perlとの連携]]ページをご覧ください。~ (以前は,起動オプションを -sh と省略形で済ますことが出来ましたが,~ 最近の platex では,省略形は許されなくなっています。) +数値計算をするのが前提です。文字列計算などに用いることはできません。~ 文字列計算・複雑な計算には[[\CalcVal>CalcVal]]を利用します。 +四捨五入をするのに書式指定を用いるのは危険です。 #ref(round.png) --emathパッケージには,[[\EMround>EMround]] を用意しています。 --四捨五入をするには,FPパッケージの利用もあるでしょう。 #ref(fp-snap.png) *関連事項 [#af900d5b] +perl の関数 printf の書式指定については,perl の解説書をご覧ください。~ 例えば,「初めてのPerl」の場合~ 6.3.2 printf を使用した書式指定出力~ のところに解説があります。 +perl との連携機能を用いると~ 作業用ファイル~ が作成されます。それが煩わしい場合は,それらをサブディレクトリに収納することが出来ます。~ [[\EMworkfiledir コマンド>EMworkfiledir]]~ のページをご覧ください。 +[[\CalcVal>CalcVal]] +[[EMcallperl環境]] +[[数値計算]] --[[実数計算(有限小数)>数値計算#zissuu]] RIGHT:&counter;