LoginSignup
22
18

More than 1 year has passed since last update.

LaTeX Workshop をもう少し使いこなす

Last updated at Posted at 2020-11-27

LaTeX Workshop をもう少し使いこなす

LaTeX Workshop | James Yu
投稿時; ver.8.13.2(2020/11 現在)、最終更新時; ver.8.28.0

本記事では LaTeX Workshop をもう少し使いこなせるようになりたい。
スニペットやコマンドをいくつか紹介しておく。

以下の 5 つの項目とその分枝で構成した。

本記事ではこれらの機能が VSCode からデフォルトで提供されているものと LaTeX Workshop から提供されているものが混在している。場合によっては注意が必要になる。

○ スニペット

スニペットを紹介しておきたい。これらは LaTeX Workshop から提供されているデフォルトのもののみに留めている。知っておいた方がすべて打ち込むよりも平易で楽になるだろう。

公式 Wiki に詳細に記載されていないので省略しているが、TikZ に関するスニペットもある。スニペットパネルから閲覧することが出来る。

■ ギリシャ文字や数学記号

ギリシャ文字、括弧や \frac 等の数学記号、フォントコマンド等が提供されている。

以下の Gif では @a\alpha, @/\frac, @I\int を出力する様子となっている。

greek frac int

cf. https://github.com/James-Yu/LaTeX-Workshop/raw/master/demo_media/greek%20letter.gif
cf. https://github.com/James-Yu/LaTeX-Workshop/raw/master/demo_media/frac.gif
cf. https://github.com/James-Yu/LaTeX-Workshop/raw/master/demo_media/int.gif

これらのスニペットに関しては、ここですべてを書き起こすよりも公式 Wiki を見た方が良いだろう。(すべて書き下すのが面倒というのもある)

Snippets # Inserting greek letters | James-Yu / LaTeX-Workshop Wiki - GitHub

また、これらのスニペットを覚えていなくても、スニペット一覧パネルから打つことも可能。

■ 章立て

S**+Tab とすることで \section{} 等を生成することが出来る。

スニペット 章立て
SPA part
SCH chapter
SSE section
SSS subsection
SS2 subsubsection
SPG paragraph
SSP subparagraph

たまにしか使わないが、ちょっと覚えていれば少しだけ楽かもしれない。

■ 環境

公式ドキュメントでは以下の折りたたみのようなスニペットが紹介されている。が、すこし足りないような気もする。

bse

cf. https://github.com/James-Yu/LaTeX-Workshop/raw/master/demo_media/BSAL%20snippet.gif

デフォルトスニペット(折りたたみ)

いくつかの環境のスニペットは定義されている。
数式環境では B*** 付き数式環境の BS** が用意されている。

スニペット 数式環境 スニペット * 付き数式環境
BEQ equation BSEQ equation*
BAL align BSAL align*
BGA gather BSGA gather*
BMU multline BSMU multline*
BSPL split - -
BCAS cases - -

これ以外にも itemize 環境や enumerate 環境等のスニペットも提供されている。

スニペット その他環境
BIT itemize
BEN enumerate
BFR frame
BFI figure

実は、equation 環境を \equation としても \begin{equation}~\end{equation} を出すことが出来る。
どの環境までをサポートしているのか分からなかったが、ある程度はこのようにすることでもスニペットとして機能する。

あるいは、以下のような編集も可能になっている。

  1. 文字列を選択して上から \equation と打ち込む

    environment

    cf. https://github.com/James-Yu/LaTeX-Workshop/raw/master/demo_media/surround-envname.gif

  2. 文字列を選択して上から \begin と打ち込み、\begin\end にマルチカーソルが置かれるので、そこに equation を打ち込む

    environment

    cf. https://github.com/James-Yu/LaTeX-Workshop/raw/master/demo_media/surround-beginend.gif

2 つ目の方法はデフォルトのスニペットに関わらず環境名を打ち込むことが出来るため少しだけ汎用性が高いと思われる。

○ 編集コマンド

スニペットの他にもコマンドやキーボードショートカットを利用することで編集が楽になる。特に、デフォルトでスニペットが使用できないような環境の場合には、ここで紹介するコマンドを使用することで容易になるだろう。

今回は簡単にするため、ショートカットとして keybindings.json に登録しておきたい。

環境まわりの keybindings(折りたたみ)

以下で紹介している環境まわりのキーボードショートカットをまとめておく。

  {
      "key": "ctrl+alt+e",
      "command": "latex-workshop.close-env",
      "when": "editorLangId == latex",
  },
  {
      "key": "ctrl+alt+w",
      "command": "latex-workshop.wrap-env",
      "when": "editorLangId == latex",
  },
  {
      "key": "alt+s",
      "command": "latex-workshop.select-envname",
      "when": "editorLangId == latex",
  },

■ 章立て / 括弧で囲う

章立てコマンドや括弧等で選択した文字列を囲いたい。
このような際には latex-workshop.surround コマンドを使おう。このコマンドはデフォルトで Ctrl+L, Ctrl+W で定義されている。

surround

cf. https://github.com/James-Yu/LaTeX-Workshop/raw/master/demo_media/wrap.gif

文字列を選択して Ctrl+L, Ctrl+W を押下するとコマンドパレットが表示される。ここに section と打って Enter すれば \section で囲われる。
あるいは、leftright とすれば、\left( \right) で囲われる。

どのコマンドまでサポートされているのか明瞭ではなかったが、無くて困ることはない程度にはサポートされている。

2 回キーを押下する必要があることとキーそのものを覚えている必要がある等を思うと少し面倒。そのため、文字列を選択してその上から section と打ってしまっても同じ結果を得る。

alt surround

cf. https://github.com/James-Yu/LaTeX-Workshop/raw/master/demo_media/wrap2.gif

■ 全体の章立てを変更する

ドキュメント全体の章立てを section から chapter に 1 つ上げるなどの操作を 1 回の操作で可能になる。

Keybindings Description
Ctrl+Alt+[ 全体の章立てを一つ上げる
Ctrl+Alt+] 全体の章立てを一つ下げる

■ 環境で囲う

latex-workshop.wrap-env コマンドから行う。
選択した部分を \begin{}\end{} で囲うことが出来る。{} 内には一気に環境名を打つことが出来ておもしろい。

wrap environment

cf. https://github.com/James-Yu/LaTeX-Workshop/raw/master/demo_media/surround-env.gif

これを新たなショートカットキーとして定義しておいても良いだろう。

  {
      "key": "ctrl+alt+w",
      "command": "latex-workshop.wrap-env",
      "when": "editorLangId == latex",
  },

これまで数式環境を打ってから数式を作成していたけれども、数式を作成してから環境で囲っても簡単に生成することが出来る。

■ 環境を閉じる

基本的な環境は BEQ などとすれば \begin から \end まで自動的に出してくれるが、自作環境ではこのようにすることが出来ない。

自動的に環境を閉じる (\begin{hogehoge} に対して \end{hogehoge} を自動的に生成する) ショートカットキーを作成しておく。
これには "~.close-env" コマンドのショートカットキーを定義しておけば良い。

  {
      "key": "ctrl+alt+e",
      "command": "latex-workshop.close-env",
      "when": "editorLangId == latex",
  },

Ctrl+Alt+E を押下することで自動的に環境を閉じることが出来る。

■ 環境名を変更する

latex-workshop.select-envname コマンドを利用する。
すでにある環境名を書き変えることが出来る。~.wrap-env と同様に一気に環境名を変更することが出来る。

カーソルを \end{.. の部分に合わせてコマンドを実行すると \begin\end の括弧内にマルチカーソルが置かれる。
これもショートカットキーを設定しておくと簡単だろう。

  {
      "key": "alt+s",
      "command": "latex-workshop.select-envname",
      "when": "editorLangId == latex",
  },

■ 自作スニペットのキーボードショートカット

自作スニペットをキーボードショートカットから呼び出すようにしてみたい。また、このショートカットによって選択した文字を囲うように作成したい。1

以下の公式を参照すると良いだろう。

# Snippet syntax - Snippets in Visual Studio Code

基本構文は以下のようになっている。

  {
  // 1st basic syntax
    "key": "<keybindings>",
    "command": "editor.action.insertSnippet",
    "args": {
      "snippet": "<snippet>"
    },
    "when": "editorLangId == latex",
  },
  {
  // 2nd basic syntax
    "key": "<keybindings>",
    "command": "editor.action.insertSnippet",
    "args": {//
      "langId": "latex",
      "name": "<snippet_name>",
    },
    "when": "editorLangId == latex",
  },

1 つ目の構文には "args""snippet" を直接挿入している。2 つ目の構文には "args""langId""name" が含まれている。"langId""latex" としておくことで Snippets の latex.json を呼び出している。また、"name" ではスニペット名を挿入することで特定のスニペットをキーボードショートカットから呼ぶことが出来る。

以下では、具体例として行内数式とベクトルのスニペットショートカットを紹介しておきたい。同じようにして、スニペットとして登録していたものをショートカットに切り替えても良いだろう。

§ 行内数式

$ で囲うだけだが、これをキーボードショートカットから呼び出せるようにしてみたい。

  {
      "key": "ctrl+alt+m",
      "command": "editor.action.insertSnippet",
      "args":{
          "snippet": "\\$ ${1:TM_SELECTED_TEXT} \\$$0",
          // "snippet": "\\( ${1:TM_SELECTED_TEXT} \\)$0",
      },
      "when": "editorLangId == latex",
  },

本文に生成される $\\$ となっている。

$TM_SELECTED_TEXT によって選択された文字を入れられるようにしている。文字列を選択して Ctrl+Alt+M すれば $ hogehoge $ とすることが出来る。

§ ベクトル

同様にしてベクトルにもキーボードショートカットを作成しておこう。

ここでは、ベクトルは \vect として LaTeX で定義しているものとする。

  {
      "key": "ctrl+b",
      "command": "editor.action.insertSnippet",
      "args":{
          "snippet": "\\vect{${1:TM_SELECTED_TEXT}}$0",
      },
      "when": "editorLangId == latex",
  },
こんなのも作ってみた(折りたたみ)

align 環境等で &=, \\ を打つのがちょっと面倒くさいので、Ctrl+-, Ctrl+\ で打てるようにしておこうと。

  {
      "key":"ctrl+-",
      "command":"editor.action.insertSnippet",
      "args":{
          "snippet": "& = ",
      },
      "when": "editorLangId == latex",
  },
  {
      "key":"ctrl+\\",
      "command":"editor.action.insertSnippet",
      "args":{
          "snippet": "  \\\\\\\n",
      },
      "when": "editorLangId == latex",
  },

どうせなら、\\ もスニペットとしておいてトグル操作できると楽なのになぁと思うが難しそうだ。

使用頻度の高いスニペットであればショートカットにしておいて良いだろうが、使用頻度の低いスニペットは snippets に登録しておこう。(注意喚起)

■ 文書を折りたたむ

VSCode ではコマンドパレットから Fold All などとすると \chapter などのアウトラインや任意の環境を折りたたんで中身を非表示にすることが出来る。これは、非常に長いドキュメントを編集している際には非常に楽になる機能となっている。

VSCode の設定で以下のようにしておくと良いだろう。行番号の右側に常に > が表示されるようになる。

  "editor.folding": true,
  "editor.showFoldingControls": "always",

任意の範囲を折りたたみたい場合には以下のようにすると良い。この折りたみの機能はコメントアウトを無視して実行されるため、以下のようにしていても折りたたむことが出来る。

ここは折りたたまれない
% region
  この部分は
      折りたたむことが出来る
% endregion
ここは折りたたまれない

以下の記事も少し参照されたい。

LaTeX Workshop でコード折りたたみする - Gist

もしも新しく折りたたみの要素を増やしたい場合には以下のような拡張機能を導入すると良いだろう。

zokugun.explicit-folding - VSCode Marketplace

○ タイプセットとビューワ

タイプセットとビューワに関していくつか設定を変更することでより利用しやすくなるように思われる。

■ タイプセットのショートカット

タイプセットには Ctrl+Alt+T に設定しておいて、recipe を選択して実行するように紹介していた。(# タイプセットの実行 LaTeX Workshop を使いこなす - Qiita を参照)しかし、この方法ではタイプセットするのにすこし面倒な感じがする。(3 本も指を使うのちょっと面倒だし、毎回選択するのも面倒)
そこで、すこしだけ設定を変えておきたい。

settings.json でデフォルトで Ctrl+Alt+B としていたタイプセット内容を変更しておこう。このショートカットは "~.recipe.default" によってデフォルトでは "first" となっており、レシピの初めの方法を実行するようになっている。
これを最後に使用したレシピを実行するように変更しておこう。

  "latex-workshop.latex.recipe.default": "lastUsed",

keybindings.json では、既に定義されているビルドショートカットを上書き定義しておく。

  {
  //  Resettings build shortcut: same shortcut for TeXworks.
  //  This command will execute the last recipe executed.
  //  settings "latex-workshop.recipe.default": "lastUsed" at settings.json.
      "key": "ctrl+t",
      "command": "latex-workshop.build",
      "when": "editorLangId == latex"
  },

Ctrl+T とした。これは TeXworks と同様のショートカットキーとなっている。TeXstudio 風なら "key": "f6" としておけば良いだろう。

settings.json で "~.recipe.default": "lastUsed" としているので、最後に実行したレシピを Ctrl+T で呼び出すことになっている。

もちろん、"~.recipes" のショートカットキーを Ctrl+T としても良いが、一発でタイプセットを実行できないので、今回はこのように設定している。

このように上書き定義をしていても、Ctrl+Alt+B によってビルドを実行することも出来る。

■ タブビューワを更新する

タブビューワを更新することでうま味があるのかいまだに分からないが、更新したいときには以下のようなショートカットキーを作成しておくと良い。

  {
      "key": "ctrl+alt+r",
      "command": "latex-workshop.refresh-viewer",
      "when": "editorLangId == latex",
  },

Ctrl+Alt+R とした。しかしながら、たまにビューワが更新されないこともあるので、利用価値はある。

■ ビューワを毎回指定する

ビューワは settings.json からタブか外部ビューワを指定することが出来る。この指定によって Ctrl+Alt+V からビューワを開けることが出来るようになる。

デフォルトの設定では none となっており、ビューワを指定してない。
settings.json でビューワの設定をせずに、キーボードショートカットからビューワを開けるようにしよう。

  {
      "key": "ctrl+shift+v",
      "command": "latex-workshop.tab",
      "when": "editorLangId == latex",
  },
  {
      "key": "ctrl+alt+v",
      "command": "latex-workshop.viewExternal",
      "when": "editorLangId == latex",
  },

Ctrl+Shift+V を押下することで内部ビューワのタブで開き、Ctrl+Alt+V で押下することで外部ビューワによって開くようにした。

その日の気分でビューワを変えてみては。

■ 補助ファイルの削除方法を変える

以下の記事では LaTeX Workshop で指定された補助ファイルを削除する方法を紹介した。

LaTeX Workshop を使いこなす # 補助ファイルを自動的に削除する - Qiita

ver.8.16.0 以降では、これに加えて外部ツールを利用した削除方法も追加された。外部ツールによる削除方法に変更する方法を紹介したい。
ここでの設定は以下の 3 つとなる。

Settings Value
~.latex.clean.method
  • "glob": LaTeX Workshop で指定
  • "cleanCommand": 外部ツール
~.latex.clean.command 任意の外部ツールコマンド
~.latex.clean.args 任意の外部ツールコマンドの引数

latexmk を利用して補助ファイルを削除する場合は以下のようにする。

  "latex-workshop.latex.clean.method": "cleanCommand",
  "latex-workshop.latex.clean.command": "latexmk",
  "latex-workshop.latex.clean.args": [
    "-c",
    "%TEX%"
  ]

llmk を利用して補助ファイルを削除する場合には以下のようにする。

  "latex-workshop.latex.clean.method": "cleanCommand",
  "latex-workshop.latex.clean.command": "llmk",
  "latex-workshop.latex.clean.args": [
    "-c",
    "%TEX%"
  ]

削除される補助ファイルは各々のツールに依存している。

○ Format と Lint

LaTeX でもフォーマットとリントが可能。また、LaTeX Workshop でもこれらに対応している。

LaTeX Workshop では、Formatter は latexindent を Linter は ChkTeX または LaCheck を利用することが出来る。

■ Formatter

LaTeX Workshop から設定することが出来る。latex-formatter をインストールする必要はない。

Format - James-Yu/LaTeX-Workshop Wiki

デフォルトのフォーマッタを LaTeX Workshop に設定しておく。
また、latexindent の引数を設定する。

  "[latex]": {
    "editor.formatOnSave": true,
    "editor.defaultFormatter": "James-Yu.latex-workshop",
  },
  "latex-workshop.latexindent.path": "latexindent",
  "latex-workshop.latexindent.args": [
    "%TMPFILE%",
    "-c=%DIR%/",
    "-y=defaultIndent: '%INDENT%'"
  ]

"editor.formatOnSave": true としている場合、保存時にフォーマットが実行される。無効にしたい場合は false にしておく。
また、通常のフォーマット実行は Shift+Alt+F を押下すれば良い。

もしも latexindent が実行されない場合は Ctrl+Shift+U から LaTeX Workshop のパネルを開き、エラー状況を確認する。場合によっては Perl が必要になる。(Windows では exe で提供されているので Perl を導入する必要はないはず)

latexindent そのものに関しては以下の記事を参考にしてほしい。使い方とユーザ設定の方法を紹介した。ちょっと長い。

latexindent の使い方 - Gist

あるいは公式ドキュメントを参照しても良いだろう。(こちらは英語)

latexindent.pl documentation - latexindent.pl 3.9.1 documentation

■ Linter

Lint には ChkTeX と LaCheck を利用することが出来る。これらを有効にするには、以下の設定を true にすれば良い。

  "latex-workshop.linting.chktex.enable": true,
  "latex-workshop.linting.lacheck.enable": true,

これらを実行するタイミングは ~.linting.run で指定することが出来る。以下のいずれかの値を指定する。

Value Description
"onSave"
(デフォルト)
上書き保存時
"onType" 指定された時間間隔毎
時間間隔は "~.linting.delay" で指定される(500 ミリ秒)

LaCheck はパスのみを指定でき、ChkTeX ではパスと引数を指定することが出来る。

  "latex-workshop.linting.chktex.exec.path": "chktex",
  "latex-workshop.linting.chktex.exec.args": [
      "-wall",
      "-n22",
      "-n30",
      "-e16",
      "-q"
  ],
  "latex-workshop.linting.lacheck.exec.path": "lacheck",

ChkTeX の引数はデフォルトで上のようになっているが、これらに加えて自動的にいくつかの引数が渡されるようだ。これらは Output の LaTeX Workshop から確認することが出来る。

出力形式を指定するオプションの -f が引き渡される。(-f%f:%l:%c:%d:%k:%n:%m) これらは、Lint の結果をエディタ内に引き渡すため、必要な引数になっている。また、カレントディレクトリに .chktexrc ファイルが検出されると自動的に -l オプションが有効になる。したがって、.chktexrc を使って ChkTeX の設定を変更したい場合にはカレントディレクトリにファイルを置けば良いだろう。

これらの追加的な引数は上の ~.linting.chktex.exec.args の後ろに続く形で渡される。

○ キーボードショートカット一覧

これまでの記事と上のショートカットキーをまとめて一覧にしておく。

Keybindings Description
Ctrl+Alt+S ※2 スニペットパネルを開く
Ctrl+Alt+E \end{hoge} で閉じる
Ctrl+Alt+W \begin{}\end{} で囲う
Alt+S 環境名を変更する
Ctrl+/ コメントアウトのトグル
Shift+Alt+F latexindent を利用して文章を整形
Ctrl+Alt+T ※2 recipe を選択してタイプセット
Ctrl+T 最後にタイプセットした方法でタイプセットする
Ctrl+Alt+K ※2 タイプセットを中断する
Ctrl+Alt+V ※1 既定のビューワを開く
Ctrl+Shift+V ※3 タブのビューワを開く
Ctrl+Alt+V ※3 外部のビューワを開く
Ctrl+Alt+R タブビューワを更新する
Ctrl+Alt+J ※1 SyncTeX で Foward-search する

※1 : デフォルト
※2 : 前回の記事で紹介済み
※3 : Ctrl+Alt+V を使用できないようになる

参考

関連記事

LaTeX Workshop に関する記事は以下の 5 つがあります。本記事と合わせてご覧ください。

  1. LaTeX Workshop を使いこなす - Qiita

    LaTeX Workshop を使って TeX ファイルをタイプセットして PDF を作成するまでを紹介します。

  2. LaTeX Workshop をもう少し使いこなす - Qiita ← 本記事 :dog:

    LaTeX Workshop で利用できるスニペットやコマンドを紹介します。また、他のカスタマイズを考えます。

  3. LaTeX Workshop をもっと使いこなす - Qiita

    LaTeX Workshop の便利な特徴を紹介します。ホバーによる数式や相互参照の確認、インテリセンスによる補完機能などがあります。

  4. Zotero と LaTeX Workshop で bib ファイルを扱いこなす - Qiita

    Zotero から bib ファイルを出力して LaTeX Workshop でフォーマットするする方法を紹介します。

  5. LaTeX Workshop の数式プレビューを使いこなす - Qiita

    数式プレビューをもっと使えるようにカスタマイズします。

余談

おもしろい設定があれば、適宜更新するつもりです。

控えめに言っても公式 Wiki の翻訳に過ぎないのではないかと感じているけれど、具体的なキーボードショートカットを追加しておけば創作性あるかなと思います。

かなり改訂された気がする。ヤバい記事が複数含まれるようになったので、楽しんでもらえればと思う。

少し遊んでいたときに latexdiff を recipe に含めてみると上手く動作しなかった。直観的には動作してくれると思ったのに意外だった。もしも latexdiff を動かしたい場合には簡易的な BAT ファイルを作成してこれを実行させると良いだろう。この場合はちゃんと動いた。

追記

  • 2020/12/4: 軽微修正。「章や括弧で囲う」を追加。「まとめてコメントアウトする」、「ビューワを指定する」を追記。
  • 2020/12/25: 自作スニペットのキーボードショートカットを一部追加。
  • 2021/06/18: フォーマットとリントについて追加。シンタックスハイライトを変更する記事のリンクを追加。構成の大幅改定。
  • 2021/06/20: 公式 Wiki から Gif を引用。軽微修正
  • 2021/07/23: 関連記事のリンクを追加。コードの折りたたみの記事について追記。
  • 2021/11/06: 軽微修正。
  • 2022/07/27: Ver.8.28.0 への対応。
  1. この自作スニペットによるキーボードショートカットの作成はどの言語でも作成することが出来る。他の言語でも応用すると良いだろう。

22
18
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
22
18