Perl
LaTeX
Mac
VSCode
Mojave

[LaTeX] [Mojave] Mac で latexindent が上手く動作しないときの対処法

はじめに

Mac (Mojave) 上の VSCode で LaTeX の環境を整えているとき,Format Document が上手く動作しなかったので原因を調べてみました.

以前に書いたこちらの記事にしたがってインストールした場合を前提としています.
[Mojave] MacTex 2018 + VS Code で LaTeX の環境を構築する - Qiita

.tex ファイル上で右クリックすると Format Document を選択できるのですが,エラーになってしまいます.
スクリーンショット 2019-01-05 18.43.54.png

ログ

VSCode 上でログ出力を見ると,perl のモジュールが足りないような記述がありました.
調べてみると,この自動インデント機能は latexindent が担っているらしく,latexindent は多くの perl モジュールに依存しているようです.
ログでも Log::Log4perl が足りないよ,と言っていますね.

[18:20:25] Formatting failed with exit code 2
[18:20:25] stderr: Can't locate Log/Log4perl.pm in @INC (you may need to install the Log::Log4perl module) (@INC contains: /usr/local/texlive/2018/texmf-dist/scripts/latexindent /usr/local/Cellar/perl/5.28.1/lib/perl5/site_perl/5.28.1/darwin-thread-multi-2level /usr/local/Cellar/perl/5.28.1/lib/perl5/site_perl/5.28.1 /usr/local/Cellar/perl/5.28.1/lib/perl5/5.28.1/darwin-thread-multi-2level /usr/local/Cellar/perl/5.28.1/lib/perl5/5.28.1 /usr/local/lib/perl5/site_perl/5.28.1/darwin-thread-multi-2level /usr/local/lib/perl5/site_perl/5.28.1) at /usr/local/texlive/2018/texmf-dist/scripts/latexindent/LatexIndent/LogFile.pm line 22.

cpan コマンドで該当するモジュールをインストールし Format Document を実行.
エラー内容が変わるたびに指定されたモジュールをインストールするというのを繰り返してみましたが,途中でコケてしまいました.
File::HomeDir が依存する Mac::SystemDirectory に問題があり,インストールが進みません.

別のプロジェクトではありますが,Mojave 固有の問題として issue が立っているようでした.
Failed to install on OSX Mojave Mac::SystemDirectory is not installed. · Issue #39 · sqitchers/homebrew-sqitch

この issue によると brew で入れた perl であれば問題なくインストール可能ということでした.
試してみると案外簡単に解決できたので,次節で実際に入力したコマンドを載せておきます.

コマンド

cpan より cpanm の方が便利そうだったので,ついでに入れておきました.
基本的な作業としては,Format Document を実行した際のエラーメッセージで怒られる度に,指定されたモジュールをインストールするだけです.
もちろん,わざわざ VSCode 上で試さなくてもコマンドラインでデバックできると思います.

$ brew install perl
$ brew install cpanm
$ cpanm Log::Log4perl Log::Dispatch::File YAML::Tiny File::HomeDir Unicode::GCString

おわりに

実際に入力したコマンド自体は少ないですが,原因の調査に時間がかかりました.

普段はあまり perl を使うことがないので,モジュールについての認識が間違っているかもしれません.
何かあればコメントお願いします.

参考