LaTeX插件之间有什么区别?


Answers:


28

我不会提供深入的比较,因为我对不同插件的经验有限。我非常了解几个插件(LaTeX-BoxLaTeX-Suite),而且我非常了解一个插件,因为我自己开发了它:vimtex。因此,我将主要撰写有关vimtex的文章。但是,我将首先指出一些其他人可能感兴趣的参考。

一些概述和参考

Vim 有很多插件。这些是我认为至少是半流行的:

tex.stackexchange.com上,有大量的LaTeX编辑器和IDE。总的来说,它提供了很好的概述,但同时也提供了Vim插件的一些概述:

Vimtex

vimtex基于LaTeX-Box。在我为LaTeX-Box贡献了一些错误修复和更新之后,它开始了。我意识到,如果我从头开始编写插件,可以用一种更加现代的方式编写插件。我首先去除了大多数功能,并构建了更强大且模块化的“引擎”。然后,我添加了功能,今天我认为它具有LaTeX-Box的大部分功能,还有一些。

我没有给出完整的功能列表(请参阅此处),而是尝试指出vimtex和其他插件之间的一些区别。但是,我想提出一些大胆的主张:

  • vimtex是当今可用于LaTeX 的最现代的 Vim插件
  • 该代码是高质量的,目前由我自己积极维护
  • 即使某些功能仍在开发中,该插件仍然稳定(因此可能会进行更改和更新)

vimtex与LaTeX-Box

由于vimtex基于LaTeX-Box,因此显然具有相似的原理。这个想法是使事情保持简单并解决其他更好的插件尚未解决的问题。它利用Latexmk来编译LaTeX文档,并且基于内部Vim插件进行语法高亮显示。

LamX-Box中当前有一个重要的功能在vimtex中缺失:具有callback的单次编译。该功能不存在于vimtex中的原因仅仅是因为它很复杂,而且我从未找到一种可以根据自己的喜好实现足够简单的方法(欢迎提出建议,请不要犹豫打开问题或提出请求) )。

vimtex与LaTeX-Suite

vimtex和LaTeX-Suite之间的主要区别可能是vimtex不会尝试在Vim中为LaTeX实现完整的IDE。例如:

  • vimtex没有提供完整的代码段功能,因为UltiSnipsneosnippet或类似的代码段引擎可以更好地处理此功能。
  • vimtex建立在Vim原理的基础上:提供环境的文本对象,内联数学,提供节和段落的运动
  • vimtex latexmk用于带有回调功能的编译以获取编译错误的即时反馈
  • vimtex是非常模块化的:如果您不喜欢某个功能,可以将其关闭。

只是想说明一下:vimtex可以与并肩使用Latex-Suite,这意味着您可以同时获得这两个插件中的精华。:)
llinfeng

12

我无法进行比较,因为Vim-LaTeX是我使用过的唯一LaTeX插件。我已经使用Vim-LaTeX近一年了。因此,我将仅谈论Vim-LaTeX。

许多存在于VIM-LaTeX的功能。我不记得所有人。我只会说说我一直知道并经常使用的功能。

注意:这些是我有限的用户体验,可能会引起误解。我不是经验丰富的Vim用户。而且我对vimscript一无所知。

IMAP()和<C-j>跳跃

IMAP()Vim-LaTeX软件包中<C-j>的插件分别提供了函数和跳转功能imaps.vim。它们是强大的功能,即使您不编写LaTeX也可能非常有用。

  • IMAP()与内置imapiabbrevIMO 相比,函数提供了更自然的方式来进行插入模式映射和模板化。

  • <C-j>许多Vim-LaTeX完成功能都使用了跳跃。跳点用表示<++>

  • 内置的插入模式键映射被实现为IMAP()调用。例如,您可以IMAP()main.vim文件中找到一长串有用的调用:

    call IMAP ('__', '_{<++>}<++>', "tex")
    call IMAP ('()', '(<++>)<++>', "tex")
    call IMAP ('[]', '[<++>]<++>', "tex")
    call IMAP ('{}', '{<++>}<++>', "tex")
    ...
    call IMAP ('((', '\left( <++> \right)<++>', "tex")
    call IMAP ('[[', '\left[ <++> \right]<++>', "tex")
    call IMAP ('{{', '\left\{ <++> \right\}<++>', "tex")
    ...
    

然后,当您键入say时(),光标将自动驻留在括号之间,替换第一个<++>。在内部输入完毕后,您将一脚踢动<C-j>并敲击,光标将移出括号,而您将继续向前输入。一旦习惯了它,它就会开始形成打字流,这会让人上瘾……

您可以从上方看到一\left \right对,只需轻敲其打开括号即可轻松键入。而<C-j>jumpping使得打字流。

的一个主要的毛刺IMAP()<C-j>的事情是,他们弄乱了你最后的更改历史记录。(我希望长期修复一个错误。)因此,.如果您的“假定的最后更改”包含这些函数调用,则在尝试重做最后的更改时可能会遇到意外的行为。

  • 您可以使用进行各种映射IMAP(),从简单的键映射到更复杂的模板。以下是一些我的映射示例(ftplugin/tex.vim):

    call IMAP('*EEQ',"\\begin{equation*}\<CR><++>\<CR>\\end{equation*}<++>",'tex')
    call IMAP('DEF',"\\begin{definition}[<++>]\<CR><++>\<CR>\\end{definition}<++>",'tex')
    call IMAP('BIC','\binom{<++>}{<++>}<++>','tex')
    call IMAP('PVERB','\PVerb{<++>}<++>','tex')
    call IMAP('VERB','\verb|<++>|<++>','tex')
    
  • 关于imaps.vim插件的一个有趣的事实是,它是一个全局插件,这意味着它的潜在用途超出了LaTeX。确实,我确实使用<++>and <C-j>jumppings(与其他插件结合)在C中构建代码段模板。

<F5> <F7> 插入命令和环境

的一个缺点IMAP()是,组合键不能再用于普通文本中(除非您通过撤消映射u)。在您只想触发所需映射的情况下,<F5><F7>会派上用场。这两个键分别用于触发环境和嵌入式命令插入。它们的行为基于用户的模式和自定义而有所不同。

  • 在“插入/普通模式”下,当光标附加一个单词或该单词在单词中时,<F5>默认情况下按将插入以下形式的基本环境:

    \begin{word}
    <Cursor>
    \end{word}<++>
    

    基于单词;<F7>默认情况下,按将插入\word{}<++>基于单词的表单的基本内联命令。

  • “默认”是指您可以自定义特定单词在<F5>/ 触发时的行为<F7>。这是我的一些设置(.vimrc):

    let g:Tex_Com_newcommand = "\\newcommand{<++>}[<++>]{<++>}<++>"
    let g:Tex_Com_latex = "{\\LaTeX}<++>"
    let g:Tex_Com_D = "\\D{<++>}{<++>}<++>"
    
  • 在插入/正常模式,当光标附加任何东西(又名),按<F5>/ <F7>会提示你一个菜单来选择环境/命令插入。或者,您可以在底部键入所需环境/命令的名称。就个人而言,我很少使用<F5>/ <F7>这种方式。

  • 在视觉上选择一段文字后,按<F5>/ <F7>会提示一个用于包装文字的菜单。然后,所选文本将被包装在您选择或键入的环境/命令中。

  • 在插入/普通模式下,当光标在环境/命令范围内时,按<Shift>+<F5>/<F7>将提示用于更改环境/命令的菜单。

杂项键映射

  • 希腊字母。`a`z相应的首都。
  • 诸如`8for \infty`<for \le`Ifor \int_{<++>}^{<++>}<++>等符号。
  • "两次将获得一对TeX双引号。因此,要键入文字"字符,必须使用。
  • 在多个枚举环境中按将插入适当的\item标签。
  • 您可以在包裹数学的视觉选定部分\left \right由一对`(`[`{
  • 折叠是可定制的。三个全局变量控制什么可以折叠:Tex_FoldedSectionsTex_FoldedMisc,和Tex_FoldedEnvironments

有时,内置映射距离太远或没有退出所需的映射。您可以通过在以下位置重新定义内置映射来覆盖它们after/ftplugin/tex.vim

call IMAP('`|','\abs{<++>}<++>','tex')
call IMAP('ETE',"\\begin{table}\<CR>\\centering\<CR>\\caption{<+Caption text+>}\<CR>\\label{tab:<+label+>}\<CR>\\begin{tabular}{<+dimensions+>}\<CR><++>\<CR>\\end{tabular}\<CR>\\end{table}<++>",'tex')
call IMAP('==','==','tex')
call IMAP('`\','`\','tex')

设置多重编译引擎

我总是需要在pdflatexxelatex引擎之间切换。因此,我的代码如下.vimrc

"switch to pdflatex
function SetpdfLaTeX()
    let g:Tex_CompileRule_pdf = 'pdflatex --interaction=nonstopmode -synctex=1 -src-specials $*'
endfunction
noremap <Leader>lp :<C-U>call SetpdfLaTeX()<CR>

"switch to xelatex
function SetXeLaTeX()
    let g:Tex_CompileRule_pdf = 'xelatex --interaction=nonstopmode -synctex=1 -src-specials $*'
endfunction
noremap <Leader>lx :<C-U>call SetXeLaTeX()<CR>

在Vim和PDF查看器之间查看PDF,向前和向后搜索

这是一个混乱而复杂的话题。有了特定的PDF查看器和一定的运气,它可以非常容易。但这主要是Google搜索的问题。

意见建议

  • 您应该在LaTeX方式和Vim-LaTeX方式之间找到平衡。
  • Vim-LaTeX一点也不轻。有些功能和/或键映射可能永远不会使用,您必须手动覆盖它们。
  • 您使用Vim。你知道耐心是什么意思。:-)

总体而言,我认为如果您愿意花一些时间驯服野兽,它将很好地工作。话虽这么说,但只要我有时间和足够的知识,我一定会减少开销的功能,并探索与其他插件集成的潜力。

参考文献

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.