LuaTeX(LuaLaTeX)/XeTeX(XeLaTeX) + BXjscls/LuaLaTeX-ja + Latexmk/ClutTeX + BibLaTeX + LaTeX Workshop + Git + pre-commit + GitHub
LuaTeX/LuaLaTeX/XeTeX/XeLaTeX + BXjscls/LuaTeX-ja
+ Latexmk/ClutTeX + BibLaTeX +
LaTeX Workshop
+ Git + pre-commit + GitHub
LuaTeX/LuaLaTeX/XeTeX/XeLaTeXはぴーでぃーえふのコンパイルに使うエンジンだにょ。BXjscls/LuaTeX-jaは日本語を表示するための文章クラスだにょ。Latexmk/ClutTeXはコンパイルのためのコマンドを必要なだけ呼び出すためのツールだにょ。BibLaTeXは参考文献を管理するためのパッケージだにょ。LaTeX WorkshopはVS CodeでLaTeXをべんりに使えるVS Code拡張機能だにょ。Gitは編集履歴をよさげに管理してくれるソフトウェアだにょ。pre-commitはGitで履歴を付ける前にフォーマットしてくれるソフトだにょ。GitHubはいろいろべんりなGitのリモートだにょ!
エンジンはどれを使うにょ?
LuaTeX vs XeTeX vs upLaTeX vs
pLaTeX vs
pdfTeX ?
- ”XeTeX か LuaTeX の二択”1という説があるにょ。
詳細
upLaTeXとpLaTeX以外では、日本語文章用のパッケージを別途使うようです。LuaTeX-jaはLuaTeX使用時によく用いられ、ltjs~等の文章クラスも提供している。BXjsclsはこのような日本語文章用のパッケージを自動的に読み込む文章クラスのパッケージであり、上で挙げた5つに全て対応している。2upLaTeXとpLaTeXはGitHubで管理されているようだが、最終コミット日時はそれぞれ2022/7/14, 2023/2/15であった。一方で、LuaTeX-jaパッケージの最終更新時は2023/10/10であったが、GitHubで管理されていない。BXjsclsはGitHubで管理されており、最終コミット日時は2023/8/6であった。- TeX処理系御伽話 #LaTeX - Qiita
- XeLaTeXで日本語文章を書く例
- 日本語 LaTeX の新常識 2021 #LaTeX - Qiita
- システム情報科学コース 実験と演習
すでに優れたテンプレートはあるのかにょ?
LaTeXに“テンプレート”という概念があるので、検索するのがとても難しいにょ。
詳細
但し、“latex+latexmk+pre-commit”などで検索するとほとんど結果が出ないため、上記の要求を満たし、かつ絶対的に優れているテンプレートがあるとは言えないと思われます。 ノートを全てLaTeXで取ったLaTeX and Vimは英語圏で有名だと思います。shenapse/template-texlive-docker-vscode、eed6d80434107db92f2276b9c4e5a799ce064cdeも見つけました。ビルドツールはどれを使うにょ?
Latexmk vs llmk vs ClutTeX vs arara vs ptex2pdf
中間ファイルを別の場所に置いてくれるClutTeXを使うにょ!特に設定はいらないにょ。これでファイルがすっきりするにょ。
ClutTeXに乗り換えるにあたって中間ファイルを消すにはどうするにょ?
git cleanを使うにょ。 まず
1 | git clean -x -n |
でなくなったらこまるファイルが消されないか確かめるにょ。大丈夫なら
1 | git clean -x -f |
で消すにょ。
詳細
ptex2pdfは3年ほど更新がないようです。LaTeX Workshopを使ってしまうと、エディターに対する依存性が高まってしまうと思います。
Latexmkをどうしても使いたいにょ……?
.latexmkrcの設定
./.latexmkrc
1 | #!/usr/bin/env perl |
使うTeXの種類によって$pdf_mode等を変更する必要があります。ここではLuaTeX+Biber+makeindexにおける例を挙げます。BibLaTeXのバックエンドにはBiber,
BibTeX,
bibtex8があるようですが、普通はBiberを使うようです。
参考
サブディレクトリにある.texファイルをコンパイルする場合、LaTeX Workshopはそのディレクトリからコマンドを呼び出すため、.latexmkrcもそのディレクトリに置くか、または引数に.latexmkrcのファイルパスを指定する必要があります。
1 | { |
.latexmkrcが適切に読み込まれていない場合、LaTex Compilerの出力を見ると、-interaction=nonstopmodeが指定されていないために途中で止まっているかもしれません。その場合は、LaTeX WorkshopのウィンドウからTerminate current compilationを押します。
ClutTeXやLatexmkをLaTeX Workshopと一緒に使うために.vscode/settings.jsonを作るにょ!
1 | { |
pre-commitはどのフックを使うにょ?
.texのフォーマットには、まずlatexindentをつかうにょ!LaTeX Workshopのデフォにょ。.texのフォーマットにpre-commit-latex-hooksも使うにょ。.texのリントにはchktexとlacheckをつかうらしいにょ。3.bibのフォーマットにはbibtex-tidyをつかうにょ!
latexindentと.latexindent.yamlの設定
素直にコピペするにょ!(view rawからまず開くにょ!)
詳細
これは本当に難しいようなので、素直に専門家に頼る。 但し、ファイルはprettierにyamlとして認識されないため、コメントを除去する必要がある。そこまでして使う価値があるかは、筆者には判断しかねる。
オプションは以下を参照した。
.bibのフォーマットはLaTeX Workshopに直接実装されているため、pre-commitと同時に使いにくいし、こちらもあまり特定のエディターに依存したくない。
あまりメンテナンスされているフォーマッタは無いが、bibtex-tidyが一番まともだと思われる。但し、v1.9.0より後ではpre-commitのargsが正常に動作しないという不具合が現時点で解決されていない。
.latexmkrcはPerlファイルであるため、やり過ぎ感はあるが、一応フォーマットする。Perlのインストールが必要。Strawberry
PerlとActivePerlがあるが、段々と前者が主流になっている模様。4
1 | winget install -e --id StrawberryPerl.StrawberryPerl |
1 | - repo: https://github.com/henryykt/pre-commit-perl |
pre-commit-latex-hooksは”pre-commit
latex”等で検索すると最も上に出てくる。Rustのインストールが必要。
Rustをインストールしておくにょ。
1 | winget install -e --id Rustlang.Rustup |
pre-commit-config.yaml
1 | # See https://pre-commit.com for more information |
GitHub Actionsでコンパイルするにょ!
コンパイルにもcluttexを使うにょ!Dockerの起動に2分ぐらいかかるからprivateリポジトリの場合残り時間に気をつけるにょ。1日60分ぐらい使えるから、10回/日ぐらいが無難にょ。
.github\workflows\build.yaml
1 | name: Build LaTeX document |
ちなみにcluttexはデフォルトで--halt-on-error --file-line-errorとなっているから気をつけるにょ。GNU Parallelで高速化してるにょ。actions/cacheでもっと速くなると思うにょ。Latexmkを使うときはlatex-actionをそのまま使うといいにょ。
マルチカーソルを使いこなすにょ!
Ctrl+Dで次の同じワードにも同時にカーソルをおけるにょ。\begin{...}...\end{...}の...の中身を変えるのに使えるにょ。ドキュメントを読むにょ!
サジェストとスニペットを使いこなすにょ!
特にこだわりがなければとりあえずLaTeX WorkshopのWikiにあるスニペット(例:BEQ→\begin{equation}...\end{equation})とサジェスト(例:@a→α,
@/→\frac{}{})の説明を読むにょ!
さらなる高みを目指すなら下のファイルも使うなり改造するなりするにょ。
.vscode/latex.code-snippets
人によってdfn,Def,defi,definitionなど定理環境の派閥の違いがあることを考えると(GitHubで調べると面白いにょ!)、自動生成するのもありにょ。
1 | from pathlib import Path |
複雑なスニペットで長いコマンドをすぐに書けるようにするよりも\NewDocumentCommandや\DeclareDocumentCommandでコマンドを定義したほうが良いかもしれないにょ。そーゆう意味で下のHyperSnips用のファイルはいらないかもしれないにょ。
.vscode/latex.hsnips