Quelles sont les différences entre les plugins LaTeX?

Réponses:

28

Je ne ferai pas de comparaison approfondie, car je n’ai qu’une expérience limitée des différents plugins. Je connais bien quelques plugins ( LaTeX-Box et LaTeX-Suite ), et je connais très bien un plugin, puisque je le développe moi-même: vimtex . Ainsi, je vais surtout écrire sur vimtex. Cependant, je signalerai d’abord certaines références susceptibles d’intéresser d’autres.

Quelques survol et références

Il y a beaucoup de plugins pour Vim. Ce sont ceux que j'ai reconnus comme étant au moins semi populaires:

Sur tex.stackexchange.com , il y a une liste énorme d'éditeurs et d'EDI LaTeX. Cela donne un bon aperçu en général, mais il donne également un aperçu des plugins pour Vim:

vimtex

vimtex est basé sur LaTeX-Box. Tout a commencé après que j'ai apporté des corrections de bugs et des mises à jour à LaTeX-Box pendant un certain temps. J'ai réalisé que le plugin pourrait être écrit d'une manière beaucoup plus moderne si je l'écrivais à partir de zéro. J'ai d'abord dépouillé la plupart des fonctionnalités et construit un "moteur" plus robuste et modulaire. J'ai ensuite ajouté des fonctionnalités, et je pense qu'aujourd'hui, il possède la plupart des fonctionnalités de LaTeX-Box et plus encore.

Au lieu de donner une liste complète des fonctionnalités (voir plutôt ici pour cela ), je vais plutôt essayer de souligner certaines des différences entre vimtex et les autres plugins. Cependant, je tiens à fournir quelques revendications audacieuses:

  • vimtex est le plugin Vim le plus moderne pour LaTeX disponible aujourd'hui
  • Le code est de haute qualité et il est actuellement activement maintenu par moi-même.
  • Le plugin est généralement stable, même si certaines fonctionnalités sont encore en développement (et en tant que telles peuvent être sujettes à des modifications et à des mises à jour)

vimtex vs LaTeX-Box

Puisque vimtex est basé sur LaTeX-Box, ses principes sont évidemment similaires. L'idée est de garder les choses simples et de résoudre les problèmes qui ne sont pas déjà résolus par d'autres, de meilleurs plugins. Il utilise latexmk pour compiler les documents LaTeX et s’appuie sur le plug-in Vim interne pour la coloration syntaxique.

Il y a actuellement une fonctionnalité importante dans LaTeX-Box qui manque dans vimtex: la compilation en un coup avec rappel . La raison pour laquelle cette fonctionnalité n’est pas disponible dans vimtex est tout simplement parce qu’elle est compliquée et que je n’ai jamais trouvé un moyen de l’implémenter assez simple à mon goût (les suggestions sont les bienvenues, n’hésitez pas à ouvrir des problèmes ou à extraire des demandes. )

vimtex vs LaTeX-Suite

La principale différence entre vimtex et LaTeX-Suite est probablement le fait que vimtex n'essaye pas d'implémenter un IDE à part entière pour LaTeX dans Vim. Par exemple:

  • vimtex ne fournit pas une fonctionnalité complète de bout, parce que cela est mieux gérée par UltiSnips ou neosnippet ou moteurs snippet similaire.
  • vimtex repose sur les principes de Vim: il fournit des objets texte pour les environnements, des mathématiques en ligne, il fournit des mouvements pour les sections et les paragraphes
  • vimtex utilise latexmkpour la compilation une fonction de rappel pour obtenir un retour instantané sur les erreurs de compilation
  • vimtex est très modulaire: si vous n'aimez pas une fonctionnalité, vous pouvez la désactiver.
Karl Yngve Lervåg
la source
Je veux juste que ce soit clair: vous vimtexpouvez travailler côte à côte Latex-Suite, ce qui signifie que vous pouvez obtenir le meilleur des deux plugins en même temps . :)
llinfeng
Comment vimtex se compare-t-il à l'utilisation de coc en même temps que coc-texlab? Pouvez-vous utiliser les deux ensemble?
Michiel Van Couwenberghe
Je ne sais pas, je n'ai pas encore utilisé texlab. Mais je pense que cela devrait bien fonctionner ensemble. Vous pouvez utiliser texlab avec coc.nvim ou d’autres implémentations de LSP pour, par exemple, l’achèvement, ce qui pourrait fonctionner mieux que l’achèvement de vimtex. Mais je dirais que l’achèvement de vimtex est assez bon et qu’il ne devrait donc pas être beaucoup mieux. vimtex fournit également de nombreuses autres fonctionnalités, qui seraient orthogonales au LSP.
Karl Yngve Lervåg
Pour plus d'informations, consultez le commentaire de ce problème sur le référentiel vimtex.
Karl Yngve Lervåg
12

Je ne peux pas faire de comparaison, car Vim-LaTeX est le seul plugin LaTeX que j'ai utilisé. J'utilise Vim-LaTeX depuis presque un an. Je vais donc parler de Vim-LaTeX seul.

De nombreuses fonctionnalités sont présentes dans Vim-LaTeX. Je ne me souviens pas de tous. Je vais juste parler des fonctionnalités que je connais et utilise constamment.

Remarque: Voici mon expérience utilisateur limitée , ce qui peut être très trompeur . Je ne suis pas un utilisateur expérimenté de Vim. Et je ne sais rien de vimscript.

IMAP () et <C-j>Jumpping

IMAP()Les fonctions et fonctions de <C-j>sauts sont fournies séparément en tant que plug-in imaps.vimdans le groupe Vim-LaTeX. Ce sont des fonctionnalités puissantes et pourraient être très utiles même lorsque vous n’écrivez pas LaTeX.

  • IMAP()function fournit un moyen plus naturel de faire des mappages et des modèles en mode insertion en général que les fonctions intégrées imapet iabbrev, IMO.

  • <C-j>le saut est utilisé par de nombreuses fonctionnalités de complétion Vim-LaTeX. Un point de saut est indiqué par <++>.

  • Les mappages de touches intégrés en mode insertion sont implémentés en tant IMAP()qu'appels. Par exemple, vous pouvez trouver une longue liste d’ IMAP()appels utiles dans un main.vimfichier:

    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")
    ...
    

Ensuite, lorsque vous tapez say (), le curseur résidera automatiquement entre les parenthèses, remplaçant le premier <++>. Une fois que vous avez fini de taper à l'intérieur, vous donnez des coups de pieds <C-j>et de poings, le curseur quittera la parenthèse et vous continuerez à taper. Une fois que vous êtes habitué, il commence à former un flux de dactylographie qui crée une dépendance ...

Vous voyez ci-dessus, une \left \rightpaire peut être facilement saisie avec un double trait de son support d’ouverture. Et les <C-j>sauts facilitent la frappe.

Un pépin majeur de IMAP()et <C-j>chose est que ils bousille votre dernière histoire de changement . (Un bogue que je souhaite corriger depuis longtemps.) Par conséquent, vous pouvez rencontrer un comportement inattendu lorsque vous essayez de rétablir votre dernière modification .si votre "supposée dernière modification" contient ces appels de fonction.

  • Vous pouvez faire toutes sortes de mappages en utilisant IMAP(), des mappages de clés simples aux gabarits plus complexes. Voici quelques exemples de mes mappages ( 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')
    
  • Un fait intéressant à propos du imaps.vimplugin est qu’il s’agit d’un plugin global, ce qui implique une utilisation potentielle au-delà de LaTeX. En effet, j’utilise <++>et <C-j>jarretières (combinaison avec d’autres plugins) pour construire des modèles d’extraits de code en C.

<F5> <F7> Insertion de commandes et d'environnements

Un inconvénient IMAP()est que la combinaison de touches ne peut plus être utilisée en texte normal (à moins d’annuler le mappage u). Dans les cas où vous souhaitez simplement déclencher le mappage à votre guise, le <F5>et vous serez <F7>utile. Ces deux clés servent à déclencher des environnements et à insérer des commandes en ligne, respectivement. Et ils se comportent différemment selon le mode et les personnalisations de l'utilisateur.

  • En mode Insertion / Normal, lorsque le curseur attache un mot ou est dans le mot, le fait d’appuyer <F5>insérera par défaut un environnement de base du formulaire.

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

    basé sur le mot; appuyez sur <F7>pour insérer par défaut une commande en ligne de base du formulaire en \word{}<++>fonction du mot.

  • "Par défaut", je veux dire que vous pouvez personnaliser le comportement d'un mot spécifique lorsqu'il est déclenché par <F5>/ <F7>. Voici quelques-uns de mes paramètres ( .vimrc):

    let g:Tex_Com_newcommand = "\\newcommand{<++>}[<++>]{<++>}<++>"
    let g:Tex_Com_latex = "{\\LaTeX}<++>"
    let g:Tex_Com_D = "\\D{<++>}{<++>}<++>"
    
  • Dans Insertion / mode normal, lorsque le curseur est pas attaché à quoi que ce soit (aka seul ), en appuyant sur <F5>/ <F7>invitera à vous un menu pour sélectionner l' environnement / commande à insérer. Ou vous pouvez taper le nom de l’environnement / commande souhaité en bas. Personnellement, j'utilise rarement <F5>/ de <F7>cette façon.

  • Appuyez sur <F5>/ <F7>après avoir sélectionné visuellement un morceau de texte, un menu apparaîtra pour envelopper le texte . Ensuite, le texte sélectionné sera encapsulé dans l'environnement / la commande que vous avez sélectionnée ou saisie.

  • En mode Insertion / Normal, lorsque le curseur se trouve dans la portée d'un environnement / d'une commande, appuyez sur pour <Shift>+<F5>/<F7>afficher un menu permettant de modifier l'environnement / la commande .

Divers mappages de clés

  • Lettres grecques. `aaux `zcapitales correspondantes.
  • Symboles comme `8pour \infty, `<pour \le, `Ipour \int_{<++>}^{<++>}<++>, etc.
  • Un "double appui donne une paire de guillemets TeX. Donc, pour taper un "caractère littéral , vous devez utiliser.
  • En appuyant sur dans plusieurs environnements d'énumération, vous insérez la \itembalise appropriée .
  • Vous pouvez encapsuler une partie des mathématiques sélectionnée visuellement \left \rightpar `(, `[et `{.
  • Le pliage est personnalisable. Trois contrôle variable globale ce qui peut être plié: Tex_FoldedSections, Tex_FoldedMiscet Tex_FoldedEnvironments.

Parfois, les mappages intégrés vont trop loin ou ne renoncent pas à ce que vous voulez. Vous pouvez remplacer les mappages intégrés en les redéfinissant dans 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')

Définir plusieurs moteurs de compilation

J'ai toujours besoin de basculer entre pdflatexet xelatexmoteur. Ainsi, j'ai les lignes suivantes dans mon .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>

Afficher les fichiers PDF, les recherches en avant et en arrière entre Vim et le visualiseur PDF

C'est un sujet compliqué et compliqué. Avec une certaine visionneuse PDF et une certaine chance , cela peut être très facile. Mais c'est surtout une question de recherche sur Google.

Suggestions

  • Vous devriez trouver votre équilibre entre la méthode LaTeX et la méthode Vim-LaTeX.
  • Vim-LaTeX n'est pas du tout léger. Il existe certaines fonctionnalités et / ou mappages de clés que vous n'utiliserez probablement jamais et vous devez les remplacer manuellement.
  • Vous utilisez Vim. Vous savez ce que signifie patience . :-)

Dans l’ensemble, je pense que cela fonctionnera bien si vous êtes prêt à investir un peu de temps pour apprivoiser la bête. Cela étant dit, si j'avais le temps et les connaissances nécessaires, je vais certainement affiner les fonctionnalités et explorer le potentiel de l'intégration avec d'autres plugins.

Les références

Naitree
la source