12
14

なるべくデフォルトのまま使いたい人へ

Last updated at Posted at 2022-05-14

なるべくデフォルトのまま使いたい人へ

LaTeX Workshop を “なるべくデフォルトのまま” 日本語の文書を作成できる構成に変更したい。

LaTeX Workshop | James Yu
投稿時; ver.8.26.0(2022/05 現在)、最終更新時; ver.9.19.1

設定には JSON の編集が伴うため、settings.json や keybindings.json の編集について分からない場合には # この節 を参考にしてください。

この記事のモチベーション

以下の 2 つのツイートを見つけました。

であれば「なるべくデフォルトの設定のまま構成してみよう!」と言うのがこの記事のモチベーションです。

★ 概要

以下の設定を必要なタイプセット方法に変更すれば良いです。したがって、settings.json に以下の設定を追加します。

// settings.json
  "latex-workshop.latex.recipe.default": "first"
//                                          ↑ この値を変更するだけ

# latex-workshop.latex.recipe.default - Compile - James-Yu/LaTeX-Workshop Wiki

タイプセット方法
(u)pLaTeX "latexmk (latexmkrc)"
.latexmkrc 要作成)
LuaLaTeX "latexmk (lualatex)"

※ recipes を変更している場合には、これらの値を利用できない場合があります。変更している場合には、構成した recipe 名を指定することが出来ます。

■ デフォルトで設定されているタイプセット方法

デフォルトで設定されているタイプセット方法は大きく分けて 2 つがあります。

  • デフォルトで利用可能なタイプセット方法 9 つ
  • 構成によって指定可能なタイプセット方法 2 つ(※印のもの)

より詳細は以下の表。

デフォルトのタイプセット方法 実行されるコマンド
"latexmk" latexmk から pdfLaTeX を実行
"latexmk (latexmkrc)" .latexmkrc ファイルを利用したタイプセット
"latexmk (lualatex)" latexmk から LuaLaTeX を実行
"latexmk (xelatex)" latexmk から XeLaTeX を実行
"pdflatex -> bibtex -> pdflatex * 2" pdfLaTeX を実行 → BibTeX を実行 → pdfLaTeX を 2 回を実行
"Compile Rnw files" Rscript から knitr を実行 → latexmk から pdfLaTeX を実行
"Compile Jnw files" Weave.jl を実行 → latexmk から pdfLaTeX を実行
"Compile Pnw files" Pweave を実行 → latexmk から pdfLaTeX を実行
"tectonic" Tectonic を利用してタイプセットする
"first" recipe の先頭を実行
(デフォルトでは最上の "latexmk" が実行される)
"lastUsed" 最後に実行されたレシピを実行

Rnw・Jnw・Pnw はそれぞれ R・Julia・Python のコードチャンクが含まれた LaTeX ファイルです。これら Rnw や Jnw に関しては、以下を参照してください。

# Literate programming support using LaTeX - ExtraFeatures - James-Yu/LaTeX-Workshop Wiki

【確認用】デフォルトの tools と recipes(折りたたみ)

多くの記事は、以下の tools と recipes の構成を上書きすることで、必要なタイプセットを実行するようにしています。これらを変更した場合でも、※印の方法は指定することが出来ます。

以下の構成は 9.10 時点での設定です。これはコピペすることなくデフォルトで利用することが出来ます。

    "latex-workshop.latex.tools": [
      {
        "name": "latexmk",
        "command": "latexmk",
        "args": [
          "-synctex=1",
          "-interaction=nonstopmode",
          "-file-line-error",
          "-pdf",
          "-outdir=%OUTDIR%",
          "%DOC%"
        ],
        "env": {}
      },
      {
        "name": "lualatexmk",
        "command": "latexmk",
        "args": [
          "-synctex=1",
          "-interaction=nonstopmode",
          "-file-line-error",
          "-lualatex",
          "-outdir=%OUTDIR%",
          "%DOC%"
        ],
        "env": {}
      },
      {
        "name": "xelatexmk",
        "command": "latexmk",
        "args": [
          "-synctex=1",
          "-interaction=nonstopmode",
          "-file-line-error",
          "-xelatex",
          "-outdir=%OUTDIR%",
          "%DOC%"
        ],
        "env": {}
      },
      {
        "name": "latexmk_rconly",
        "command": "latexmk",
        "args": [
          "%DOC%"
        ],
        "env": {}
      },
      {
        "name": "pdflatex",
        "command": "pdflatex",
        "args": [
          "-synctex=1",
          "-interaction=nonstopmode",
          "-file-line-error",
          "%DOC%"
        ],
        "env": {}
      },
      {
        "name": "bibtex",
        "command": "bibtex",
        "args": [
          "%DOCFILE%"
        ],
        "env": {}
      },
      {
        "name": "rnw2tex",
        "command": "Rscript",
        "args": [
          "-e",
          "knitr::opts_knit$set(concordance = TRUE); knitr::knit('%DOCFILE_EXT%')"
        ],
        "env": {}
      },
      {
        "name": "jnw2tex",
        "command": "julia",
        "args": [
          "-e",
          "using Weave; weave(\"%DOC_EXT%\", doctype=\"tex\")"
        ],
        "env": {}
      },
      {
        "name": "jnw2texminted",
        "command": "julia",
        "args": [
          "-e",
          "using Weave; weave(\"%DOC_EXT%\", doctype=\"texminted\")"
        ],
        "env": {}
      },
      {
        "name": "pnw2tex",
        "command": "pweave",
        "args": [
          "-f",
          "tex",
          "%DOC_EXT%"
        ],
        "env": {}
      },
      {
        "name": "pnw2texminted",
        "command": "pweave",
        "args": [
          "-f",
          "texminted",
          "%DOC_EXT%"
        ],
        "env": {}
      },
      {
        "name": "tectonic",
        "command": "tectonic",
        "args": [
          "--synctex",
          "--keep-logs",
          "%DOC%.tex"
        ],
        "env": {}
      }
    ],
    "latex-workshop.latex.recipes": [
      {
        "name": "latexmk",
        "tools": [
          "latexmk"
        ]
      },
      {
        "name": "latexmk (latexmkrc)",
        "tools": [
          "latexmk_rconly"
        ]
      },
      {
        "name": "latexmk (lualatex)",
        "tools": [
          "lualatexmk"
        ]
      },
      {
        "name": "latexmk (xelatex)",
        "tools": [
          "xelatexmk"
        ]
      },
      {
        "name": "pdflatex -> bibtex -> pdflatex * 2",
        "tools": [
          "pdflatex",
          "bibtex",
          "pdflatex",
          "pdflatex"
        ]
      },
      {
        "name": "Compile Rnw files",
        "tools": [
          "rnw2tex",
          "latexmk"
        ]
      },
      {
        "name": "Compile Jnw files",
        "tools": [
          "jnw2tex",
          "latexmk"
        ]
      },
      {
        "name": "Compile Pnw files",
        "tools": [
          "pnw2tex",
          "latexmk"
        ]
      },
      {
        "name": "tectonic",
        "tools": [
          "tectonic"
        ]
      }
    ],

■ 特定のタイプセット方法を利用する

デフォルトで指定できるタイプセット方法は、特別な 2 つの方法と recipe で構成された 9 つの方法の計 11 の方法です。

"first", "lastUsed", "latexmk", "latexmk (latexmkrc)", "latexmk (lualatex)", "latexmk (xelatex)", "pdflatex -> bibtex -> pdflatex * 2", "Compile Rnw files", "Compile Jnw files", "Compile Pnw files", "tectonic"

デフォルトでは "first" が指定されており、latexmk を利用して pdfLaTeX が実行されるようになっています。LaTeX で日本語文書を作成するには、(u)pLaTeX か LuaLaTeX を利用する必要があるため、これを変更する必要があります。

これを変更するには、以下の設定を変更する。

// settings.json
  "latex-workshop.latex.recipe.default": "first"

▽ LuaLaTeX の場合

latexmk を利用して LuaLaTeX を実行すれば良いので、settings.json に以下の設定を追加します。

// settings.json
  "latex-workshop.latex.recipe.default": "latexmk (lualatex)"

▽ (u)pLaTeX の場合

(u)pLaTeX を利用する方法はデフォルトで提供されていません。しかし、.latexmkrc を作成することで対応することが出来ます。

このため、settings.json に以下の設定を追加します。

// settings.json
  "latex-workshop.latex.recipe.default": "latexmk (latexmkrc)"

ホームディレクトリか LaTeX ファイルのあるカレントディレクトリに .latexmkrc を作成し設置します。

  • pLaTeX を利用する場合の .latexmkrc の例
    #!/usr/bin/env perl
        $latex = 'platex %O -kanji=utf8 -no-guess-input-enc -synctex=1 -interaction=nonstopmode %S';
        $dvipdf = 'dvipdfmx %O -o %D %S';
        $pdf_mode = 3;
    
  • upLaTeX を利用する場合の .latexmkrc の例
    #!/usr/bin/env perl
        $latex = 'uplatex %O -kanji=utf8 -no-guess-input-enc -synctex=1 -interaction=nonstopmode %S';
        $dvipdf = 'dvipdfmx %O -o %D %S';
        $pdf_mode = 3;
    

ちなみに、記事のコンセプトとは異なりますが、tools と recipes に (u)pLaTeX を追加することでも対応できます。これは .latexmkrc を作りたくない人向けです。

latexmk を使った (u)pLaTeX のための settings.json の構成(折りたたみ)

例えば、latex-workshop.latex.tools でデフォルトの記述に続いて以下のように記述します。(これは .latexmkrc における $latex-latex= 以下に、$dvipdf$pdf_mode-e 以下に追加しているだけです)

  // "latex-workshop.latex.tools": [
    //
    // ここまではデフォルトの構成が記述されている
    {
      "name": "platexmk",
      "command": "latexmk",
      "args": [
        "-synctex=1",
        "-interaction=nonstopmode",
        "-file-line-error",
        "-latex=\"platex -kanji=utf8\"",
        "-e",
        "\"$dvipdf = 'dvipdfmx %O -o %D %S'; $pdf_mode = 3\"",
        "-outdir=%OUTDIR%",
        "%DOC%"
      ],
      "env": {}
    },
    {
      "name": "uplatexmk",
      "command": "latexmk",
      "args": [
        "-synctex=1",
        "-interaction=nonstopmode",
        "-file-line-error",
        "-latex=\"uplatex -kanji=utf8\"",
        "-e",
        "\"$dvipdf = 'dvipdfmx %O -o %D %S'; $pdf_mode = 3\"",
        "-outdir=%OUTDIR%",
        "%DOC%"
      ],
      "env": {}
    },
  // ]

tools で platexmkuplatexmk が構成できたので、latex-workshop.latex.recipes で以下のように記述します。

  // "latex-workshop.latex.recipes": [
    //
    // ここまではデフォルトの構成が記述されている
    {
      "name": "platex (latexmk)",
      "tools": [
        "platexmk"
      ]
    },
    {
      "name": "uplatex (latexmk)",
      "tools": [
        "uplatexmk"
      ]
    },
  // ]

■ BibTeX や biber を利用したい

BibTeX や biber を利用して参考文献リストを作成したい場合も、デフォルトでは提供されていません。.latexmkrc を作成することで対応します。また、索引を作成するために (up)mendex を利用したい場合にも同様に .latexmkrc を作成する必要があります。

したがって、settings.json に以下の設定を追加すれば良い。

// settings.json
  "latex-workshop.latex.recipe.default": "latexmk (latexmkrc)"

ここでは latexmk についての知識が必要になるため、各自調べてください。latexmk については、以下の記事や公式ドキュメントを参照してください。

その他にも .latexmkrc に関して適切に作成・編集することでさまざまなタイプセット方法に対応することが出来ます。

■ その他の設定

デフォルトではどのように設定されているか列挙しておきます。各項目には公式 Wiki の該当箇所を参照しています。

  • LaTeX ファイルに関連するファイルの変更が検知されたら自動的にタイプセットされる [↗]
  • 中間ファイルは LaTeX ファイルと同じディレクトリに生成する [↗]
  • 中間ファイルを削除しない [↗]
  • 更新された PDF を 1 ページ目から表示 [↗]

この他にもさまざまな設定があります。公式 Wiki や構築記事を参照すると良いでしょう。

▽ 文書エディタとしての設定

VSCode は日本語などのプログラミング以外の自然言語の編集に関してデフォルトで対応しません。そのため、いくつかの設定から日本語が編集しやすいように調整する必要があります。また、LaTeX を編集する上でいくつか構成しておくと良い設定があります。

多くの場合、LaTeX のみで設定したいため、次のように "[latex]": {...} で囲って設定すると良いでしょう。

// settings.json
  "[latex]": {
    // Some settings
  }

これらの設定は以下の記事を参照すると良いでしょう。

# LaTeX エディタとしての設定 - LaTeX Workshop を使いこなす - Qiita

ここでの設定は LaTeX Workshop とは関係がなく、VSCode から提供されている設定となっています。

▽ キーボードショートカットの追加

2 つのキーボードショートカットを追加しておくと良いでしょう。

  • タイプセットを強制的に停止させる:
      ↳ Ctrl+Alt+K (Cmd+Alt+K)
  • 詳細なログを表示させる:
      ↳ Ctrl+Shift+U (Shift+Cmd+U)
  • 他のタイプセット方法を選択する:
      ↳ Ctrl+Alt+T (Cmd+Alt+T)
keybindings.json(折りたたみ)

Windows、Linux の場合:

// keybindings.json
[
    {
        "key": "ctrl+alt+k",
        "command": "latex-workshop.kill",
        "when": "editorLangId == latex",
    },
    {
        "key": "ctrl+shift+u",
        "command": "latex-workshop.compilerlog",
        "when": "workbench.panel.output.active && editorLangId == latex",
    },
    {
        "key": "ctrl+alt+t",
        "command": "latex-workshop.recipes",
        "when": "editorLangId == latex",
    },
]

macOS の場合:

// keybindings.json
[
    {
        "key": "cmd+alt+k",
        "command": "latex-workshop.kill",
        "when": "editorLangId == latex",
    },
    {
        "key": "shift+cmd+u",
        "command": "latex-workshop.compilerlog",
        "when": "workbench.panel.output.active && editorLangId == latex",
    },
    {
        "key": "cmd+alt+t",
        "command": "latex-workshop.recipes",
        "when": "editorLangId == latex",
    },
]

■ 実際に使う

ざっくり使い方を紹介します。

  1. LaTeX ファイルを作成する
    % sample.tex
    \documentclass{jlreq}
    \begin{document}
    初めまして、\LaTeX{}!!
    \end{document}
    
  2. Ctrl+Alt+B (Cmd+Alt+B) を押下
  3. PDF が作成されたら Ctrl+Alt+V (Cmd+Alt+V) を押下
  4. Ctrl+Alt+J (Cmd+Alt+J) を押下すると、カーソルのある位置の PDF 上にジャンプ(SyncTeX による Forward search)

エラーが発見された場合には、ポップアップが右下に表示される。エラーの詳細は、Ctrl+Shift+M (Shift+Cmd+M) を押下することで一覧を見ることが出来ます。

エラーの見方については以下の記事を参照してください。

ちなみに、ポップアップに spawn latexmk ENOENT が表示された場合には、latexmk が利用できない環境にあります。“latexmk がインストールされているか” や “パスが上手く設定されているか” を確認する必要があります。

参考

まとめ

このような構築方法では、タイプセット方法を変更したいほとんどの場合、.latexmkrc ファイルを編集するだけで済むようになります。

さまざまな構築記事が乱立する中で、tools と recipes を再考せずに構築しているものは確認できませんでした。なるべくデフォルトのまま構成することで、混乱が減れば良いですね。

また、latexmk が使いづらく感じた場合には、llmkClutTeX を利用するなど、他のビルドツールに乗り換えても良いでしょう。
この際には tools と recipes を編集する必要があります。

settings.json と keybindings.json の編集

Default ではない ことに注意してください。

  1. Ctrl+Shift+P (Shift+Cmd+P) からコマンドパレットを開く
    • uset” と打ち Preferences: Open User settings (JSON) を選択すると settings.json が開く
    • okey” と打ち Preferences: Open Keyboard Shortcuts (JSON) を選択を選択すると keybindings.json が開く
  2. 必要な設定を追加・保存

これらのファイルは JSON のため、フォーマットを守る必要がある。しかしながら、実体は JSONC であり、コメントを付記することが出来ます。

編集中に左下の :x::warning: に数字がある場合、JSON ファイルにエラーや警告が含まれています。このままでは適切な設定が出来ていません。Ctrl+Shift+M (Shift+Cmd+M) からエラーや警告の内容を確認すると良いでしょう。

.latexmkrc のファイルタイプ指定

.latexmkrc は拡張子が指定されないため、シンタックスハイライトが上手くかからないことがあります。.latexmkrc は Perl のシンタックスハイライトが加わると編集する際に少しだけ楽になります。

以下の設定を追加すると .latexmkrc に Perl のシンタックスハイライトが加わるようになります。

  "files.associations": {
    ".latexmkrc": "perl",
  },

追記

  • 2022/07/12: キーバインドの表示を macOS にも対応。
  • 2022/08/20: 軽微修正。
  • 2022/09/09: .latexmkrc のファイルタイプの指定方法を追記。
  • 2023/05/16: 最新の 9.10 に更新。
  • 2024/03/27: キーボードショートカットを追加。
  • 2024/03/28: (u)pLaTeX に関する tools と recipes への追加に関する記述を追加。
12
14
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
12
14