0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VSCodeで、"Backend request inconsistent with engine"というエラーの対処法 + 余談

Posted at

投稿者はLaTeX環境の、特にVSCodeの構造には全然詳しくないので、仕組みや原理の理解については間違っているかもしれません。ご了承ください。

背景

VSCodeで、uplatex+dvipdfmxを用いてpdfファイルを作成したいと思い、プリアンブルに

preamble.tex
\documentclass[uplatex, dvipdfmx]{jsarticle}
\usepackage[dvipdfmx]{graphicx}
\usepackage[dvipdfmx]{hyperref}

と記述したところ、次のようなエラーに遭遇しました。
スクリーンショット 2025-04-15 12.57.28.png

このとき、compile logには次のような記述がありました。

compile log(一部抜粋)
! Package hyperref Error: Wrong DVI mode driver option `dvipdfmx',
(hyperref)                because pdfTeX or LuaTeX is running in PDF mode.

これは、(おそらく)「本体側は(uplatexではなく)pdfTeXかLuaTeXを走らせているため、ドライバ側で指定したdvipdfmxを認識できない」という事を表しています。「jsonファイルも.latexmkrcファイルも適切に書き換えているはずなのに、どうしてpdfTeXが動いているんだ?」と不思議に思い、chatGPTに質問しまくりながらしばらく試行錯誤しました。

参考: 問題発生時の設定

問題発生時、settings.jsonファイルと.latexmkrcファイルの中身は以下の通りでした。

settings.json

{
  "latex-workshop.latex.recipes": [
    {
      "name": "uplatex -> dvipdfmx",
      "tools": ["uplatex-dvipdfmx"]
    }
  ],
  "latex-workshop.latex.tools": [
    {
      "name": "uplatex-dvipdfmx",
      "command": "latexmk",
      "args": [
        "-e", "$latex=q/uplatex %O -interaction=nonstopmode %S/",
        "-e", "$dvipdf=q/dvipdfmx %O -o %D %S/",
        "-pdfdvi",
        "%DOC%"
      ]
    }
  ],
  "latex-workshop.latex.recipe.default": "uplatex -> dvipdfmx",
  "latex-workshop.view.pdf.viewer": "tab",
  "latex-workshop.latex.clean.subfolder.enabled": true,
  "latex-workshop.latex.autoClean.run": "onBuilt",
  "latex-workshop.latex.clean.fileTypes": [
    "*.aux",
    "*.bbl",
    "*.blg",
    "*.idx",
    "*.ind",
    "*.lof",
    "*.lot",
    "*.out",
    "*.toc",
    "*.acn",
    "*.acr",
    "*.alg",
    "*.glg",
    "*.glo",
    "*.gls",
    "*.ist",
    "*.fls",
    "*.log",
    "*.fdb_latexmk",
    "*.dvi",
    "*.synctex.gz"
  ]
}

.latexmkrc

$latex = 'uplatex -interaction=nonstopmode -synctex=1 %O %S';
$dvipdf = 'dvipdfmx -f ipaex.map -o %D %S';
$pdf_mode = 2; # DVI -> PDF

ファイルの場所

それぞれのファイルは以下の場所に格納してありました。

my-folder/
├── test.tex
├── .latexmkrc
├── .vscode/
│   └── settings.json 

このmy-folder/の絶対パスは/Users/shunakashu/projects/my-folderでした。

原因

端的にいうと、原因は

settings.jsonファイルがいろいろなディレクトリに散財していたこと(特に、my-folderより上位のディレクトリにもjsonファイルが散財していた始末)

②LaTeX Workshopが本当に読み込んでいたものは、(当初の自分が想定していた)uplatex -> dvipdfmxをrecipeとして指定したjsonファイルではなく、別のディレクトリにあるjsonファイルだったこと

③そのjsonファイルがpdfLaTeXをrecipeに指定するものだったこと

の2点でした。そのため、何度jsonファイルを書き換えてもWorkshopに反映されないのは当然でした(肝心のLaTeX Workshopが参照するjsonファイルの方は何も変更されていないため)。

多分、丁寧に環境構築をされた方はこんなエラーに遭遇しないと思います(settings.jsonをあちこちにぐちゃぐちゃ乱立させるような暴挙はしないはず)。自分みたいに、環境構築をよくわかっていないまま、ディレクトリを1つ選ぶたびに適当にjsonファイルを作っては放置するを繰り返してしまうと、このようなことになってしまいます。

教訓として、不要なjsonファイルは消すべしということを学びました。jsonファイルに限らず、不要なファイルが残っているとPCの作動に干渉するリスクがあるのは当然です。どうやら自分はゴミ捨ての出来ない人間だったという訳です。

対処

要するに、「正しい」settings.jsonファイルを適切な形で編集さえすれば、"Backend request"(プリアンブルで指定したドライバ)と"engine"(jsonファイル側で指定されるLaTeX系)との間のinconsistency=不整合は生じなくなるわけです。そこで、以下のようにします。↓

settings.jsonファイルを、
Codeの「基本設定」>「設定」>「拡張機能」>「Latex-workshop>Latex: Recipes」にある“settings.jsonで編集“から編集する
スクリーンショット 2025-04-15 12.38.16.png
↑この青枠の部分にある"settings.jsonで編集"をクリックして、そこからjsonファイルの編集画面に飛べばOKです。

ここで、設定画面では「ユーザー」と「ワークスペース」のどちらの設定を変更するかを選ぶことができます。上の画面で、
・「ワークスペース」を選択した上で上記の"settings.jsonで編集"をクリックすると、/現在のプロジェクトフォルダ/.vscode/settings.jsonの場所にあるjsonファイルが編集されます。jsonファイルの設定は現在開いているワークスペースのみに反映されます。
・「ユーザー」を選択して同様のことを行うと、~/Library/Application Support/Code/User/settings.jsonの場所にあるjsonファイルが編集されます。この場合、ここにあるjsonファイルの設定は、ワークスペースごとに異なるjsonファイルを作成していない限りグローバルに反映されます。
・VSCodeは、基本的に1「ワークスペースの設定」>「ユーザーの設定」(>「デフォルトの設定」)の順に優先順位を定めます。そのため、あるワークスペースにsettings.jsonファイルが存在する場合、ユーザー設定ではなくそのsettings.jsonファイルの内容に従って作動します。

あとは、settings.jsonおよび.latexmkrcの中身自体は上で記載したものでOKです。

余談

さて、"Backend request inconsistent with engine"の問題が解決して、晴れてuplatex->dvipdfmxによるビルドが可能になりましたが、今度は別の問題に遭遇しました。(割とすぐ解決)

pdfビューワーの調子が悪い

VSCodeのpdfビューワーを起動しても、なぜか表示されるpdfが真っ白になっていました。(VSCodeを閉じてAdobe Readerで当該pdfファイルを読み込むと、別に問題なく文書が表示されていました)

対処

結局dvipdfmxじゃなくてLuaLaTeXにした

「dvipdfmx出力ってLaTeX WorkshopのPDFビューワーと相性が悪いらしい」という噂を聞き、結局ビルドレシピをLuaLaTeXに変更しました(.latexmkrcは消しました)。以下が現在の僕のjsonファイルの中身です。

settings.json
{
  "latex-workshop.latex.tools": [
    {
      "name": "latexmk (lualatex)",
      "command": "latexmk",
      "args": ["-lualatex", "-synctex=1", "-interaction=nonstopmode", "%DOC%"]
    }
  ],
  "latex-workshop.latex.recipes": [
    {
      "name": "latexmk",
      "tools": ["latexmk (lualatex)"]
    }
  ],
  "latex-workshop.view.pdf.viewer": "tab",
  "latex-workshop.latex.autoBuild.run": "onSave"
}

LaTeX Workshopのバージョンを下げた

なんかLaTeX Workshopのバージョン10.7.4(2025年1月版)だとpdf出力がうまくいかなかったのですが、バージョンを下げて9.21.1くらいにすると、VSCode内部のビューワーでうまく表示されました。理由は分かりません。

サイドバーの「拡張機能」をクリックして拡張機能一覧を表示させて、カーソルを"LaTeX Workshop"の上において右クリックすると、このようなメニューが表示されるので、「別のバージョンをインストール...」を選択します。

スクリーンショット 2025-04-15 14.02.52.png
すると、過去のバージョンが選択できるようになります。

脚注

  1. これは推測なのですが、settings.jsonファイルをあちこちに乱立させたせいでVSCodeの中でこの優先順位がバグってしまったことが今回の大元のエラーの原因なのではないかと思っています。反省。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?