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
を指定したい場合は、同様の手順を試してみてください。