スタイルファイルの形式で既製のメソッドがあり、次のように使用されます。
\ usepackage {python} \ begin {python} 数学インポート罪から a = sin(5) c =罪(9) b =最大(a、c) プリントb \ end {python}
実際、このパッケージはjobname.pyを作成し、出力をjobname.py.out、jobname.py.errに書き込み、読み取ります。
この方法は、変数がコードからコードに保存されないため、ピクルを使用する必要があり、すべてを再度インポートする必要があるなどの点で悪く、すべての計算を別のファイルの1か所に置くのが便利なようですだから私はlunaparkを構築しました...
すべてが非常に簡単です。 次をプリアンブルに追加します。
\ newcommand {\ python} [1] {% \ immediate \ write18 {python#1> ./py.out 2> ./py.err} \即時\入力 "py.out"} \ newcommand {\ ptn} [1] {% \ python {./ path_to_your_scripts / script_name.py#1}} \ newcommand {\ peval} [1] {% \ python {-c "print#1" | ./path_to_your_scripts/sedder}} \ newcommand {\ comments} [1] {}
最初のマクロは指定した引数でpythonを呼び出し、2番目は引数付きで特定のスクリプトを実行し、3番目は単一行のPythonコードを実行できます。その後、小さなsedで事前に変換され、ドットがコンマに置き換えられます。 最後のマクロは、問題がPython出力とLatexのエラーのどこにあるかが明確になると付け加えました
スクリプトでは、素敵な結論を出すためのちょっとしたコツがあります(数学的な環境の場合のみですが)。グレーも共有できます(当然、sedは、ある場合にのみ機能します)。
セダー:
#!/ bin / sh sed -e 's /\./,/' #実行可能にします。
ファイルの終わり "./path_to_your_scripts/script_name.py":
インポートシステム 再インポートサブから __future__インポート部門から def toStr(num、digitsAfter = 2): "" "Num to string with zero stripping" "" frmt = '%。' + str(digitsAfter)+ 'f' num =(frmt%num) num = num.strip( '0') num [0] == '。'の場合: num = '0' + num num [-1] == '。'の場合: num = num.strip( '。') numを返す def tenpower(数値、最大値= 1e3、最小値= 1e-2、ベース= 1): "" "numを(num1、num2)に変換します。num1* 10 ** num2 = num 最小<num <最大でない場合に変換します。 base <num1 <2 * base "" "まで変換します pwr = 0 一方、abs(num)> maximumまたは(abs(num)> 2 * base and pwr> 0): pwr + = 1 num = num / 10 一方、abs(num)<最小または(abs(num)<base and pwr <0): pwr-= 1 num = num * 10 num、pwrを返します def latexize(num、power = False、delim = '、'): 電源の場合: return( '%s \\ cdot 10 ^ {%d}'%(num、power))。replace( '。'、delim) その他: return str(num).replace( '。'、delim) __name__ == "__main__"の場合: #try: argc = len(sys.argv) var = 'Ooopsy-doopsy!' digitsAfter = 2 typ = 10 argc> 1:の場合 var = sub( '[{} \。]'、 ''、sys.argv [1]) comment = '\\コメント{%s}'%sys.argv [1] var = globals()[var] その他: ValueErrorを発生させます argc> 2:の場合 試してください: digitsAfter = int(sys.argv [2]) を除く: typ = sys.argv [2] argc> 3:の場合 typ = sys.argv [2] digitsAfter = int(sys.argv [3]) mini = 1/10 ** digitsAfter typ in( 'int'、 'i')の場合: 印刷コメント、int(var) ['float'、 'f'、 'nomath']のエリフtyp: コメントを出力+ latex(toStr(var、digitsAfter)) その他: 文字列= tenpower(var、minimum = mini) コメントを出力+ latexize(toStr(strings [0]、digitsAfter)、string [1]) #except例外: #合格
つまり、LaTeXで「\ ptn {varAn1}」と入力すると、変数「varAn1」の値は、「./ path_to_your_scripts / script_name.py」で定義されている場合、最終ドキュメントに置き換えられます。 そして、「\ peval {1./5}」と書くと、0.2になります。 私はこの\ pevalを使用しなかったので、それを終了せず、お粗末に動作します
PSあなたはオプション "-shell-escape"でそのようなLaTeXファイルを処理する必要があります