普段はpLaTeX(多分)を使っているのですが、LuaLaTeXだとUTF-8の文字が使えるので、旧字体の名前とかをそのまま書けるのが良いな~と前から思っていました。で、最近LuaLaTeXのファイルを使う機会があり、手で書き直すの面倒だしもういっそのことLuaLaTeXデビューするか~となり、LuaLaTeXデビューしたので、やったことをざっとまとめます。
前提条件
- TeX Liveを導入済み
- あのインストールにアホほど時間かかるやつです
- Windows 11
- Visual Studio Codeでの編集環境を整えている
- これ自体はあんまり関係無くて、要するにこの辺の設定にある程度慣れているかということ
手順
TeX Liveのインストール
がんばりましょう
install-tl-windows.exe
を
からダウンロードして実行し、とりあえず全部のパッケージをインストールしましょう。高度な設定とかをクリックせずにとりあえずインストールしてしまえばだいたい全部入ると思います。ここで、LuaLaTeX自体もインストールされます。死ぬほど時間がかかるので覚悟しましょう。数時間は普通にかかります。
Visual Studio Codeのインストール、拡張機能のインストール
VSCodeをインストールします。Microsoftの公式サイトからダウンロードしてインストールしましょう。
インストールして起動後、拡張機能としてJapanese Language Pack for VS Code(日本語化の拡張機能)とLaTeX Workshop(作成者が「James Yu」のやつ)をインストールします。
.latexmkrcを作成する
Windowsのユーザーフォルダ(C:/Users/{ユーザー名}
)に、.latexmkrc
という名前のファイルを作ります。これはただのテキストファイルなのですが、拡張子を含まない名前が「.latexmkrc
」なので注意してください。.txtみたいな拡張子が付いているとダメです。
ファイルの中には以下の内容を書き込んで保存してください(出典)。
C:/Users/ユーザー名/.latexmkrc# from https://qiita.com/batora/items/092360281e12ad828175#latexmkrc%E3%81%AE%E4%BD%9C%E6%88%90 #!/usr/bin/env perl # LaTeX $latex = 'platex %O %S'; $max_repeat = 5; # BibTeX $bibtex = 'pbibtex %O %S'; $biber = 'biber --bblencoding=utf8 -u -U --output_safechars %O %S'; # index $makeindex = 'mendex %O -o %D %S'; # DVI / PDF $dvipdf = 'dvipdfmx %O -o %D %S'; $pdf_mode = 3; # preview $pvc_view_file_via_temporary = 0; if ($^O eq 'linux') { $dvi_previewer = "xdg-open %S"; $pdf_previewer = "xdg-open %S"; } elsif ($^O eq 'darwin') { $dvi_previewer = "open %S"; $pdf_previewer = "open %S"; } else { $dvi_previewer = "start %S"; $pdf_previewer = "start %S"; } # clean up $clean_full_ext = "%R.synctex.gz"
LaTeX Workshopの設定(Settings.json)
さっきの.latexmkrc
は結局不要だったので、ここからが本題です。LaTeX文書をコンパイルするときのコマンドなどを設定します。
VSCodeを開いた(カレントウインドウにした)状態で、キーボードでCtrl + Shift + P
を同時押しして、コマンドパレットを開いてください。そして、出てくる検索窓に「Settings.json
」と入力し、「基本設定: ユーザー設定を開く(JSON)
」を選んで実行してください。
文字で表記された設定ファイルが出てきます。これに色々と書き加えていきます。以下をコピペしてください。なお、LaTeX Workshop以外の設定もここに書き込まれるため、{}などの位置がおかしくなりやすいのでお気をつけて。
{
// ビルドのレシピ
"latex-workshop.latex.recipes": [
{
"name": "lualatex",
"tools": [
// 2回ビルドすることで図表番号を出力できるように
"lualatexmk",
"lualatexmk"
]
}
],
// 生成ファイルを現在のディレクトリに吐き出す
"latex-workshop.latex.outDir": "",
// ビルドのレシピに使われるパーツ
"latex-workshop.latex.tools": [
{
"name": "lualatexmk",
"command": "lualatex",
"args": [
"--cmdx",
"-file-line-error",
"-synctex=1",
"-interaction=nonstopmode",
"-halt-on-error",
"-output-directory=%OUTDIR%",
"%DOC%"
],
"env": {}
},
],
"latex-workshop.view.pdf.external.synctex.args": [
"-forward-search",
"%TEX%",
"%LINE%",
"-reuse-instance",
"-inverse-search",
"code.cmd -r -g \"%f:%l\"",
"%PDF%"
],
// LaTeX文書のビルド時にファイルを消す
"latex-workshop.latex.autoClean.run": "onBuilt",
// LaTeX文書のビルド時に消すファイルの指定
"latex-workshop.latex.clean.fileTypes": [
"*.aux",
"*.bbl",
"*.blg",
"*.idx",
"*.ind",
"*.lof",
"*.lot",
"*.out",
"*.toc",
"*.acn",
"*.acr",
"*.alg",
"*.glg",
"*.glo",
"*.gls",
"*.ist",
"*.fls",
"*.log",
"*.fdb_latexmk",
"*.snm",
"*.nav",
"*.dvi",
"*.synctex.gz"
],
"workbench.editor.enablePreview": false,
"editor.formatOnSave": true,
"[latex]": {
// 保存時に自動でフォーマットする
"editor.formatOnSave": true,
"editor.defaultFormatter": "James-Yu.latex-workshop",
// スニペット補完中にも補完を使えるようにする
"editor.suggest.snippetsPreventQuickSuggestions": false,
// インデント幅を4にする
"editor.tabSize": 4
},
"latex-workshop.formatting.latexindent.path": "latexindent",
"latex-workshop.formatting.latexindent.args": [
"%TMPFILE%",
"-c=%DIR%/",
"-y=defaultIndent: '%INDENT%'"
],
"workbench.editorAssociations": {
"*.pdf": "latex-workshop-pdf-hook"
},
// タブでPDFビューアを開く
"latex-workshop.view.pdf.viewer": "tab",
// 保存したら自動でビルドする
"latex-workshop.latex.autoBuild.run": "onSave",
"editor.minimap.enabled": true,
"latex-workshop.latex.recipe.default": "lualatex",
}
テスト
以下のようなファイルを適当な場所に作成し、VSCodeで編集して、保存して、ビルドされるかどうか、正常に終わるかどうか確認してみましょう。できればひとまずOKです。
\documentclass{ltjsarticle}
\usepackage{luatexja}
\begin{document}
\section{Lua\TeX のテスト}
あーあーあー、テストテスト
髙橋さんとか旧字体も出ていますか??
\subsection{テスト}
あーあーあー
\end{document}
スニペットの追加
さあ使おうと思っても、パッケージなんかの追加がダルいのがLaTeXです。というわけで、そういったものをあらかじめまとめておいて、楽に書き始められるようにしておきましょう。こればかりは個人差が大きいので、各自で作ってもらうことになりますが、私のサンプルを置いておきます。なお、書いていながら全ての機能を使っているわけではないので、潜在的なバグが存在する可能性があります。
これは、VSCodeの歯車マークから開けるスニペット
で、latex.json
に書き込みます。なお、既に英語でLaTeX Workshopのスニペットがあるかもしれませんが、全て消してしまってよいです。
{
"report-lualatex": {
// prefixのキーに対応する値がスニペットの出現するトリガーになるので、使いやすいprefixに変える
"prefix": "luareport",
"body": [
"\\documentclass[a4paper, 11pt]{ltjsarticle}",
"\\usepackage[margin=25mm,bottom=25mm]{geometry}",
"\\usepackage{graphicx}",
"\\usepackage{amsmath}",
"\\usepackage{enumerate}",
"\\usepackage{amssymb}",
"\\usepackage{caption}",
"",
"\\usepackage{siunitx}",
"\\usepackage{listings}",
"\\usepackage{xcolor}",
"\\usepackage{url}",
"\\usepackage{here}",
"\\usepackage{multicol}",
"\\usepackage{multirow}",
"\\usepackage{enumitem}",
"\\usepackage{wrapfig}",
"\\usepackage[nobreak]{cite}",
"\\captionsetup[figure]{labelsep=quad}",
"\\captionsetup[table]{labelsep=quad}",
"",
"\\newcommand{\\bhline}[1]{\\noalign{\\hrule height #1}} % 特定の横罫線だけ太くする",
"% \\bhline{1pt} みたいにして使う",
"",
"\\usepackage{luatexja-fontspec}",
"\\setmainfont[",
" Ligatures=TeX,",
"]{Times New Roman}",
"\\setmainjfont[",
" YokoFeatures={JFM=prop},",
" CharacterWidth=Proportional,",
" Kerning=On,",
"]{IPAPMincho}",
"",
"\\renewcommand{\\lstlistingname}{ソースコード}",
"\\lstset{",
" basicstyle = \ttfamily,",
" columns = fixed,",
" basewidth = .5em,",
" numbers = left,",
" numberstyle = \\small,",
" frame = tb,",
" % 色",
" commentstyle=\\color{green!30!darkgray},",
" keywordstyle=\\color{blue},",
" stringstyle=\\color{violet!60!gray},",
"}",
"",
"%ここからhyperrefパッケージ関連",
"% dvipdfmxは日本語のときのみ書く",
"\\usepackage[luatex,pdfencoding=auto]{hyperref}",
"% \\usepackage{pxjahyper} % (u)pLaTeXのときのみ書く",
"\\hypersetup{%",
" setpagesize=false,%",
" bookmarksdepth=tocdepth,%",
" bookmarksnumbered=true,%",
" colorlinks=true,%",
" urlcolor=blue,%URLの文字色設定",
" pdftitle={},%",
" pdfsubject={},%",
" pdfauthor={},%",
" pdfkeywords={}",
"}",
"",
"%\\title{タイトル}",
"%\\author{なまえ\\thanks{学校名 学科 年 番}}",
"%\\date{2024/01/00}",
"\\begin{document}",
"\\maketitle",
"\\section{章}",
"\\end{document}",
]
},
"luafigure": {
"prefix": "luafigure",
"body": [
"\\begin{figure}[H]",
" \\centering",
" \\includegraphics[width=0.5\\columnwidth]{}",
" \\caption{}",
" \\label{fig:}",
"\\end{figure}",
]
},
"luatable": {
"prefix": "luatable",
"body": [
"\\begin{table}[H]",
" \\centering",
" \\includegraphics[width=0.5\\columnwidth]{}",
" \\caption{}",
" \\label{table:}",
"\\end{table}",
]
},
"bibliography": {
"prefix": "thebibliography",
"body": [
"\\begin{thebibliography}{9}",
"\\bibitem{source1}{タイトル}\\newline",
"\\url{https://...}\\newline",
"202//(曜日)閲覧\\newline",
"\\end{thebibliography}",
]
},
"addbibliography": {
"prefix": "addbibliography",
"body": [
"\\bibitem{source2}{タイトル}\\newline",
"\\url{https://...}\\newline",
"2024/01/00(曜日)閲覧\\newline",
]
},
"addlibbibliography": {
"prefix": "addlibbibliography",
"body": [
"\\bibitem{source3}{著者名}、{書籍名}、{出版社}、{発行年月日}\\newline",
]
}
}
スニペットを使うには、LaTeXファイルを編集中に、”prefix”での文字列を打つとサジェストが出てくるので、それをTabキーなどで選択すればよいです。
つまづいたポイント
既にコメントでも書いていますが、Settings.json
でビルドコマンドを設定する際、どうやっても図表番号が??になったまま直らず困っていました。図表番号は2回以上ビルドして初めて出力されることを思い出し、2回ビルドする設定にしたことで直りました。ビルドにかかる時間は倍になるのですが、うまく動いたのでこれで満足しています。
まとめ
既にplatexで環境構築をした経験がある私からすると、.latexmkrc
が不要というだけでかなり便利だと思いました。UTF-8の文字が使えるのは楽でいいですし、更に楽にレポートが書けそうです(ほんまか?)。
ただ若干ビルドにかかる時間は長くなった気がします。便利だからいいんですけども…