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?

openSUSE on WSL2で,VSCodeが使えるLuaLaTeX環境を構築する

Posted at

概要

opneSUSE on WSL2にTeX Liveをインストールし,Windows側のVSCodeを用いて.texファイルの作成・編集およびコンパイルができる環境を構築します.コンパイルはWindows+VSCode環境と同じように一つのキーボードショートカット(あるいはクリック)で実行でき,コマンドを入力する必要はありません.また,相互参照や目次,索引などを出力するために必要な処理をLatexmkが自動で実行します.

背景

LuaLaTeXは日本語組版が可能で高機能・高品質な新しいLaTeXですが,従来のpLaTeXやupLaTeXなどと比べてコンパイルが遅いという重大な欠点があります.そこで,この欠点を補う方法の一つにコンパイルをLinux上で行うという方法があります.この方法はLinux上でのコンパイルがWindows上でのそれより速いという単純な事実に基づいているため,Linux上にLuaLaTeX環境を構築すれば良いわけです.Linux上に環境を構築する方法はいくつかありますが,本稿ではWindowsの便利機能であるWSL,特にWSL2を使います.
以下の記事で示されているように,Linux上でのコンパイルはネイティブでなくともWindowsより圧倒的に高速であることが分かっていて(使ってみると実感できます),それは長い文書や複雑なtikz図版,多くの図表・画像を含むものになると顕著です.また,LaTeXのパッケージをTeX Live managerのコマンド:tlmgrを用いてCLIで簡単に管理できるという点や,Windowsの環境を汚染しないという点もメリットになり得ます.したがって私はLinux on WSL2でのLuaLaTeX使用をお勧めしたいのですが,Linux on WSL2+LuaLaTeX+VSCode環境を実現するための手順を丸ごと示した情報が少ないと感じたので,本稿を執筆するに至りました.

【参照:コンパイル速度についての記事】

ここではWSL2に乗せるLinuxディストリビューションとしてopenSUSE Leapを選択しています.これは筆者の好みによる選択であり,Linuxで他にもやりたいことがある場合は,より日本語の情報が多いUbuntuなどの方がいいかもしれません(他のディストリビューションでも本稿と概ね同じ方法が使えると思います).

手順1:WSL2にopenSUSEをインストールする

WSL2にopenSUSEをインストールし,CLIでopenSUSEが動作するようにします.

1-1

Windowsの検索バーから「Windowsの機能の有効化または無効化」と検索して,開いて下さい.開いたら「Linux用Windowsサブシステム」という項目のチェックボックスにチェックを入れて,【OK】をクリックしてください.再起動を求められたら,応じてください.

1-2

PowerShellやコマンドプロンプトを管理者権限で開いてください.このとき,コマンド:wsl --updateを実行して,WSLを最新バージョンに更新しておくといいかもしれません.
コマンド:wsl --list --onlineを実行すると,WSLにインストールできるLinuxディストリビューションの一覧が表示されます.一覧の左側が<NAME>なので,それを基にコマンド:wsl --install <NAME>を実行すると,インストールが開始されます.<NAME>を指定しなければ,Ubuntuがインストールされます.
前述の通り,僕はopenSUSE Leapをインストールします.バージョンは執筆時15.5です.以降,openSUSE Leapであることを前提に進めます.

1-3

インストールが完了したら,自動でこのような画面が表示されると思います.自動で表示されない場合は,「openSUSE」などとアプリを検索し,開いてください.

Qiita001_01.png

言語の選択ができますが,残念ながら日本語はないのでこのまま英語で進めます.左下には操作に対応するキーが書いてあります.また,tabでカーソルを移動し,enterを押すことでも操作できます.
いくつか画面を進めると,ユーザー登録の画面になります.入力欄はtabで移動できます.以下の要件に従ってそれぞれ入力してください.User's Full NameUsernameは(恐らく)同じでいいと思います.また,Passwordはそれなりに頻繁に入力することになります.

Username:小文字のアルファベット(アクセント記号なし)と,数字,._-
Password:一般的な英語配列のキーボードで入力できる文字.5~72文字.

さらに進めるとインストールが始まるので,完了まで待ってください.インストールが終わると,openSUSEがCLIで使えるようになっています.試しにコマンド:dateを実行すると,現在の時刻や日付が表示されます.また,コマンド:sudo zypper updateで,パッケージを一括で最新バージョンにアップデートできます.

手順2:openSUSEにTeX Liveをインストールする

openSUSEにTeX Liveをインストールします.TeX Liveは,LaTeXを使用する上で現在デファクトスタンダードとなっているTeXディストリビューションで,LaTeXの使用に必要なものが一括でダウンロードできます.

2-1

TeX Liveをインストールする前に,TeX Live dummyというものをインストールします.これの役割については,以下の引用を参照して下さい.

TeX Live公式パッケージをインストールしてもTeX Liveに依存するパッケージをインストールするとLinuxディストリビューションが提供しているTeX Liveも同時にインストールされてしまいます.Linuxディストリビューションが提供するTeX LiveをインストールさせないようにするにはTeX Liveのdummyパッケージを事前にインストールしてパッケージマネージャにTeX Liveがすでにインストールされていると錯覚させる必要があります.
(出典:https://texwiki.texjp.org/?texlive-dummy#u693d45c)

以下のコマンドを実行することで,インストールされます.なお,sudosuperuser doの略で,管理者権限での実行を意味しています.管理者権限で実行するにあたり,最初に設定したPasswordの入力が求められるので,入力することで実行できます.Passwordの入力中は何も表示されませんが,入力は出来ています.Passwordを入力してからenterを押してください.

sudo zypper --no-gpg-checks install http://mirrors.ctan.org/support/texlive/texlive-dummy/openSUSE/texlive-dummy-2024.9999-1.noarch.rpm

URLは執筆時のものです.変更になっている可能性があるので,以下のページから最新の情報を確認してください.
参照:https://texwiki.texjp.org/?texlive-dummy#y33add76

インストールが完了したら,次に移って下さい.

2-2

それでは,TeX Liveのインストーラをダウンロードします.次のコマンドを実行してください.

wget http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz

ダウンロードが完了したら,展開します.

tar xvf install-tl-unx.tar.gz

ダウンロード・展開したディレクトリでコマンド:lsを実行すると,install-tl-********というディレクトリの存在が確認できると思います.

2-3

コマンド:cd install-tl-********で,インストーラがあるディレクトリに入ります.次に,コマンド:sudo perl install-tlを実行すると,TeX Liveのインストーラが開きます.どういったschemeで,どんなcollectionをインストールするかは個人に委ねられます.以下の手順は僕の場合のインストール手順なので,ぜひ自分でカスタマイズしてみて下さい.また,ここでcollectionを無理にたくさんインストールしなくても後からpackageを一つずつインストールできます.

インストール手順
まず,どのschemeでインストールするか選択します.僕はbasic shemeでインストールしたので,SenterdenterRenterの順で入力しました.
次に,インストールするcollectionを選択します.collectionはpackageが集まったもので,複数選択できます.Centerでcollectionの選択画面に入ります.元々チェックが入っているものに加えて,インストールしたいcollectionに対応する文字を入力し,enterを押すことでcollectionがインストールされます.僕はa, f, m, p, P, x, D, E, F, G, Jのcollectionをインストールしました.この内,元々チェックされているものに加えてm, x, p, P, G,は入れるべきです.

主なcollectionの説明
m : Chinese/Japanes/Korean (base)
x : Japanese
どちらも日本語組版をする上で入れるべきcollectionです.
p : US and UK English
英語組版のためのcollectionです.
P : Mathematics, natural sciences, computer science packages
理系の人ためのcollectionです.理系の人ならなら入れるべきです.
E : LaTeX additional packages
文の周り込みを実現するwrapfig packageなどの追加packageが入っているcollectionです.入れなくても困らないと思います.
J : Graphics, pictures, diagrams
tikz-3dplotなど,tikz関連のpackageが多く入っています.tikz自体はこれをインストールしなくても使えますが,tikzの幅を広げたいなら入れるべきです.また,画像や表に関するpackageも多く含まれているようです.
G : LuaTeX packages
LuaTeX,LuaLaTeXのためのcollectionです.必須なのかは不明ですが,今回はLuaLaTeXを使うので一応入れておきましょう.
b : BibTeX additional styles
文献参照などに関する追加packageが入っています.これが無くても基本的な文献参照は利用できます.文献参照をカスタマイズしたいなら入れてもいいかもしれません.

collectionの選択が終わったら,Renterで最初の画面に戻り,Ienterでインストールを開始します.インストール中はCLIを閉じないでください.

手順3:とりあえずコンパイルが出来る環境を構築する

コマンド:lualatex sample.texを実行することで,sample.texファイルをとりあえずコンパイル出来るところまで設定します.

3-1

ユーザのホームディレクトリにてコマンド:vim .bashrcを実行してください.~/.bashrcファイルがvimで開くので,Iキーを押してinsert mode(編集モード)に入ります.そこで,一行目に以下の記述を追加してください.

export PATH=$PATH:/usr/local/texlive/2024/bin/ComputerArchitecture/

ここで,ComputerArchitectureは多くの場合でx86_64-linuxです.そうでない場合はコマンド:uname -mを実行して,返ってきたものを入れてください.

追加したらesc:wqenterとしてください.そして,以下のコマンドを実行します.

source ~/.bashrc

3-2

次に,以下二つのコマンドを順に実行してください.実行できた場合は,問題ありません.実行できなかった場合は,このコマンドを実行するためにもう一つ手順が必要になります(僕は実行できませんでした).

sudo tlmgr update --self --all
sudo tlmgr install latexmk

以下の操作は,上記のコマンドが実行できなかった場合のみ行ってください.
また,これから各種設定ファイルがある/etc/というディレクトリの重要なファイルを編集します.十分な知識の無い方は下記以外の編集は行わないでください.

コマンド:sudo visudoを実行してください./etc/sudoersというファイルがvimで開くので,先程と同じようにIキーでinsert modeに入り,次のように赤から緑に編集して下さい.

-  Defaults secure_path="/usr/sbin:/usr/bin:*****:~~~~~:$$$$$"
+ #Defaults secure_path="/usr/sbin:/usr/bin:*****:~~~~~:$$$$$"
##----------------------------------------------------------------------------------------##
- Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE ***** ~~~~~ $$$$$"
+ Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE ***** ~~~~~ $$$$$ PATH"

一段目では,Defauls secure_path="*****"の行頭に#をつけてコメントアウトにしています(消すのは怖いので).
二段目では,Defaults env_keep = "*****"PATHと書き足しています.このとき,既に書かれているものは消さないで下さい.

編集が終わったら,esc:wqenterとしてファイルを保存,終了します.この後は,最初に提示したコマンドをそれぞれ実行してください.

ここでやった一連のことは以下の記事で紹介されていたもので,これに倣わせて頂きました.何が問題だったのか,何をして解決したのか,詳しく知りたい方は参照してください.

3-3

ホームディレクトリに.latexmkrcという,先程インストールしたLatexmkの設定ファイルを作成します.ホームディレクトリでvim .latexmkrcを実行し,.latexmkrcファイルを作成します.Iキーでinsert modeに入り,以下の内容を記述してください.

~/.latexmkrc
#!/usr/bin/env perl

$lualatex = 'lualatex -pv -gg -synctex=1 -interaction=nonstopmode -file-line-error %S';
$biber = 'biber --bblenconding=urf8 -u -U --output_safechars %B %S';
$bibtex = 'pbibtex -kanji=utf8 %S';
$makeindex = 'mendex -o %D %S';
$pdf_mode = 4;
$max_repeat =5;
$pvc_view_file_via_temporary = 0;

記述したら,esc:wqenterで保存し,終了してください.
ここに記述されている内容(中身)について詳しく知りたい場合は,以下を参照して下さい.

3-4

ここまでで最低限.texファイルをコンパイルできる環境が整いました.試しにコンパイルをし,生成された.pdfファイルを閲覧してみましょう.ホームディレクトリで,コマンド:mkdir testとして,ディレクトリ:~/test/を作ります.コマンド:cd testでそこに移動し,コマンド:vim sample.texとします.今までと同じ操作で以下の内容を記述し,保存・終了してください.

このsample.texファイルをコンパイルする為には2-3でMathematics, natural sciences, computer science packagesをインストールしている必要があります.インストールしていない場合は,プリアンブルの\usepackage{mathtools}\usepackage{fixdif},そして\subsection{数式}から「~の微分ですね」までを削除して下さい.

sample.tex
\documentclass{jlreq}
\pagestyle{empty}
\usepackage{mathtools}
\usepackage{fixdif}

\begin{document}

\title{openSUSE on WSL2で,\\VSCodeが使えるLua\LaTeX 環境を構築する}
\author{}
\date{\today}
\maketitle

\section{テスト}
これはsample.texファイルをコンパイルして得られたsample.pdfファイルです.
documentclassはjlreqで,mathtools packageとfixdif packageを読み込んで使用しています.
\subsection{文章}
openSUSE on WSL2で,VSCodeが使えるLua\LaTeX 環境を構築するのが目標です.
上手くコンパイルできているといいですね.
\subsection{数式}
まずはequation環境を試してみます.
\begin{equation}
    \int_{0}^{\pi/2} \sin{x} \d x =1 \label{eq-1}
\end{equation}
この\eqref{eq-1}式は,$\sin{x}$の閉区間$[0,\,\pi/2]$における積分ですね.\\
次にalign*環境を試してみます.
\begin{align*}
    \frac{\d}{\d x} \arcsin{x} &= \frac{1}{\sqrt{1-x^{2}}} \\
    \frac{\d}{\d x} \arccos{x} &= -\frac{1}{\sqrt{1-x^{2}}} \\
    \frac{\d}{\d x} \arctan{x} &= \frac{1}{1+x^{2}}
\end{align*}
逆三角関数の微分ですね.
\subsection{文章}
いかがですか?自分でsample.texファイルを編集してコンパイルし直してみてもいいかもしれません.

\end{document}

では,~/test/ディレクトリでコマンド:lualatex sample.tex(拡張子は省略可)を実行してください.ログが止まったら,コマンド:lssample.pdfファイルが生成されていることを確認して下さい.生成されていたら上手くいっているはずです.では,このsample.pdfファイルを開いてみましょう.Windowsのエクスプローラーから,LinuxopenSUSE-Leap-VersionhomeUsernametestと移動し,sample.pdfをクリックすることで表示できます.
さて,sample.pdfファイルの一つ目の数式には右側に(1)と番号が付いていますよね.そして,その後の文で「この(??)式は,…」のようになっていると思います.これは失敗でなく仕様なので安心してください.~/test/ディレクトリで再びlualatex sample.texを実行し,それからsample.pdfファイルを開いてみましょう.今度は「この(1)式は,...」のように表示されているはずです.
このようにLaTeXは相互参照などを使ったとき,一回のコンパイルで完璧な.pdfファイルを出力することはできず,少なくとも二回のコンパイルが必要です.しかし,人が必要な回数を判断してコマンドを打つのは面倒なので,これからはそれを自動化する手順に入ります.

手順4:VSCode上でコンパイルできるようにする

Windows側のVSCodeで.texファイルの作成・編集およびコンパイルが出来るように設定します.

4-1

VSCodeに拡張機能:WSLと,拡張機能:LaTeX Workshopをインストールして下さい.WSLは恐らくローカルにインストールされますが,LaTeX WorkshopはリモートのopenSUSEにインストールすることをお勧めします.

4-2

VSCodeからリモートでopenSUSE内のファイルを触れるようになったら,ctrl+,で設定を開きます.検索バーの下にある「ユーザー」,「リモート」から,LaTeX Workshopをインストールした方を選択し,右上の紙アイコン「設定(JSON)を開く」を選択して,以下の内容を記述してください.

settings.json
"latex-workshop.latex.tools": [
    {
        "name": "latexmk",
        "command": "wsl.exe",
        "args": [
            "latexmk",
            "-pv",
            "-gg",
            "-synctex=1",
            "-interaction=nonstopmode",
            "-file-line-error",
            "-outdir=%OUTDIR%",
            "%DOCFILE%"
        ],
        "env": {}
    }
],
"latex-workshop.latex.recipes": [
    {
        "name": "LuaLaTeX",
        "tools": [
            "latexmk"
        ]
    }
]

これは必要最低限の設定ですが,動くことは動くので一度この設定でsample.texファイルをコンパイルしてみましょう.ctrl+alt+B,または右上の緑の三角形をクリックすることでコンパイルできます.sample.pdfファイルが生成されたら,クリックしてみましょう.VSCode内で表示することが可能です.今度は,一度のコンパイル(ビルド)だけで「この(1)式は,…」と表示されているのではないでしょうか.そうなっていたら成功です.お疲れさまでした.

細かい設定

これ以降は,より快適に執筆するための詳細な設定です.僕個人の設定を紹介しながら進めるので,好みによるものが多いです.他のサイト・記事も参考にしながら設定されることを強くお勧めします.

ユーザー設定

settings.json
"editor.wordSeparators": "./\\()\"'-:,.;<>~!@#$%^&*|+=[]{}`~? ,.「」【】『』()!?てにをはがのともへでや",
"editor.unicodeHighlight.allowedCharacters": {
    ",":true,
    ".":true
},

VSCodeで日本語入力をより快適に行うための設定です.一行目はctrlでカーソルを移動する際に区切りとなる文字を設定しています.二行目ではの強調表示を無効にしています.邪魔なので.

LaTeX Workshopの設定

settings.json
"latex-workshop.latex.intellisense.package.enabled": true,
"latex-workshop.latex.ourDir": "out",
"latex-workshop.latex.autoBuild.run": "never",
"latex-workshop.latex.autoClean.run": "onFailed",
一行目
packageやコマンドの入力補完をしてくれます.恐らくデフォルトでtrueです.
二行目
生成されたファイルの出力先を指定しています.
三行目
自動でビルドするか聞かれています."never","onSave","onFileChange"が選択できます.それぞれ「しない」,「保存の度」,「編集の度」ですが,僕は後述の設定でビルドの度にPDFが表示されるように設定していて,勝手にビルドされると鬱陶しいので,"never"を指定しています.
四行目
中間生成ファイルを自動で削除するか聞かれています."never","onFailed","onSecceeded","onBuilt"が選択できます.それぞれ「しない」,「ビルドが失敗したとき」,「ビルドが成功したとき」,「ビルドの成否に関わらず」です.ネット上では"onBuilt"が設定されているのをよく見ますが,僕は"onFailed"をお勧めします.理由について詳しくは割愛しますが,コンパイル速度に大きく関わってきます.
settings.json
"latex-workshop.view.pdf.viewer": "external",
"latex-workshop.view.pdf.external.viewer.command": "C:path\\to\\viewer"

一行目は,生成された.pdfファイルをどこで開くか聞かれています."browser","tab","external","legacy","singleton"が選択できます.それぞれ「Windows既定のブラウザで」,「VSCode内で」,「Windows既定のビューワで」,「レガシータイプのビューワで」,「既定のビューワのウインドウで,それが無いなら新しいウインドウで」です.僕はSumatraPDFを使っているので,"external"を指定し,二行目でSumatraPDFまでのパスを指定しています.

SyncTeXの設定

WSL+LaTeX+VSCode環境でのSyncTeXの使用に関しては,以下の記事がとても参考になります.

あとがき

ここまでお疲れさまでした.初心者の人でもわかるようになるべく丁寧な記述を心がけましたが,どうしてもわかりにくいところなどがあったと思います.特に,.latexmkrcファイルの中身,LaTeX Workshopの設定,TeX Live managerについて細かく書けなかったのは心残りですが,それでもこの記事があなたの環境構築の一助になったのなら幸いです.質問や訂正依頼などは,コメントかプロフィールに記載のメールまでお願いします.
読んでいただきありがとうございました.

参考文献

TeX Liveのインストールについて:https://texwiki.texjp.org/?Linux#texlive
TeX Live dummyのインストールについて:https://texwiki.texjp.org/?texlive-dummy
LaTeX Workshopの設定について:https://github.com/James-Yu/LaTeX-Workshop

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?