每次要重開 pdf viewer 很麻煩,而且最近突然無法在編譯好 pdf 後自動更新 viewer 了,很惱人。找了方法來解決,雖然不夠完美,不過很夠用了。

更新: 有時候會失靈需要重新安裝 VSCode

Related post: [Use VSCode to Write LaTeX Paper]

Environment

  • Win10
  • VSCode Version: 1.63.2
  • Latex Workshop: v8.23.0
  • Trigger Task on Save: v0.2.17

Steps

  1. Install Trigger Task on Save (ID: gruntfuggly.triggertaskonsave)

  2. settings.json (global):

    {
        // your other settings...
        "latex-workshop.latex.autoBuild.run": "onSave",
        "latex-workshop.view.pdf.viewer": "tab",
        "triggerTaskOnSave.tasks": {
            "update pdf": [
                "*.tex"
            ]
        },
    }
    
  3. .vscode/tasks.json (local):

    {
        "version": "2.0.0",
        "tasks": [
            {
                "label": "build",
                "command": "${command:latex-workshop.build}",
                "problemMatcher": [],
            },
            {
                "label": "update pdf",
                "command": "${command:latex-workshop.refresh-viewer}",
                "dependsOn":["build"],
                "problemMatcher": [],
                "group": {
                    "kind": "build",
                    "isDefault": true
                }
            }
        ]
    }
    

說明

會需要 Trigger Task on Save 是因為要在儲存 *.tex 的檔案時觸發 “update pdf” 的 task,由於 “update pdf” 依賴 (dependsOn) “build”,所以會先執行 “build” 的 task,結束後呼叫 refresh-viewer。

不完美之處

可以看到整個流程會呼叫兩次 build (一次是 onSave、一次是 triggerTaskOnSave),取消其中一者會導致 pdf viewer 在 pdf 還沒編譯好時就更新。兩個都存在就會等第一次編譯好才更新 (真是奇怪的 bug),因此缺點就是會編譯兩次,不過第二次因為是重複所以速度很快幾乎不影響使用。

References