Texpadでmintedパッケージを使ってpythonコードをsyntax highlightして挿入


環境

macOS Sierra
TeXLive 2017
Texpad 1.8.7
pLaTeX→dvipdfmx

mintedとは

texドキュメント中でいい感じにソースコードを表示してくれるパッケージです。
listingsパッケージよりお手軽にsyntax highlightが使えます。

使い方についてはOverleafの解説が丁寧です。
https://www.overleaf.com/learn/latex/Code_Highlighting_with_minted

インストール

まずは何はともあれmintedを入れます。
https://ctan.org/pkg/minted からzipを落として解答、そのディレクトリでmakeすると
minted.styが出てくるので、texmfとかスタイルファイル置き場に入れます。
僕はとりあえずソースと同じディレクトリに置いときました。

これに加えてpythonのpygmentizeパッケージも必要ですが、Anacondaでpythonを導入した場合は最初から入ってるはず。
必要に応じてインストールしてください

shell escapeを許可する

texpadの画面左上の設定ボタン(Tweak typeset setting..)からタイプセット設定画面を開き、
Generalの下の方にあるEnable--shell-escapeにチェックを入れる。

pymintedシンボリックリンクを貼る

このままだとtexpadがpygmentizeを見つけられないので、
texと同じディレクトリにpygmentizeのシンボリックリンクを置く。
まずターミナルからwhich pygmentize でpygmentizeの場所を調べましょう。
場所がわかったらシンボリックリンクを張ります。僕の場合は
sudo ln -s /Users/resnant/anaconda/bin/pygmentize /Library/TeX/texbin

「中間ファイルを隠す」をオンにしてる場合はプリアンブルに次を追記

これを忘れて、エラーは出ないけどドキュメントの該当部分に何も表示されずしばらくハマりました。
\usepackage[outputdir=.texpadtmp]{minted}

キャッシュを無効にする

Package minted Error: Missing Pygments output; \inputminted was~

とか怒られた場合は、プリアンブルでcache=falseオプションを追記します
\usepackage[cache=false]{minted}
あるいは中間ファイルを隠してる場合は
\usepackage[cache=false, outputdir=.texpadtmp]{minted}

おしまい

お疲れ様でした。楽しい$\TeX$ライフを!

最後に例も示しておきます。

text.tex
\documentclass{jsarticle}
\usepackage[cache=false, outputdir=.texpadtmp]{minted}

\begin{document}
\begin{minted}{python}
import numpy as np
print('hello world')
def dummyfunc():
    pass
\end{minted}
\end{document}

出力例↓

ちなみに、プリアンブルで\usemintedstyle{monokai}とかやればカラースキームも変えられます。
黒背景のほうが見やすい場合もあると思うので、その時はminted環境を宣言する時にbgcolorオプションを付けます。
\begin{minted}[bgcolor=Black]{python}

詳しくはoverleafの解説をどうぞ
https://www.overleaf.com/learn/latex/Code_Highlighting_with_minted
https://www.overleaf.com/learn/latex/Using_colours_in_LaTeX

困っている点

僕の環境ではなぜかpythonコード中のtabが^^Iと出力されてしまいますが、原因がよくわかってないので今のところ未解決です。。

参考

https://qiita.com/la_float/items/2884a4d80a54ffa89a34
http://muscle-keisuke.hatenablog.com/entry/2015/11/06/182214