许多 (La)TeX 编辑器都支持 LuaTeX 引擎。但是,哪一个编辑器对编写 LuaTeX 的支持最好?哪个编辑器或插件支持 Lua 和 (La)TeX 的语法高亮和自动完成等功能?
以 LaTeX 为中心的 IDE 的常见有用功能(例如集成查看器、正向和反向搜索、结构浏览器和拼写检查)仍然很重要,尽管还补充了一些 Lua 语法支持。
答案1
Vim 支持在一种语言中嵌入另一种语言的语法高亮。我用它来支持ConTeXt 区域中的 MP 和 Lua 语法突出显示。基本技巧是定义语法区域,如下所示:
unlet b:current_syntax
syn include @LUA syntax/lua.vim
syn region luatex matchgroup=contextIdentifier
\ start='\\startluacode'
\ end='\\stopluacode'
\ contains=@LUA
然后\startluacode
...里面的所有内容\stopluacode
都会有 Lua 语法高亮。下面是我的一个模块的代码截图(并不是说 lua 注释和环境os.remove
中的函数\startluacode
有语法高亮)
为了完整起见,这里有一个截图,显示了 tex 文件中突出显示的 Metapost 代码
相同的想法也适用于 LaTeX,如下所示:
unlet b:current_syntax
syn include @LUA syntax/lua.vim
syn region luatexSnip matchgroup=Snip
\ start='\\begin{\z(luacode\|luacode*\)}'
\ end='\\end{\z1}'
\ contains=@LUA
syn region luatexSnip matchgroup=Snip
\ start='\\\(directlua\|luadirect\){'
\ end='}'
\ contains=@LUA
highlight link Snip SpecialComment
Vim 也支持自动完成功能,但我不使用该功能,所以我不知道是否可以实现依赖于语言的自动完成功能。
其他要求,如向前/向后搜索、拼写检查、结构浏览器,都很简单,但即便如此,vim 也不是所谓的 IDE。
答案2
Emacs 还为 Lua 和 LaTeX 提供了语法高亮功能。我不知道 *.tex 文件中的 lua 块是否有类似“嵌入式语法高亮”的功能。通常,您可以通过将文件打开到间接缓冲区来实现这一点:在基本缓冲区中,您可以获得 LaTeX 高亮,在间接缓冲区中,您可以将主要模式更改为 lua 模式。
但是:至少对我来说,这还不能与 lua 模式一起使用。与将模式更改为 lua 模式无关,Emacs 仍在间接缓冲区中突出显示 LaTeX 关键字。
带有 AucTEX 的 Emacs 非常适合 LaTeX,但 lua 模式就没那么方便了。
亚历山大
答案3
无论如何,Aditya 的答案对我来说不起作用。我使用 LaTeX,这可能是原因。无论如何,受您的回答启发,我通过将以下内容放入“tex.vim”ft 插件文件中,使它适用于 LuaLaTeX。
autocmd BufWinEnter * if exists("b:current_syntax") && b:current_syntax == "tex"
autocmd BufWinEnter * unlet b:current_syntax
autocmd BufWinEnter * syntax include @TEX syntax/tex.vim
autocmd BufWinEnter * unlet b:current_syntax
autocmd BufWinEnter * syntax include @LUA syntax/lua.vim
autocmd BufWinEnter * syntax region luatex matchgroup=Snip start="%--beginlua--" end="%--endlua--" containedin=@TEX contains=@LUA
autocmd BufWinEnter * syntax region luatex matchgroup=Snip start="--beginlua--" end="--endlua--" containedin=@TEX contains=@LUA
autocmd BufWinEnter * highlight link Snip SpecialComment
autocmd BufWinEnter * let b:current_syntax="luatex"
autocmd BufWinEnter * endif
autocmd BufWinEnter
只需将这些代码放入文件中即可after/syntax/tex.vim
。但在我的例子中,这会导致一些问题并导致 vim 停止运行。因此我使用au
在文件加载过程的最后执行它们。
完成这些操作后,所有标有 和 的--beginlua--
代码--endlua--
都会高亮显示为 lua 代码。可以使用%
中\directlua
或luaexec
中允许行注释但不允许 lua 行注释的版本。以及中TeX
不带 的版本,等等。%
\begin{luacode}
答案4
我非常喜欢Sublime Text。他的多光标编辑功能简直太棒了(我知道现在其他编辑器也有这个功能,但它是第一个)。它可以根据上下文在同一文档中显示不同的高亮。但我不知道是否有人为 Lua(La)TeX 创建了设置。