0

tex1次のように、バッチスクリプト内からMaximaを呼び出しました。

maxima --very-quiet -r "tex1(solve(8*x^2+7*x+5));" | grep -v false > output.txt

そして私はoutput.txt次のようになりました:

 \left[ x=-{{\sqrt{111}\,i+7}\over{16}} , x={{\sqrt{111}\,i-7}\over{16}} \righ\
t] 

これは(La)TeX入力ファイルとしては無効です。

Maximatex1が出力をラップしないようにするにはどうすればよいですか?

4

2 に答える 2

2

返事が遅れて申し訳ありません。

それ以外の

tex1(解決(8*x^2+7*x+5));

書きます:

?princ(tex1(solve(8*x^2+7*x+5))$

問題は、tex1 によって返される文字列がディスプレイ フォーマッタ (対話セッションで Maxima を使用している場合に文字列を出力するのと同じ関数) によって出力されることです。ディスプレイ フォーマッタは、行文字 (デフォルト = 79) で文字列を分割し、バックスラッシュを挿入します。代わりに、表示フォーマッタを完全に回避したいので、?princ (文字列を出力するだけの Lisp 関数) で文字列を出力し、入力を ";" の代わりに "$" で終了します。Maximaにディスプレイフォーマッターを呼び出さないように指示します。

MYPRINC でハードコードされた定数 70 は、ここでは機能しないことに注意してください。この例では、MYPRINC は呼び出されません。

于 2011-09-11T23:51:19.303 に答える
1

残念ながら、これはMaximaにハードコードされています。この問題を解決する方法は、ファイルにある関数 myprinc を編集することですmaxima/src/mactex.lisp。そこcondに 70. と書かれているフォームがありますが、70 ではなく linel と読むべきです。この変更を行った後に maxima を再コンパイルすると、次のように動作します:

maxima --very-quiet -r "linel: 1000$ tex1(solve(8*x^2+7*x+5));" | grep -v false > output.txt

とにかく、プログラムの将来のバージョンがこの欠点を持たないように、できるだけ早く Maxima リストにパッチを送ります。

于 2011-06-11T14:47:38.647 に答える