投稿者はLaTeX環境の、特にVSCodeの構造には全然詳しくないので、仕組みや原理の理解については間違っているかもしれません。ご了承ください。
背景
VSCodeで、uplatex+dvipdfmxを用いてpdfファイルを作成したいと思い、プリアンブルに
\documentclass[uplatex, dvipdfmx]{jsarticle}
\usepackage[dvipdfmx]{graphicx}
\usepackage[dvipdfmx]{hyperref}
このとき、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で編集“から編集する
↑この青枠の部分にある"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ファイルの中身です。
{
"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"の上において右クリックすると、このようなメニューが表示されるので、「別のバージョンをインストール...」を選択します。
脚注
-
これは推測なのですが、
settings.json
ファイルをあちこちに乱立させたせいでVSCodeの中でこの優先順位がバグってしまったことが今回の大元のエラーの原因なのではないかと思っています。反省。 ↩