介绍
ConTeXt,与 LaTeX 类似,是基于 TeX 的宏排版系统:
https://wiki.contextgarden.net
https://wiki.contextgarden.net/Input_and_compilation/Text_editors/Vim
ConTeXt 插件提供语法高亮、补全和排版 ConTeXt 文档的所需支持。建议使用
:ConTeXt 来排版文档,这会调用在 $PATH 上找到的 mtxrun 脚本。
要更精细地控制命令及其环境,可直接调用 context.Typeset() (老式 Vim 脚本里可
用 context#Typeset() )。例如,假定在 ~/context 下安装了 ConTeXt,可如下定义
函数:
import autoload 'context.vim'
var os = "linux" # 更换为用户的实际系统
var arch = "arm64" # 更换为用户的实际架构
def MyConTeXt()
var env = {
'PATH': $'{$HOME}/context/tex/texmf-{os}-{arch}/bin:{$PATH}'
}
context.Typeset("%", env)
enddef
nnoremap <silent><buffer><leader>t <scriptcmd>MyConTeXt()<cr>
此代码应放在 ~/.vim/after/ftplugin/context.vim 。
context.Typeset() 接受可选的第三参数,用于指定定制的排版命令。此参数必须是接
受一个路径参数的函数,并返回以 list 形式出现的排版命令。例如:
def ConTeXtCustomCommand(path: string): list<string>
return ['mtxrun', '--script', 'context', '--nonstopmode', path]
enddef
def MyContext()
context.Typeset("%", v:none, ConTeXtCustomCommand)
enddef
大型项目的组织方式通常是一个根文档和若干章节文件。编辑章节文件时,最好可以直接
在其上调用 :ConTeXt ,而无需先切换到根文件。为此,可在每个章节文件的头部加入
"魔术行",指定根文件的相对路径。例如:
% !TEX root = ../MyRoot.tex
Vim 会在当前缓冲区头十行里寻找此魔术行: 如果找到,会排版该行指定的根文档,而非
当前缓冲区。根文档无需先在 Vim 中打开。
要扩展补全和语法高亮,可用 ConTeXt 生成支持文件,并加入到用户配置文件中。假定
配置文件位于 ~/.vim ,可用:
mkdir -p ~/.vim/syntax/shared
cd ~/.vim/syntax/shared
mtxrun --script interface --vim
末尾的命令会创建以下语法文件:
- context-data-context.vim ;
- context-data-interfaces.vim ;
- context-data-metafun.vim ;
- context-data-tex.vim .
这些文件 (如果已存在) 会被自动载入以增强语法高亮。同一命令也可用于更新这些语法
文件。
ft-context-commands
命令
:ConTeXt
会启动后台 job ,对当前缓冲区的文档进行排版。此命令接受可选的缓冲区名,以选
择另一个缓冲区进行排版。
:ConTeXtLog
会编辑当前缓冲区包含的源代码对应的日志文件。
:ConTeXtJobsStatus
会回显当前在后台运行的作业数目。
:ConTeXtStopJobs
会停止当前在后台运行的所有 ConTeXt 作业。
ft-context-settings
设置
'b:context_ignore_makefile'
'g:context_ignore_makefile'
:make 可用于 (同步) 排版文档。存在 Makefile 而未置位本选项时,会使用标准
make 。置位本选项时,不管有没有 Makefile 存在都会调用 mtxrun 。
g:context_ignore_makefile = 0
注意: 在使用 :make 前,必须确保缓冲区的工作目录被设为待排版文件所在的目录。
此外,还要注意 :make 会在 $PATH 里搜索 mtxrun 。
'g:context_extra_options'
传递给 mtxrun 的额外选项组成的列表。
g:context_extra_options = []
'b:context_include'
'g:context_include'
文件类型/GROUP 组对的字典,用于决定 \startGROUP 和 \stopGROUP 之间应用哪种语法
高亮。缺省是在 \startXML 和 \stopXML 之间使用 XML 高亮。
g:context_include = {'xml': 'XML'}
注意: Lua 和 MetaPost 在对应块的范围内总会被高亮。
'g:no_context_maps'
置位时,不定义映射。
g:no_context_maps = 0
ft-context-mappings
映射
tp "重新排版 TeX 段落" (动作)。
i$ "内含内嵌数学块" (文本对象选择)。
a$ "一个内嵌数学块" (文本对象选择)。
]] [count] 个正向小节开始处。
[[ [count] 个反向小节开始处。
][ [count] 个正向小节结尾处。
[] [count] 个反向小节结尾处。
]} [count] 个正向块结尾处 (\stop...、\setup...、
\define...)。
[{ [count] 个反向块起始处 (\start...、\setup...、
\define...)。
vim:tw=78:sw=4:ts=8:noet:ft=help:norl: