Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

vscodeによる、luatexを用いたpdf出力について

やりたいこと

vscodeでlatex workshopを用いて書いたtexファイルがpdf出力される際、外部ウィンドウが新たに開いてしまいます。
vscode内で自動で新しいtabを開いてpdfを出力したいです。
パソコンはwindows OS(Windows 10 Pro)バージョン1909を使用しておりtexlive,vscode,latex workshopは既にインストールしています。

発生している問題・エラー

vscodeでtex fileを編集し、Ctrl+Alt+Bを押すと、外部ウィンドウでデフォルトのpdf viewerが起動してpdfが出力される。
下記サイトを参考に、
"latex-workshop.view.pdf.viewer": "tab"
という行をsettings.jsonに付記していますが、効果はありません。

ちなみに、いったんpdfができれば、Ctrl+Alt+Vを押すと、vscode内で自動で新しいtabが開かれてpdfが出力されます。

上記サイトのものとほとんど同じですが、私のvscodeのsettings.jsonを記載します。
詳しい方がいらっしゃいましたら助けていただけないでしょうか。

{
    // 日本語文書で単語移動を使うため、助詞や読点、括弧を区切り文字として指定する
    "editor.wordSeparators": "./\\()\"'-:,.;<>~!@#$%^&*|+=[]{}`~? 、。「」【】『』()!?てにをはがのともへでや",

    // 設定: LaTeX Workshop
// LaTeX Workshop ではビルド設定を「Tool」と「Recipe」という2つで考える
//   Tool: 実行される1つのコマンド。コマンド (command) と引数 (args) で構成される
//   Recipe: Tool の組み合わわせを定義する。Tool の組み合わせ (tools) で構成される。
//           tools の中で利用される Tool は "latex-workshop.latex.tools" で定義されている必要がある。

// ビルドのレシピに使われるパーツ

// latex-workshop.latex.tools: Tool の定義
"latex-workshop.latex.tools": [
      
    // latexmk を利用した lualatex によるビルドコマンド
    {
      "name": "Latexmk (LuaLaTeX)",
      "command": "latexmk",
      "args": [
        "-f", "-gg", "-pv", "-lualatex", "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "%DOC%"
      ]
    },
    // latexmk を利用した xelatex によるビルドコマンド
    {
      "name": "Latexmk (XeLaTeX)",
      "command": "latexmk",
      "args": [
        "-f", "-gg", "-pv", "-xelatex", "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "%DOC%"
      ]
    },
    // latexmk を利用した uplatex によるビルドコマンド
    {
      "name": "Latexmk (upLaTeX)",
      "command": "latexmk",
      "args": [
        "-f", "-gg", "-pv", "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "%DOC%"
      ]
    },
    // latexmk を利用した platex によるビルドコマンド
    // 古い LaTeX のテンプレートを使いまわしている (ドキュメントクラスが jreport や jsreport ) 場合のため
    {
      "name": "Latexmk (pLaTeX)",
      "command": "latexmk",
      "args": [
        "-f", "-gg", "-pv", "-latex='platex'", "-latexoption='-kanji=utf8 -no-guess-input-env'", "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "%DOC%"
      ]
    }
],







// latex-workshop.latex.recipes: Recipe の定義
"latex-workshop.latex.recipes": [
    // LuaLaTeX で書かれた文書のビルドレシピ
    {
      "name": "LuaLaTeX",
      "tools": [
        "Latexmk (LuaLaTeX)"
      ]
    },
    // XeLaTeX で書かれた文書のビルドレシピ
    {
      
      "name": "XeLaTeX",
      "tools": [
        "Latexmk (XeLaTeX)"
      ]
    },
    // LaTeX(upLaTeX) で書かれた文書のビルドレシピ
    {
      "name": "upLaTeX",
      "tools": [
        "Latexmk (upLaTeX)"
      ]
    },
    // LaTeX(pLaTeX) で書かれた文書のビルドレシピ
    {
      "name": "pLaTeX",
      "tools": [
        "Latexmk (pLaTeX)"
      ]
    },
],

// latex-workshop.latex.magic.args: マジックコメント付きの LaTeX ドキュメントをビルドする設定
// '%!TEX' で始まる行はマジックコメントと呼ばれ、LaTeX のビルド時にビルドプログラムに解釈され、
// プログラムの挙動を制御する事ができる。
// 参考リンク: https://blog.miz-ar.info/2016/11/magic-comments-in-tex/
"latex-workshop.latex.magic.args": [
    "-f", "-gg", "-pv", "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "%DOC%"
],

// latex-workshop.latex.clean.fileTypes: クリーンアップ時に削除されるファイルの拡張子
// LaTeX 文書はビルド時に一時ファイルとしていくつかのファイルを生成するが、最終的に必要となるのは
// PDF ファイルのみである場合などが多い。また、LaTeX のビルド時に失敗した場合、失敗時に生成された
// 一時ファイルの影響で、修正後のビルドに失敗してしまう事がよくある。そのため、一時的なファイルを
// 削除する機能 (クリーンアップ) が LaTeX Workshop には備わっている。
"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", "*.synctex.gz",
    // for Beamer files
    "_minted*", "*.nav", "*.snm", "*.vrb",
],



// latex-workshop.latex.autoClean.run: ビルド失敗時に一時ファイルのクリーンアップを行うかどうか
// 上記説明にもあったように、ビルド失敗時に生成された一時ファイルが悪影響を及ぼす事があるため、自動で
// クリーンアップがかかるようにしておく。
"latex-workshop.latex.autoClean.run": "onFailed",

// latex-workshop.latex.autoBuild.run: texファイルの保存時に自動的にビルドを行うかどうか onSave/never
"latex-workshop.latex.autoBuild.run": "never", //ここを変更すると更新毎にPDFを出力しないようにできます


//synctex を有効にしてコンパイルしたときに,tex 文書のカーソル位置で PDF を表示するように設定できます。
"latex-workshop.synctex.afterBuild.enabled": true,




"[tex]": {
    // スニペット補完中にも補完を使えるようにする
    "editor.suggest.snippetsPreventQuickSuggestions": false,
    // インデント幅を2にする
    "editor.tabSize": 2
},

"[latex]": {
    // スニペット補完中にも補完を使えるようにする
    "editor.suggest.snippetsPreventQuickSuggestions": false,
    // インデント幅を2にする
    "editor.tabSize": 2
},

"[bibtex]": {
    // インデント幅を2にする
    "editor.tabSize": 2
},


// ---------- LaTeX Workshop ----------

// 使用パッケージのコマンドや環境の補完を有効にする
"latex-workshop.intellisense.package.enabled": true,

// 生成ファイルを "out" ディレクトリに吐き出す
"latex-workshop.latex.outDir": "%DIR%",
// latex-workshop.view.pdf.viewer: PDF ビューアの開き方
// VSCode 自体には PDF ファイルを閲覧する機能が備わっていないが、
// LaTeX Workshop にはその機能が備わっている。
// "tab" オプションを指定すると、今開いているエディタを左右に分割し、右側に生成されたPDFを表示するようにしてくれる
// この PDF ビュアーは LaTeX のビルドによって更新されると同期して内容を更新してくれる。
"latex-workshop.view.pdf.viewer": "tab",
}
1 likes

1Answer

挙げられている settings.json を確認しただけなのですが、latexmk の引数に -pv が含まれていることが原因かと思われます。(その意味では、LuaLaTeX に限らず、Tools で設定されている XeLaTeX や upLaTeX 等でも同様の問題が生じると思います)

latexmk-pv は TeX ファイルのビルド後に PDF を自動的に開くようにするオプションです。(これは LaTeX Workshop の機能ではない)
したがって、-pv を削除してしまえば、外部の PDF ビューワがビルド後勝手に開かれることはありません。


latex-workshop.latex.tools のみを次のように変更します。

"latex-workshop.latex.tools": [
    // latexmk を利用した lualatex によるビルドコマンド
    {
      "name": "Latexmk (LuaLaTeX)",
      "command": "latexmk",
      "args": [
        "-f", "-gg", "-lualatex", "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "%DOC%"
      ]
    },
    // latexmk を利用した xelatex によるビルドコマンド
    {
      "name": "Latexmk (XeLaTeX)",
      "command": "latexmk",
      "args": [
        "-f", "-gg", "-xelatex", "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "%DOC%"
      ]
    },
    // latexmk を利用した uplatex によるビルドコマンド
    {
      "name": "Latexmk (upLaTeX)",
      "command": "latexmk",
      "args": [
        "-f", "-gg", "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "%DOC%"
      ]
    },
    // latexmk を利用した platex によるビルドコマンド
    // 古い LaTeX のテンプレートを使いまわしている (ドキュメントクラスが jreport や jsreport ) 場合のため
    {
      "name": "Latexmk (pLaTeX)",
      "command": "latexmk",
      "args": [
        "-f", "-gg", "-latex='platex'", "-latexoption='-kanji=utf8 -no-guess-input-env'", "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "%DOC%"
      ]
    }
],

今後 latexmk について不明点があれば、以下の公式ドキュメント (PDF) や latexmk についての記事を参照すると便利かも知れません。

解決の一助となれば幸いです :blush:

0Like

Comments

  1. 丁寧な回答ありがとうございます。

    ご指摘の通りにしたところ、compile後に外部ウィンドウが開くことはなくなりました。

    ところが、今度は生成されたpdfが出力されません。
    私の書き方が足りなかったのですが、compile後、VScode内の新規tabが自動的に開かれて生成されたpdfを見られるようにしたいのです。

    いろいろなサイトを見ても、
    "latex-workshop.view.pdf.viewer": "tab"
    とすればよい、と書いてあるばかりで困惑しております。。
  2. > ご指摘の通りにしたところ、compile 後に外部ウィンドウが開くことはなくなりました。

    まずは、外部の PDF ビューワが勝手に開く問題が解決して良かったです。

    > ところが、今度は生成された pdf が出力されません。
    > 私の書き方が足りなかったのですが、compile 後、VScode 内の新規 tab が自動的に開かれて生成された pdf を見られるようにしたいのです。

    内部ビューワがコンパイル後に自動的に起動するように構成する設定はないようです。公式 Wiki で明言されていませんが、コンパイル後は `Ctrl+Alt+V` 等でビューワを起動させる必要があります。

    したがって、ご質問のような自動的に内部ビューワが起動するようにすることは出来ないようです。

    場合によっては LaTeX Workshop のリポジトリで [issue](https://github.com/James-Yu/LaTeX-Workshop/issues) を投稿すると対応してもらえる可能性があります。(どうやらこれまでにこの種の issue が投稿されている様子はないようでした)

    > いろいろなサイトを見ても、
    > "latex-workshop.view.pdf.viewer": "tab"
    > とすればよい、と書いてあるばかりで困惑しております。。

    `latex-workshop.view.pdf.viewer` について [公式 Wiki の説明](https://github.com/James-Yu/LaTeX-Workshop/wiki/View#latex-workshopviewpdfviewer) を参照すると、デフォルトのビューワを指定する設定です。デフォルトに指定されたビューワは `Ctrl+Alt+V` によって呼び出すことが出来ます。

    したがって、`"latex-workshop.view.pdf.viewer": "tab"` は内部ビューワ(タブ)をデフォルトに設定することを意味しています。今回の場合は、`Ctrl+Alt+V` で内部ビューワが開くようになります。

    ----------

    定石ですが、LaTeX Workshop について分からないことがあれば [公式 Wiki](https://github.com/James-Yu/LaTeX-Workshop/wiki) を参照すると良いと思います。(もしかしたら私の見落としの可能性があるので、時間があるときにぜひ確認してください!)

  3. 返信が遅くなり申し訳ありません。なるほど、私の勘違いだったのですね。丁寧にありがとうございました!

Your answer might help someone💌