はじめに
日頃からvimtexを使っているが、コードをレポートに記述する際listings
というパッケージよりminted
というパッケージの方が綺麗にコードが載せられそうだったので、使おうと思った時ハマったことについてかく。
インストールなどについてはこの記事が丁寧に書いてくれてるので省略します。
minted VS listings
minted
とlistings
の大きな違いは、minted
は外部ライブラリを用いてシンタックスハイライトをするのに比べ、listings
はtex内でハイライト作業を行う。
したがって、この2つのパッケージの差はこの違いによって生じる。
listingsはtex内でコンパイル・ハイライトを行うので簡単に行える上、ユーザ定義がしやすいというメリットがある。逆にいうと、ユーザが定義をしないとハイライトができないというデメリットがあるとも言える。
逆に、mintedはPygmentsというPythonのシンタックスハイライトライブラリを用いるので、ユーザが定義をせずとも綺麗にコードをハイライトしてくれる。
言語もほとんど対応しているのは嬉しい。
また、スタイルをいちいち記述する必要はなく、Pygmentsですでにある以下のスタイルを用いることができる。
['default', 'emacs', 'friendly', 'colorful', 'autumn', 'murphy', 'manni', 'monokai', 'perldoc', 'pastie', 'borland', 'trac', 'native', 'fruity', 'bw', 'vim', 'vs', 'tango', 'rrt', 'xcode', 'igor', 'paraiso-light', 'paraiso-dark', 'lovelace', 'algol', 'algol_nu', 'arduino', 'rainbow_dash', 'abap']
しかし、この外部のライブラリを読んでいるからこその問題が発生した。
問題
vimtex
にて、
\usepackage{minted}
とすると
error| Package minted Error: You must invoke LaTeX with -shell-escape flag
と怒られてしまった。要は、外のライブラリを読みたいんだけど読めないということだった。
texは-shell-escape
を許さない仕様になっているので、使えなかったっぽい... (セキュリティ的にも安全ではないので納得)
latexmkrc
を書けば良いという記事をいくつか見つけたが、それもうまくいかず(というかあまり気にくわない)、本家のレポジトリのissue
を見ていたらやはり多くの人がこの問題に突っかかっていた。
以下のように、vimtex_compiler_latexmk
のoption
に-shell-escape
を追加したところうまくいった:
let g:vimtex_compiler_latexmk = {
\ 'backend': 'nvim',
\ 'background' : 0,
\ 'build_dir' : '',
\ 'continuous' : 1,
\ 'options' : [
\ '-pdfdvi',
\ '-verbose',
\ '-file-line-error',
\ '-synctex=1',
\ '-shell-escape',
\ '-interaction=nonstopmode',
\ ],
\}
最後に
正直、-shell-escape
を常に許していると怖いので、使わないときはコメントアウトしようかと思う