MacOS 下 VS Code + LaTeX + Skim 双向同步配置

必备工具安装

首先安装三个核心工具,缺一不可:

  1. 安装 LaTeX 环境
    首先你得有 LaTeX 的编译环境,推荐直接装完整版的 MacTeX,这是 Mac 上最通用的 LaTeX 环境,包含了所有的编译工具和宏包。下载地址是 https://www.tug.org/mactex/,双击安装。
  2. 安装 VS Code 和 LaTeX Workshop
    VS Code 是我们写 LaTeX 的编辑器。下载地址是 https://code.visualstudio.com/,双击安装。然后打开 VS Code 的插件市场,搜索 LaTeX Workshop,安装这个插件。
  3. 安装 Skim PDF 阅读器
    Skim 是 Mac 上免费开源的 PDF 阅读器,专门支持 LaTeX 的 SyncTeX 同步功能,比系统自带的 Preview 好用太多了。下载地址是 https://skim-app.sourceforge.io/,双击安装。

在 VS Code 中配置 LaTeX

  1. 打开 VS Code,按下快捷键 Command + , 打开设置
  2. 点击设置页面右上角的 {} 图标,打开 settings.json 文件(这是 JSON 格式的配置文件)
  3. 把下面这段配置,完整的复制粘贴到你的 settings.json 里面(如果原来有其他配置,就加在大括号里面就行):
bash 复制代码
// LaTeX Workshop 配置
"latex-workshop.view.pdf.viewer": "external",
"latex-workshop.view.pdf.external.viewer.command": "/Applications/Skim.app/Contents/MacOS/Skim",
"latex-workshop.view.pdf.external.viewer.args": [
        "-r",
        "%LINE%",
        "%PDF%",
        "%TEX%"
],
"latex-workshop.view.pdf.ref.viewer": "external",
"latex-workshop.view.pdf.external.synctex.args": [
        "-r",
        "%LINE%",
        "%PDF%",
        "%TEX%"
],

这些配置是什么意思?解释一下,你就知道每个配置是干嘛的,不是瞎复制:

  • latex-workshop.view.pdf.viewer: 把默认的 PDF 查看器,从内置预览改成外部程序
  • 下面两行指定了外部程序就是 Skim,告诉 VS Code 编译完用 Skim 打开 PDF
  • 最后几行是同步跳转的参数,用来实现编译完自动跳转到对应的 PDF 行

settings.json的完整代码(仅供参考)

bash 复制代码
{
    // ======================== LaTeX 完整配置 BEGIN ========================
    // bibtex 格式化缩进
    "latex-workshop.bibtex-format.tab": "tab",

    // 关闭自动编译,手动控制编译时机
    "latex-workshop.latex.autoBuild.run": "never",
    "latex-workshop.latex.autoBuild.cleanAndRetry.enabled": false,

    // 编译完成后自动同步跳转到PDF
    "latex-workshop.synctex.afterBuild.enabled": true,

    // 公式悬浮预览
    "latex-workshop.hover.preview.enabled": true,
    "latex-workshop.hover.preview.scale": 0.7,

    // ========== PDF 查看器配置:使用外部 Skim ==========
    "latex-workshop.view.pdf.viewer": "external",
    "latex-workshop.view.pdf.ref.viewer": "external",

    // Skim 正向同步专用工具(编译后自动跳行)
    "latex-workshop.view.pdf.external.viewer.command": "/Applications/Skim.app/Contents/SharedSupport/displayline",
    "latex-workshop.view.pdf.external.viewer.args": [
        "-r",
        "%LINE%",
        "%PDF%",
        "%TEX%"
    ],

    // Skim 同步命令配置
    "latex-workshop.view.pdf.external.synctex.command": "/Applications/Skim.app/Contents/SharedSupport/displayline",
    "latex-workshop.view.pdf.external.synctex.args": [
        "-r",
        "%LINE%",
        "%PDF%",
        "%TEX%"
    ],

    "latex-workshop.view.pdf.internal.synctex.keybinding": "double-click",

    // ========== 编译工具配置 ==========
    "latex-workshop.latex.tools": [
        {
            "name": "xelatex",
            "command": "xelatex",
            "args": [
                "-synctex=1",
                "-interaction=nonstopmode",
                "-file-line-error",
                "%DOCFILE%"
            ]
        },
        {
            "name": "pdflatex",
            "command": "pdflatex",
            "args": [
                "-synctex=1",
                "-interaction=nonstopmode",
                "-file-line-error",
                "%DOCFILE%"
            ]
        },
        {
            "name": "biber",
            "command": "biber",
            "args": [
              "%DOC%"
            ]
        },
        {
            "name": "bibtex",
            "command": "bibtex",
            "args": [
                "%DOCFILE%"
            ]
        },
        {
            "name": "makeglossaries",
            "command": "makeglossaries",
            "args": [
              "%DOCFILE%"
            ]
        }
    ],

    // ========== 编译方案(中文论文推荐使用 xelatex 系列) ==========
    "latex-workshop.latex.recipes": [
        {
            "name": "pdf->bibtex->pdf->pdf",
            "tools": [
                "pdflatex",
                "bibtex",
                "pdflatex",
                "pdflatex"
            ]
        },
        {
            "name": "xe->bibtex->xe->xe",
            "tools": [
                "xelatex",
                "bibtex",
                "xelatex",
                "xelatex"
            ]
        },
        {
            "name": "pdf->biber->pdf->pdf",
            "tools": [
                "pdflatex",
                "biber",
                "pdflatex",
                "pdflatex"
            ]
        },
        {
            "name": "xe->biber->xe->xe",
            "tools": [
                "xelatex",
                "biber",
                "xelatex",
                "xelatex"
            ]
        },
        {
            "name": "xelatex",
            "tools": [
                "xelatex"
            ]
        },
        {
            "name": "pdflatex",
            "tools": [
                "pdflatex"
            ]
        }
    ],

    // 清理中间文件(保留同步必需文件,不删除 synctex.gz)
    "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",
        "*.bcf",
        "*.run.xml"
    ],
    // ======================== LaTeX 设置 END ========================
    "workbench.sideBar.location": "right",
    "files.autoSave": "afterDelay",
    "security.promptForLocalFileProtocolHandling": false
}

保存配置文件,使其生效。

配置 Skim 的反向搜索

这部分比你想象的简单 100 倍,不用自己填任何命令和参数,新版本的 Skim 已经帮你做好了:

  1. 打开 Skim,按下快捷键 Command + , 打开选项
  2. 点击顶部的 同步 标签(英文是 Sync)
  3. 最上面的 预设(Preset)下拉框,你直接选 Visual Studio Code 就行!
    就这一步!选完之后,下面的命令和参数会自动帮你填好,完全不用你自己动手改,也不用管什么路径,Skim 自己会找到 VS Code 的位置。

测试一下配置是否生效

现在所有配置都搞定了,我们来测试一下能不能用:

  1. 新建一个简单的 LaTeX 文件,比如 test.tex,内容随便写点,比如:
bash 复制代码
\documentclass{article}
\begin{document}
Hello World!
This is a test.
\end{document}
  1. 按下 Command + S 保存,然后编译一下(LaTeX Workshop 默认保存就会自动编译)
  2. 这时候你会发现,PDF 自动用 Skim 打开了!
  3. 你在源码里把光标放到第二行,重新编译,会发现 Skim 自动跳转到了 PDF 的第二行,这就是正向同步生效了!
  4. 然后你在 Skim 里,按住 Command + Shift,点击 PDF 的某一行,会发现 VS Code 自动跳转到了对应的源码行,这就是反向同步生效了!

如果这两步都没问题,那恭喜你,配置成功了!

常见问题

  1. 为什么我用系统自带的 Preview 不行?
    因为 Preview 不支持 SyncTeX 同步协议!这是 Preview 本身的功能限制,不管你怎么配置,都没法实现双向同步,所以必须用 Skim 才行。
  2. 我之前用的是 SumatraPDF,现在换 Mac 了不习惯?
    不用不习惯,Skim 的体验比 SumatraPDF 在 Mac 上好用太多了,而且配置完同步之后,写 LaTeX 的效率会高很多。
  3. 编译完还是用内置预览打开?
    检查一下 VS Code 的 settings.json 有没有写错,是不是把配置加对地方了,有没有打错逗号或者引号。确认你装的是 LaTeX Workshop 插件,不是别的 LaTeX 插件。
相关推荐
程序员的记录2 小时前
AI 实战 - 文档处理(pdf/work/md/txt...)
pdf
AI进化营-智能译站3 小时前
Jazzy ROS2入门指南系列05-配置VsCode实现ROS2项目开发
ide·vscode·ai·编辑器
Muyuan19984 小时前
22.让 RAG Agent 更像真实产品:聊天页面优化、PDF 上传、知识库重建与检索片段展示
python·django·pdf·fastapi
打小就很皮...7 小时前
html2canvas + jsPDF 生成 PDF 的踩坑与解决方案总结
前端·pdf
Digitally8 小时前
如何将 iPad 上的视频无损传输到 Mac
macos·音视频·ipad
Maynor9968 小时前
Codex 中国站正式上线!
人工智能·gpt·macos·github
时光之源8 小时前
Visual Studio | Marketplace创建发布者(Create Publisher)时无法创建的问题解决方案
ide·vscode·visual studio·plugin·cursor
优化控制仿真模型8 小时前
27考研数学一、二、三历年真题及答案解析PDF电子版(1987-2026年)
经验分享·pdf
huluang8 小时前
解决 Adobe Acrobat 裁剪 PDF 后内容仍存留的问题
pdf