何かを書き留める何か

数学や読んだ本について書く何かです。最近は社会人として生き残りの術を学ぶ日々です。

PythonTeXとSymPy

PythonTeXとSymPyの組み合わせを見てみる。なおSymPyの解説はありません。


SymPyとは簡単に言うとPythonで記号計算を行うためのパッケージである。Sage Mathでも使われている。
PythonTeXと組み合わせることによってSymPy出力結果をすぐLaTeXドキュメントに組み込むことができる。
今回はPythonTeXに同梱しているマニュアルであるpythontex_gallery.pdfから引用する(つまり手抜きである!!!)

\documentclass[a4j]{jsarticle}
\usepackage{amsmath}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage[dvipdfmx]{graphicx}

\usepackage[makestderr]{pythontex}
\restartpythontexsession{\thesection}

\usepackage[framemethod=TikZ]{mdframed}
\title{微分・積分 公式表}
\author{}
\date{\today}

\begin{document}
\maketitle
\begin{sympycode}

var('x')

# Create a list of functions to include in the table
funcs = ['sin(x)', 'cos(x)', 'tan(x)', 
         'sin(x)**2', 'cos(x)**2', 'tan(x)**2', 
         'asin(x)', 'acos(x)', 'atan(x)', 
         'sinh(x)', 'cosh(x)', 'tanh(x)']

print(r'\begin{align*}')

for func in funcs:
    # Put in some vertical space when switching to arc and hyperbolic funcs
    if func == 'asin(x)' or func == 'sinh(x)':
        print(r'&\\')
    myderiv = 'Derivative(' + func + ', x)'
    myint = 'Integral(' + func + ', x)'
    print(latex(eval(myderiv)) + '&=' +
            latex(eval(myderiv + '.doit()')) + r'\quad & \quad')
    print(latex(eval(myint)) + '&=' +
            latex(eval(myint+'.doit()')) + r'\\')
print(r'\end{align*}')
\end{sympycode}

\end{document}

あとはいつも通り

platex -kanji=utf8 tableofcalc.tex
pythontex tableofcalc.tex
platex -kanji=utf8 tableofcalc.tex
dvipdfmx tableofcalc.dvi

とすれば学部1年生で学ぶ微積分学の教科書にあるような公式表を得ることが出来る。

PythonTeXとMatplotlibの場合は、別にしてもよさそうな気がしないでもないが、この例はPythonとSymPyの面目躍如であると私は思う。