LYNCSブログ

慶應義塾大学公認学生団体 宇宙科学総合研究会(LYNCS)のブログです。

VSCodeでTeXがいじれなくなった

VSCodeTeXがいじれなくなった

皆さんお久しぶりです.あっきーです.僕はVSCodeの拡張性と軽さに惚れてVSCodeを愛用しています.TeXVSCodeで書いてます.しかしつい最近のアップデートによりTeXがいじれなくなるという不具合にぶち当たったのでその解決策について備忘録もかねて書いていきたいと思います.

何が起こったか

まずは何が起こったかについて説明しましょう.うるせえ解決策をとっとと教えろ!って人はここは読み飛ばしてもらって大丈夫です.

突然のエラー

大学の授業でレポートの課題が出たのでVSCodeでこんな感じで打ってコンパイルしたんです.

\documentclass{jsarticle}
    \begin{document}

    \end{document}

が,エラー.しかもこれまで見たことのないエラーメッセージ(´・ω・`)(recipeってなんだよ)

f:id:lyncs:20180414132130j:plain
recipeってなんだよ

以前作ってコンパイルが通ることを確認しているファイルでも同じエラー(´・ω・`)コンパイラのログを見るとなにやら文字サイズが云々って言ってますがいじった覚えがない. ラボの同期に聞くと「LaTeXWorkshopの更新がかかった2~3週間前からコンパイル通らないんだよね」とのこと.ということは原因はLaTeXWorkshopにあるっぽい.というわけであれこれ調査を始めました.

これまでの設定

VSCodeTeXをいじるにあたり,多くの方はelechoさんのこの記事

elecho.hatenablog.com

を参考にしていると思います.僕もそうです.この記事ではLaTeXWorkshopによるタイプセットにlatexmkではなく,ptex2pdfを使用するために"latex-workshop.latex.toolchain"という設定を使っています.(なぜptex2pdfを使うかは引用元に書いてあるので参照してください)

これまではこのtoolchainが動くことでTeXのタイプセットを行っていました.

仕様変更

あれこれ調べているとsettings.jsonにこんな警告が. f:id:lyncs:20180414132136j:plain これってつまりtoolchainが廃止されてるってことか?と思いデフォルトの設定を読み込むとこんな部分が.

"latex-workshop.latex.recipes": [
    {
    "name": "latexmk",
    "tools": [
        "latexmk"
    ]
    },
    {
    "name": "pdflatex -> bibtex -> pdflatex*2",
    "tools": [
        "pdflatex",
        "bibtex",
        "pdflatex",
        "pdflatex"
    ]
    }
],
"latex-workshop.latex.tools": [
    {
    "name": "latexmk",
    "command": "latexmk",
    "args": [
        "-synctex=1",
        "-interaction=nonstopmode",
        "-file-line-error",
        "-pdf",
        "%DOC%"
    ]
    },
    {
    "name": "pdflatex",
    "command": "pdflatex",
    "args": [
        "-synctex=1",
        "-interaction=nonstopmode",
        "-file-line-error",
        "%DOC%"
    ]
    },
    {
    "name": "bibtex",
    "command": "bibtex",
    "args": [
        "%DOCFILE%"
    ]
    }
],

これだー!!!(ラボで叫びそうになりました.一番下っ端なので叫べませんでしたが) つまりLaTeXWorkshopの更新によってtoolchainは廃止され,かわりにrecipeという機能に置き換わっていたってことですね.機能の根幹にかかる部分を突然変えるなよって感じですが,英語圏ではそもそもjsarticle使わないし仕方ないか(?)

解決策

原因が判明したのであとは設定をいじるだけ.これまでのtoolchainの記述を消去し,以下の記述に変えました.とりあえず問題なく動くことを念頭に置いて設定したので汚いかつ無駄のある設定になっています.

"extensions.autoUpdate": false, //今回の原因となった自動アプデをしない
    "latex-workshop.latex.recipes": [
        {
            "name": "ptex2pdf",
            "tools": [
                "ptex2pdf",//タイプセットに使うtoolの名前
            ]
        }
    ],
    "latex-workshop.latex.tools": [//タイプセットに使うtool一覧
        {
            "name": "latexmk",
            "command": "latexmk",
            "args": [
                "-synctex=1",
                "-interaction=nonstopmode",
                "-file-line-error",
                "-pdf",
                "%DOC%"
            ]
        },
        {
            "name": "ptex2pdf",//ptex2pdf自体の設定はこれまでと一緒
            "command": "ptex2pdf",
            "args": [
                "-l",
                "-ot",
                "-kanji=utf8 -synctex=1",
                "%DOC%"
            ]
        },
        {
            "name": "bibtex",
            "command": "bibtex",
            "args": [
                "%DOCFILE%"
            ]
        }
    ], 

ここの設定でうまいことやると,一度のタイプセット操作で複数回のタイプセットを一気にやってくれるみたいですね.あとタイプセットごとに使うツールを変えたいときにF1で開くコマンドからツールの選択ができるみたいです.そこまで調べる気力は当時の僕にはなかったみたいです()

とにかくこれでタイプセットが通るようになりました.よかったよかった. さて,レポート書いてきます( ´Д`)ノ~バイバイ