我使用的是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
首先,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)
即可。
maybe related: https://github.com/James-Yu/LaTeX-Workshop/issues/3988
我曾经自定义使用过musixflx
宏包需要的musixflx
命令,在LW
上是有效的,感觉就是James Yu没有在上游提供支持,上面的issues好像也没有下文了....
感谢雾月老师@u10307 细心的解答,通过这样的设定,确实可以在VS Code中使用ConTeXt了。
至于我在TeX Studio中使用ConTeXt编译并生成正确的.pdf文件,主要是参考了这个网站,其中有如下介绍,我将ConTeXt(LuaTeX)对应的命令添加到TeXStudio的用户命令中,再将此用户命令添加到编辑器的工具栏,点击ConTeXt编译按钮,便非常迅速地得到了编译结果。

@u101077 ConTeXt 大概是在 2022 年的时候就默认使用 LuaMetaTeX 了,这篇文章已经部分过时了。
@u10307 这是意味着如果要在LaTeX-workshop使用
ConTeXt.exe
编译文件则必须加上% !TEX root = main.tex
作为magic command
吗?@u70550 暂时只能如此。
@u10307 实际上 latex workshop 可以修改主文件标识
rootFile.indicator
,但目前是硬编码的,只接受两个固定的值,不能自由设置。@u10307 还想再请教下,我看到您贴出的PDF文档属性图,上面显示的“应用程序”是LuaTeX + ConTeXt MkIV而不是LuaMetaTeX,您又说LuaMetaTeX不带kpathsea库,意思是LuaMetaTeX没法做一些事(比如文件搜索或者判断文件名?),所以在未来一段时间内,LuaMetaTeX无法直接在LaTeX WorkShop中进行编译吗?
@u101077 不用第三方模块就可以,另行为luametatex安装第三方模块也可以。只是不能找到某些目录下的文件,一般 tikz 的文件都放在
..texmf-dist/tex/generic
这个文件夹下,luametatex 是找不到的。luametatex 也可以自己加载 kpse 库,这样就和其它引擎差不多了,可以看看 luametatex 的文档/contextgarden。