5 如何为VSC的LaTeX WorkShop插件添加ConTeXt编译工具?

发布于 2025-03-27 23:50:30

我使用的是TeX Live 2025,它收录了context.exe,因为命令行编译过于不便,遂想将其像xelatex-bibtex-xelatex-xelatex一样,创建一个一键完成context编译的工作链,这样就可以专心于内容写作,而不是每次都要复制一下代码context main到命令行中。

阅读了LaTeX WorkShop开发者的GitHub官方网站,似乎并未得到context相关的配置案例。于是只好仿照我已有的pdflatex编译配方,作一个简单修改,但并不奏效:

    "latex-workshop.latex.tools": [
        {
            "name": "context",
            "command": "context",
            "args": [
                "-shell-escape",
                "-synctex=1",
                "-interaction=nonstopmode",
                "-file-line-error",
                "%DOC%"
            ]
        },
    ],
    "latex-workshop.latex.recipes": [
        {
            "name": "ConTeXt",
            "tools": [
                "context"
            ]
        },
    ],

一份经TeXStudio验证有效的(即TeXStudio能正确理解系统变量等编译环境的信息,且正确地得到了编译结果main.pdf)用于测试ConTeXt的文件main.tex,其内容如下:

%命令行编译: context main
\usemodule[tikz]
\startTEXpage[offset=2pt]
\def\mygrid#1{
    \fill [gray!60]     (0,0) rectangle (#1,#1);
    \draw [white,thick] (0,0) grid      (#1,#1);
    \foreach \x in {1,...,#1}
    {
        \node at (0,\x) [left]       {$\x$};
        \node at (\x,0) [below]      {$\x$};
    }
        \node at (0,0)  [below left] {$0$};
}
\starttikzpicture[every node/.append style={scale=.5}]
\mygrid{3}
\stoptikzpicture
\stopTEXpage

查看更多

关注者
0
被浏览
396
雾月
雾月 3天前
这家伙很懒,什么也没写!

首先,context 没有你给的那些命令行参数。
其次,TeXLive 2025 的 ConTeXt 默认用的是 LuaMetaTeX,它不带 kpathsea 库,所有的第三方模块都必须手动安装(包括 tikz、pgfplots 等),否则就会找不到相关文件,用 LuaTeX 的版本才行。因为我没有 TeX Studio,不知道你是如何成功编译的。不过你可以查看输出的 PDF 文件,看看究竟是哪个版本。
最后,LaTeX Workshop 需要找到主文件(即 root file,见 https://github.com/James-Yu/LaTeX-Workshop/wiki/Compile#the-root-file),主要是找到 \documentclass 这个命令,这在 ConTeXt 中是没有的。

只要解决上面这三个问题就行了。
修改 setting.json

{
    "latex-workshop.latex.tools": [
        {
            "name": "context-luatex",
            "command": "context",
            "args": [
                "--synctex",
                "--nonstopmode",
                "--luatex",
                "%DOC%"
            ],
            "env": {}
        },
    ],
    "latex-workshop.latex.recipes": [
        {
            "name": "context (luatex)",
            "tools": [
                "context-luatex"
            ]
        },
    ]
}

然后用 magic comment 设置主文件(注意第一行):

% !TEX root = main.tex
%命令行编译: context --luatex main
\usemodule[tikz]
\startTEXpage[offset=2pt]
\def\mygrid#1{
    \fill [gray!60]     (0,0) rectangle (#1,#1);
    \draw [white,thick] (0,0) grid      (#1,#1);
    \foreach \x in {1,...,#1}
    {
        \node at (0,\x) [left]       {$\x$};
        \node at (\x,0) [below]      {$\x$};
    }
        \node at (0,0)  [below left] {$0$};
}
\starttikzpicture[every node/.append style={scale=.5}]
\mygrid{3}
\stoptikzpicture

\CONTEXT{} -- \LUATEX

\stopTEXpage

然后点击 context (luatex) 即可。
image.png

2 个回答
Sagittarius Rover
我要成为Typst糕手/(ㄒoㄒ)/~~

maybe related: https://github.com/James-Yu/LaTeX-Workshop/issues/3988

我曾经自定义使用过musixflx宏包需要的musixflx命令,在LW上是有效的,感觉就是James Yu没有在上游提供支持,上面的issues好像也没有下文了....

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览