粗大メモ置き場

個人用,たまーに来訪者を意識する雑記メモ

VSCodeでコマンドをショートカットから実行する設定方法 -docmuteで個別コンパイルができない問題の解決-

TexはずっとTexstudioで書いてきましたが,docmuteで分割コンパイルするときに困ったのでVScodeも併用します。

VScodeでコマンドをショートカットから実行する

ほぼ以下の記事の通りです。

qiita.com

keybindings.jsonを開く

まずは,設定を書き込むkeybindings.jsonを開きます。

コマンドパレット(ctrl+shift+p)を開き'key'と入力し「基本設定:キーボードショートカットを開く(JSON)」を選びます。

設定の書き方

開いたjsonファイルは[]で囲まれた記述が連なっていると思います。 下のような表記を中括弧[]の中に追記します。

    {
        "key": "F5",
        "command": "workbench.action.terminal.sendSequence",
        "args":{
            "text": "echo ${file}\n"
        }
    }

これはworkbench.action.terminal.sendSequenceというコマンドを介してtext: に連なるターミナルのコマンドを実行しています。

ここでいうターミナルはVSCodeの下にあるターミナルのことで,実行結果や経過を確認することができます。

f:id:ossyaritoori:20191117175325p:plain
Windowsの場合はPowershellを起動している。UbuntuとかならBashかな?

引数について

textの引数には以下のURLにあるような変数が使用できます。

例えば上の例の${file}は現在VSCode上で編集しているファイルのフルパスとファイル名です。

Visual Studio Code Variables Reference

自分の設定

後半で解説する問題を解決するために自分が書いたファイルは以下のとおりです。

    {
        "key": "F5",
        "command": "workbench.action.terminal.sendSequence",
        "args":{
            "text": "cd ${fileDirname}\n platex ${fileBasenameNoExtension}.tex \n dvipdfmx ${fileBasenameNoExtension}.dvi \n SumatraPDF ${fileBasenameNoExtension}.pdf \n"
        }
    }

「自分の今開いているファイルのディレクトリに移動」「platexとdvipdfmxでPDF作成」「SumatraPDFで表示」という順になっています。

docmuteパッケージの個別コンパイルができない問題

docmuteとは端的に言うとTexファイルの分割コンパイルのためのパッケージです。

ossyaritoori.hatenablog.com

以下のような構造で,mainがcahpter1,2をincludeないしinputしているときにmainでの全体コンパイルとchapter1単体のコンパイルをサポートしてくれます。

root/
 ├ main.tex
 ├ chapter/
   ├ chapter1.tex
   └ chapter2.tex

確認している問題

TexStudioのオートコンパイルの機能を使っている前提ですが, 他のファイルをコンパイルする前にmainをコンパイルした場合,chapter1のファイルを開いてコンパイルしても間違って全体がコンパイルされてしまう現象が起きてしまいます。


おそらく,main.texコンパイルで生成されたファイルの依存関係を参照してしまうためと思われ,ターミナルで必要なコマンドを直打ちするか,一度中間生成ファイルをすべて取り払うことで想定した動作を実現できます。

VSCodeを使った解決

TexStudioで編集しているファイルをVSCode同時に開いて全体コンパイルと個別コンパイルでエディタを分けて対応する様にしてやろうというのが今回の解決策です。

この解決策は最適ではきっとないでしょうが,VSCodeとは今後長いこと付き合っていきそうなのでできそうなことはVSCodeにやってもらおうかなと思っています。