18
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

[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 を使うことがないので,モジュールについての認識が間違っているかもしれません.
何かあればコメントお願いします.

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
18
Help us understand the problem. What are the problem?