TeXShopでマジックコメント %! TEX program = LuaLaTeXが指定されている場合に-shell-escapeを有効にする方法


tl;dr

~/Library/TeXShop/Engines/LuaLaTeX.engineのシェルスクリプトのlualatex呼び出しに-shell-escapeを加えると良い。

概要

LaTeXにはいくつかの処理系がありますが(pdflatex、uplatex、lualatexなど)、たくさん文章を書いていると時期によって使う処理系が違ってくることがあります。
そんな時には、ソースファイルの先頭にマジックコメントを追加して、各ソースファイルに対して利用する処理系を指定してあげると、TeXShop系の対話的にソースファイルをタイプセットするエディタで上手くいくようになります。
具体的に、LuaLaTeXを指定したい場合は、以下のようなマジックコメントをソースファイルの先頭に追加します。

% !TEX program = LuaLaTeX

-shell-escapeが必要になる場合

多くのソースファイルは上の設定を行うだけで、LuaLaTeXでタイプセットできるようになりますが、使用しているパッケージによっては-shell-escapeが必要というエラーが出ることがあります。
-shell-escapeとは処理系に任意の外部コマンドの実行を許可するオプションで、デフォルトではセキュリティのためオフになっていますが、外部のコマンドを使った高度な処理を行いたく、タイプセットする文章が自分で書いたなどの理由で信頼できる場合はオンにしたくなる場合があります。
-shell-escapeを要求するパッケージとして、例えばPythonを利用して文章内ソースコードのシンタックスハイライトを行うmintedやgnuplotを利用して高度な計算を行うことができるpgfplotsなどが挙げられます。

mintedを利用しているのに-shell-escapeを指定していない場合は以下のようなエラーが出力されます。

! Package minted Error: You must invoke LaTeX with the -shell-escape flag.

pgfplotsでgnuplotを利用するコードを書いているのに-shell-escapeを指定していない場合は以下のようなエラーが出力されます。

! Package pgfplots Error: Sorry, the gnuplot-result file 'main.sin.table' could
 not be found. Maybe you need to enable the shell-escape feature? For pdflatex,
 this is '>> pdflatex -shell-escape'. You can also invoke '>> gnuplot <file>.gn
uplot' manually on the respective gnuplot file..

-shell-escapeの指定の方法

TeXShopの環境設定には以下に示すように内部設定というものがあり、ここでタイプセットに関わるコマンドの設定を行うことができます。

しかし、この設定はマジックコメントでLuaLaTeXを指定した場合は有効ではありません。
マジックコメントでLuaLaTeXを指定した場合は、~/Library/TeXShop/Engines/LuaLaTeX.engineというシェルスクリプトが呼び出されるようになっていて、環境設定で指定したコマンドは無視されます。
なので、このシェルスクリプトを編集して、lualatexコマンド呼び出し時に-shell-escapeが渡されるようにします。

~/Library/TeXShop/Engines/LuaLaTeX.engineはデフォルトでは以下のような内容となっています。

#!/bin/tcsh

set path= ($path /Library/TeX/texbin /usr/texbin /usr/local/bin)
lualatex -file-line-error -synctex=1 "$1

これを次のように編集します。編集内容としてはlualatexコマンドに追加で-shell-escapeオプションを渡しているだけです。

#!/bin/tcsh

set path= ($path /Library/TeX/texbin /usr/texbin /usr/local/bin)
lualatex -file-line-error -synctex=1 -shell-escape "$1

これで、mintedやgnuplotを利用しているpgfplotsを使っている場合でも正常にタイプセットできるようになります。

もし、セキュリティ上のへ不安がある場合には、~/Library/TeXShop/Engines/LuaLaTeX-shellescape.engineというファイルを新規作成して、ソースファイルには% !TEX program = LuaLaTeX-shellescapeを指定するようにすると良いでしょう。

結論

TeXShopでマジックコメントによる処理系の指定をしている場合は、~/Library/TeXShop/Engines/*.engine-shell-escapeを追加する必要があります。
これは、LuaLaTeX以外の処理系を指定している場合も同様なので、マジックコメントで処理系を指定したくて、-shell-escapeを指定したい場合は、同様の手順を試してみてください。

参考