Чем отличаются плагины LaTeX?

42

Существует несколько плагинов Tex для vim ( vim-latex , AutomaticLatexPlugin, скажем, пара).

Каковы различия в предоставляемых функциональных возможностях этих (названных мной и, возможно, других) плагинов TeX?


Вот пара связанных вопросов по SO:

GLS
источник

Ответы:

28

Я не буду давать подробное сравнение, поскольку у меня ограниченный опыт работы с различными плагинами. Я хорошо знаю пару плагинов ( LaTeX-Box и LaTeX-Suite ), и я очень хорошо знаю один плагин, так как сам его разрабатываю: vimtex . Таким образом, я буду в основном писать о vimtex. Однако сначала я укажу некоторые ссылки, которые могут представлять интерес для других.

Некоторый обзор и ссылки

Есть много плагинов для Vim. Вот те, которые я признал как минимум наполовину популярными:

На tex.stackexchange.com есть огромный список редакторов и интегрированных сред LaTeX. В целом он дает хороший обзор, но также предоставляет некоторые обзоры плагинов для Vim:

vimtex

vimtex основан на LaTeX-Box. Это началось после того, как я в течение некоторого времени вносил исправления ошибок и обновления в LaTeX-Box. Я понял, что плагин может быть написан гораздо более современным способом, если я написал его с нуля. Сначала я лишил большинство функций и построил более надежный и модульный «двигатель». Затем я добавил функции, и я думаю, что сегодня у него есть большинство функций LaTeX-Box, а затем и некоторые.

Вместо того, чтобы давать полный список возможностей (см. Здесь ), я скорее попытаюсь указать на некоторые различия между vimtex и другими плагинами. Тем не менее, я хочу представить несколько смелых заявлений:

  • vimtex - самый современный плагин Vim для LaTeX, доступный сегодня
  • Код высокого качества, и в настоящее время он активно поддерживается мной.
  • Плагин в основном стабилен, хотя некоторые функции все еще разрабатываются (и как таковые могут быть изменены и обновлены)

Vimtex против LaTeX-Box

Поскольку vimtex основан на LaTeX-Box, он, очевидно, имеет аналогичные принципы. Идея состоит в том, чтобы сделать вещи простыми и решать проблемы, которые еще не решены другими, лучшими плагинами. Он использует latexmk для компиляции документов LaTeX и использует внутренний плагин Vim для подсветки синтаксиса.

В настоящее время в vimtex отсутствует одна важная функция LaTeX-Box: одиночная компиляция с обратным вызовом . Причина, по которой эта функция отсутствует в vimtex, заключается просто в том, что она сложная, и я никогда не находил способ реализовать ее, достаточно простой для моих собственных предпочтений (предложения приветствуются, пожалуйста, не стесняйтесь открывать вопросы или запрашивать запросы) ).

vimtex vs LaTeX-Suite

Основное различие между vimtex и LaTeX-Suite, вероятно, заключается в том, что vimtex не пытается реализовать полноценную IDE для LaTeX внутри Vim. Например:

  • vimtex не предоставляет полную функцию фрагмента, потому что это лучше обрабатывается UltiSnips или neosnippet или подобными механизмами фрагмента.
  • vimtex основан на принципах Vim: он предоставляет текстовые объекты для окружения, встроенную математику, обеспечивает движения для разделов и абзацев
  • vimtex использует latexmkдля компиляции с функцией обратного вызова , чтобы получить мгновенную обратную связь об ошибках компиляции
  • vimtex очень модульный: если вам не нравится функция, вы можете отключить ее.
Карл Ингве Лерваг
источник
Просто хочу прояснить: vimtexможно работать бок о бок Latex-Suite, а это значит, что вы можете получить лучшее из двух плагинов одновременно . :)
llinfeng
Как vimtex сравнивается с чем-то вроде использования coc вместе с coc-texlab? Можете ли вы использовать их обоих вместе?
Мишель Ван Кувенбергх
Я не знаю, так как я еще не использовал texlab. Но я думаю, что это должно хорошо работать вместе. Вы можете использовать texlab с coc.nvim или другими LSP-реализациями, например, для завершения, которое может работать лучше, чем завершение vimtex. Но я бы сказал, что завершение vimtex довольно хорошо, и поэтому оно не должно быть намного лучше. Тем не менее, vimtex предоставляет множество других возможностей, которые будут ортогональны LSP.
Карл Ингве Лервог
Для получения дополнительной информации см. Этот комментарий к репозиторию vimtex.
Карл Ингве Лервог
12

Я не могу сделать сравнение, так как Vim-LaTeX - единственный плагин LaTeX, который я использовал. Я использую Vim-LaTeX почти год. Так что я буду говорить только о Vim-LaTeX.

В Vim-LaTeX есть много функций. Я не помню их всех. Я просто расскажу о функциях, которые я знаю и постоянно использую.

Примечание. Это мой ограниченный пользовательский опыт , который может вводить в заблуждение . Я не опытный пользователь Vim. И я ничего не знаю о vimscript.

IMAP () и <C-j>Jumpping

IMAP()Функция и функции <C-j>jumpping предоставляются отдельно как плагин imaps.vimв комплекте Vim-LaTeX. Они являются мощными функциями и могут быть очень полезны, даже если вы не пишете LaTeX.

  • IMAP()функция обеспечивает более естественный способ сделать вставки отображения режима и шаблонами в целом , чем встроенный imapи iabbrevИМО.

  • <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>прыжки делают поток ввода.

Одна из основного глюка 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. Действительно, я использую <++>и <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{<++>}{<++>}<++>"
    
  • В Insert / Normal Mode, когда курсор не прикреплен ни к чему (он же в одиночку ), нажатие <F5>/ <F7>подскажет вам меню для выбора среды / команду для вставки. Или вы можете ввести название желаемой среды / команды внизу. Лично я редко использую <F5>/ <F7>таким способом.

  • Нажмите <F5>/ <F7>после визуального выбора фрагмента текста, появится меню для переноса текста . Затем выделенный текст будет перенесен в среду / команду, которую вы выбрали или набрали.

  • В режиме вставки / обычного режима, когда курсор находится в области действия окружения / команды, нажатие <Shift>+<F5>/<F7>предложит меню для изменения окружения / команды .

Сопоставления разных ключей

  • Греческие Письма. `aв `zи соответствующие столицы.
  • Символы как `8для \infty, `<для \le, `Iдля \int_{<++>}^{<++>}<++>и т. Д.
  • "Двойное нажатие возвращает пару двойных кавычек TeX. Таким образом, чтобы ввести буквенный "символ, вы должны использовать.
  • Нажатие в нескольких средах перечисления вставит соответствующий \itemтег.
  • Вы можете обернуть визуально выбранную часть математики в \left \rightпары `(, `[и `{.
  • Складной можно настраивать. Три глобального регулятор , что может быть в сложенном виде : Tex_FoldedSections, Tex_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')

Установить множественный механизм компиляции

Мне всегда нужно переключаться между pdflatexи xelatexдвигателем. Таким образом, у меня есть следующие строки в моем .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>

Просмотр PDF, прямой и обратный поиск между Vim и PDF viewer

Это грязная и сложная тема. С определенным средством просмотра PDF и определенным количеством удачи это может быть очень легко. Но это в основном вопрос поиска в Google.

Предложения

  • Вы должны найти свой баланс между путями LaTeX и Vim-LaTeX.
  • Vim-LaTeX совсем не легкий. Есть некоторые функции и / или сопоставления клавиш, которые вы, возможно, никогда не будете использовать, и вам придется их вручную переопределить.
  • Вы используете Vim. Вы знаете, что означает терпение . :-)

В целом, я думаю, что это будет хорошо работать, если вы готовы потратить некоторое время, чтобы приручить зверя. Тем не менее, если бы у меня было время и достаточные знания, я, несомненно, уменьшу накладные расходы и изучу возможности интеграции с другими плагинами.

Ссылки

Naitree
источник