TexはずっとTexstudioで書いてきましたが,docmuteで分割コンパイルするときに困ったのでVScodeも併用します。
VScodeでコマンドをショートカットから実行する
ほぼ以下の記事の通りです。
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の下にあるターミナルのことで,実行結果や経過を確認することができます。
引数について
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ファイルの分割コンパイルのためのパッケージです。
以下のような構造で,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にやってもらおうかなと思っています。