0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【NeoVim】LaTeX 環境構築

Last updated at Posted at 2025-08-29

はじめに

これまでLaTeXを用いた文書作成ではOverleafを利用しておりましたが、UIに関して次のように個人的に不便に感じる点がありました。

  • 複数のファイルを切り替えるためのタブ機能がない
  • ファイル間移動が弱い
  • プロジェクト全体の検索機能が弱い
  • ファイルやフォルダの作成にショートカットキーが割り当てられていない
  • GitHubとの連携が有償プランでしか利用できない
  • Vim キーバインドがあるけれども物足りない
  • AI機能が...

この記事では、これらの点を解消し、より快適な執筆環境を求めて、Windows 環境の WSL (Windows Subsystem for Linux) 上に構築した NeoVim (AstroNvim) で、LaTeX の開発環境をセットアップする手順について解説します。
LuaLaTeX を利用して、日本語を含む文書のコンパイルとプレビューができるようになることを目指します。

対象読者

  • Windows + WSL 環境でLaTeXを利用している方
  • もちろん Vimmer の方
  • Overleaf やその他クラウドサービスのUIに満足していない方
  • Gemini CLI や Codex 等とAI連携したい方

環境

本記事の構築手順は、以下の環境を前提としています。

  • OS: Windows 11
  • WSL: Ubuntu 24.04.2 LTS
  • Neovim: v0.12.0-dev
  • AstroNvim: v5.3.6-dev

1. TeX Live のインストール

まず、WSL (Ubuntu) に TeX Live をインストールします。TeX Live は LaTeX のディストリビューションの一つで、必要なパッケージがまとめて含まれています。

sudo apt update
sudo apt install texlive-full -y

texlive-full はサイズが非常に大きい (数GB) です。ディスク容量を節約したい場合は、texlive-basetexlive-latex-recommended などがありますが、執筆中にインストール作業をしたくないのでなるべく避けられるように full を入れました。

2. AstroNvim の LaTeX 設定

私は NeoVim の環境は AstroNvim を利用しています。
AstroNvim のセットアップについては以下をご参照ください。

AstroNvim Community には LaTeX のため設定セットが存在するのでそちらを利用させていただきました。
~/.config/nvim/lua/community.lua に下記を追記します。

~/.config/nvim/lua/community.lua
-- ~/.config/nvim/lua/community.lua
return {
  "AstroNvim/astrocommunity",
  :
  { import = "astrocommunity.markdown-and-latex.vimtex" },
  :
}

デフォルトのセットアップは下記のコードの通りです。

このコードを ~/.config/nvim/lua/plugins/vimtex.lua を作成してコピーし、Viewer の設定を行います。
gWSL があり、Linux 上でPDF Viewerをインストールしてもよかったですが、どうしてもウィンドウ操作が思い通りにならなかったり、ボタンの位置がズレたりと不都合が多い場合があるので、Windows上にViewerアプリをインストールすることにしFした。

SyncTeX に対応した Windows の PDF Viewer として今回は SumatraPDF を選択しましたが,他にも Okular が対応しているようです。

では、SumatraPDF を選択した場合の設定方法を記します。上記でコピーしておいた vimtex.lua に viewer の実行アプリとオプションを指定します。

~/.config/nvim/lua/plugins/vimtex.lua
return {
  "lervag/vimtex",
  lazy = false,

  config = function()
    -- 以下追加
    vim.g.tex_flavor = "lualatex"
    if vim.fn.has('win32') == 1 or (vim.fn.has('unix') == 1 and vim.fn.exists('$WSLENV') == 1) then
      if vim.fn.executable('SumatraPDF.exe') == 1 then
        vim.g.vimtex_view_general_viewer = 'SumatraPDF.exe'
        vim.g.vimtex_view_general_options = '-reuse-instance -forward-search @tex @line @pdf'
      end
    end
    -- 以上追加
  end,
  dependencies = {
    "AstroNvim/astrocore",
    :
  },
}

WSL であるかどうか判定するために (vim.fn.has('unix') == 1 and vim.fn.exists('$WSLENV') == 1) を追加していますが、他のプラットフォームで NeoVim を扱わない場合はこの判定は不要でしょう。

ここで vimtex のヘルプを確認しながら設定を試行錯誤していましたが、結局そのまま general_viewer と general_options を設定するだけで動作しました。

3. サンプル文書の作成とコンパイル

設定が完了したら、動作確認用の .tex ファイルを作成します。

test.tex
\documentclass[a4j,12pt]{ltjsarticle}

\title{LuaLaTeX のテスト}
\author{AstroNvim User}
\date{\today}

\begin{document}

\maketitle

\section{はじめに}
これは LuaLaTeX を使った日本語の文書です。

WSL 上の NeoVim (AstroNvim) で快適な \LaTeX{} 環境を構築します。

\end{document}

NeoVim でこのファイルを開き、VimTeX の VimtexCompile コマンドを実行するとタイプセットが開始されますが、このままでは LuaLaTeX をエンジンに指定できていないためコンパイルエラーになります。以下の内容の latexmkrc を test.tex と同じ場所に作成し、タイプセットの設定を行います。

ホームディレクトリに .latexmkrc というドットファイルを作成すると、各プロジェクトごとに作成せずともその設定が利用されるようになります。

$lualatex = 'lualatex -synctex=1';
$pdflualatex = $lualatex;
$biber = 'biber %O --bblencoding=utf8 -u -U --output_safechars %B';
$bibtex = 'bibtex %O %B';
$makeindex = 'mendex %O -o %D %S';
$max_repeat = 5;
$pdf_mode = 4;

$pvc_view_file_via_temporary = 0;

各行の設定について説明文を生成しましたので、内容について理解がしたい方はご確認ください。内容は合っていると思います。
$lualatex = 'lualatex -synctex=1';

  • 目的: lualatex コマンドの具体的な実行内容を定義しています。
  • 詳細:
    • lualatex: LuaLaTeXエンジンを使ってコンパイルします。
    • -synctex=1: SyncTeX
      を有効にするためのオプションです。これにより、生成されたPDFファイルと元の
      .tex ソースコードの間で相互ジャンプが可能になります(PDFの特定の位置をクリ
      ックするとエディタの該当箇所に飛ぶ、など)。

$pdflualatex = $lualatex;

  • 目的: PDFを生成する際の lualatex コマンドとして、上で定義した $lualatex
    の設定をそのまま使うように指定しています。
  • 詳細: latexmk は -pdf オプションを付けた際にどのコマンドを使うかを
    $pdflualatex で判断するため、このように同じ設定を割り当てています。

$biber = 'biber %O --bblencoding=utf8 -u -U --output_safechars %B';

  • 目的: 参考文献処理ツール biber の実行コマンドを定義しています。biblatex
    パッケージと組み合わせて使います。
  • 詳細:
    • biber: biber プログラムを呼び出します。
    • %O: latexmk が受け取ったオプションを biber
      に渡すためのプレースホルダです。
    • --bblencoding=utf8: 出力する .bbl
      ファイルのエンコーディングをUTF-8に指定します。
    • -u: 入力ファイル(.bib など)のエンコーディングをUTF-8として扱います。
    • -U: 出力ファイル(.bbl など)のエンコーディングをUTF-8として扱います。
    • --output_safechars:
      LaTeXで特殊な意味を持つ文字を安全なマクロに変換して出力します。
    • %B: 処理対象となるファイル名(拡張子なし)を指定するプレースホルダです。

$bibtex = 'bibtex %O %B';

  • 目的: 従来の参考文献処理ツール bibtex の実行コマンドを定義しています。
  • 詳細: biber を使わない場合に備えた、標準的な設定です。

$makeindex = 'mendex %O -o %D %S';

  • 目的: 索引作成ツール makeindex の実行コマンドを定義しています。
  • 詳細:
    • mendex: 標準の makeindex
      の代わりに、日本語のソート(五十音順など)に正しく対応した mendex
      を使用するよう指定しています。
    • %O: オプションを渡すためのプレースホルダ。
    • -o %D: 出力ファイル名を指定します。%D は latexmk
      が用意した出力ファイル名のプレースホルダです。
    • %S: 入力ファイル名を指定します。%S は latexmk
      が用意した入力ファイル名のプレースホルダです。

$max_repeat = 5;

  • 目的: 相互参照(図番号、引用、目次など)を解決するために、最大で何回までコンパ
    イルを繰り返すかを設定します。
  • 詳細: 通常、LaTeXは一度のコンパイルで全ての参照を解決できないことがあります。
    この設定は、無限ループを防ぎつつ、参照が安定するまで最大5回までコンパイルを繰
    り返すように指示しています。

$pdf_mode = 4;

  • 目的: latexmk がPDFを生成する際のデフォルトのエンジンを指定します。
  • 詳細: - 1: pdflatex - 2: ps2pdf - 3: dvipdf - 4: lualatex - 5: xelatex
    この設定では 4 を指定しているため、latexmk はデフォルトで LuaLaTeX
    を使ってPDFを生成します。

$pvc_view_file_via_temporary = 0;

  • 目的: latexmk -pvc
    (継続的プレビューモード)でPDFビューワーを更新する際の挙動を設定します。
  • 詳細:
    • 1(デフォルト): 生成したPDFを一時ファイルにコピーしてからビューワーで開き
      ます。これにより、ビューワーがPDFファイルをロックしてしまい、次のコンパイ
      ルが失敗するのを防ぎます。
    • 0: 生成したPDFファイルを直接ビューワーで開きます。最近のPDFビューワーはフ
      ァイルをロックしないものが多いため、0に設定することで若干高速になる場合があります。

4. PDF のプレビュー

ここまでの設定を行えば早速タイプセットしてみましょう。

test.tex を NeoVim で開き、:VimtexCompile を実行してみてください。そうするとタイプセットが複数回実行され SumatraPDF が開かれたかと思います!

この記事通りに vimtex.lua を作成した場合は、キーマップが設定されていると思います。 はデフォルトでは ',' ですので、test.texファイルを開き ,ll とノーマルモードでタイプすれば :VimtexCompile を実行したことになります。

image.png

ここで SumatraPDF の表示をダブルクリックするとそのコード部分に飛ぶ、というような SyncTeX の機能を実践したくなるかと思いますが、WSL と Windows を跨いでいるので残念ながらここまでの設定だけでは機能しません。

ですが、NeoVim エディタで執筆ができるようになり、強力な検索機能とマルチタブ等の機能を駆使すれば高速なファイル間の移動が容易になっているので、あまり必要性を感じていません。Vimmer なのでマウスは不要です!

とはいえ、完璧な設定ができていないのは気持ちが悪いので方法があればまた追記するかもしれません。

執筆 With AI

NeoVim 上で LaTeX 執筆ができるようになれば、好みの AI ツールと組み合わせて面倒な作業は AI に任せるということもできます。普段 Gemini CLI を利用している私は広いモニタでは画像のように並べて作業し、ラップトップではターミナルとSumatraPDFをそれぞれ全画面にしてウィンドウを切り替えながら作業をしています。

image.png

まとめ

本記事では、WSL 上の AstroNvim を用いて LaTeX 開発環境を構築する方法を解説しました。また、Windows にインストールした SumatraPDF との連携方法についても記載しました。執筆した内容が保存と同時にタイプセット後 Viewer に表示されるようになりました。是非、VimmerでLaTeX執筆をよくなさる方はお試しください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?