Quali sono le differenze tra i plugin LaTeX?


Risposte:


28

Non fornirò un confronto approfondito, poiché ho solo un'esperienza limitata con i diversi plugin. Conosco bene un paio di plugin ( LaTeX-Box e LaTeX-Suite ) e conosco molto bene un plugin, dato che lo sto sviluppando da solo: vimtex . Pertanto, scriverò principalmente su vimtex. Tuttavia, per prima cosa sottolineo alcuni riferimenti che potrebbero interessare gli altri.

Qualche panoramica e riferimenti

Ci sono molti plugin per Vim. Questi sono quelli che ho riconosciuto come almeno semi popolari:

Su tex.stackexchange.com è disponibile un vasto elenco di editor e IDE LaTeX. Fornisce una buona panoramica in generale, ma offre anche una panoramica dei plugin per Vim:

vimtex

vimtex si basa su LaTeX-Box. È iniziato dopo aver contribuito per qualche tempo alla correzione di errori e agli aggiornamenti di LaTeX-Box. Mi sono reso conto che il plugin potrebbe essere scritto in un modo molto più moderno se lo scrivessi da zero. Ho prima messo a nudo la maggior parte delle funzionalità e costruito un "motore" più robusto e modulare. Ho quindi aggiunto funzionalità e penso che oggi abbia la maggior parte delle funzionalità di LaTeX-Box e alcune.

Invece di dare un elenco completo di funzionalità (vedi invece qui per quello ), cercherò piuttosto di evidenziare alcune delle differenze tra vimtex e altri plugin. Tuttavia, voglio fornire alcune affermazioni in grassetto:

  • vimtex è il plug-in Vim più moderno per LaTeX disponibile oggi
  • Il codice è di alta qualità e attualmente è gestito attivamente da me stesso
  • Il plugin è per lo più stabile, anche se alcune funzionalità sono ancora in fase di sviluppo (e come tali potrebbero essere soggette a modifiche e aggiornamenti)

vimtex vs LaTeX-Box

Poiché vimtex si basa su LaTeX-Box, ha ovviamente principi simili. L'idea è di mantenere le cose semplici e di risolvere i problemi di condivisione non sono già risolti da altri plugin migliori. Utilizza latexmk per compilare i documenti LaTeX e si basa sul plug-in Vim interno per l'evidenziazione della sintassi.

Al momento c'è una funzionalità importante in LaTeX-Box che manca in vimtex: compilation single-shot con callback . Il motivo per cui questa funzione non è presente in Vimtex è semplicemente perché è complicato e non ho mai trovato un modo per implementarlo che sia abbastanza semplice per le mie preferenze (i suggerimenti sono ben accetti, per favore non esitate ad aprire problemi o tirare richieste ).

vimtex vs LaTeX-Suite

La differenza principale tra vimtex e LaTeX-Suite è probabilmente che vimtex non tenta di implementare un IDE completo per LaTeX all'interno di Vim. Per esempio:

  • vimtex non fornisce una funzionalità di frammento completo, poiché è meglio gestita da UltiSnips o Neosnippet o motori di frammenti simili.
  • vimtex si basa sui principi di Vim: fornisce oggetti di testo per ambienti, matematica in linea, fornisce movimenti per sezioni e paragrafi
  • vimtex utilizza latexmkper la compilazione con una funzione di richiamata per ottenere un feedback immediato sugli errori di compilazione
  • vimtex è molto modulare: se non ti piace una funzione, puoi disattivarla.

Voglio solo chiarire: vimtexpuò lavorare fianco a fianco Latex-Suite, il che significa che puoi ottenere il meglio dei due plugin contemporaneamente . :)
llinfeng,

In che modo vimtex si confronta con qualcosa come usare coc insieme a coc-texlab? Potete usarli entrambi insieme?
Michiel Van Couwenberghe

12

Non posso fare paragoni, poiché Vim-LaTeX è l'unico plug-in LaTeX che ho usato. Uso Vim-LaTeX da quasi un anno. Quindi parlerò solo di Vim-LaTeX.

Ci sono molte funzioni presenti in Vim-LaTeX. Non li ricordo tutti. Parlerò solo di funzionalità che conosco e utilizzo costantemente.

Nota: questa è la mia esperienza utente limitata , che può essere molto fuorviante . Non sono un utente esperto di Vim. E non so nulla di Vimscript.

IMAP () e <C-j>Jumpping

IMAP()Le funzioni di funzione e <C-j>jumpping sono fornite separatamente come plugin imaps.vimnel bundle Vim-LaTeX. Sono potenti funzionalità e potrebbero essere molto utili anche quando non si scrive LaTeX.

  • IMAP()La funzione fornisce un modo più naturale per eseguire mappature della modalità di inserimento e modelli in generale rispetto a quelli incorporati imape iabbrev, IMO.

  • <C-j>il jumpping è utilizzato da molte funzionalità di completamento di Vim-LaTeX. Un punto di salto è indicato da <++>.

  • I mapping dei tasti della modalità di inserimento incorporati sono implementati come IMAP()chiamate. Ad esempio, puoi trovare un lungo elenco di IMAP()chiamate utili nel main.vimfile:

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

Quindi quando digiti dire (), il cursore si posizionerà automaticamente tra parentesi, sostituendo il primo <++>. Dopo aver finito di digitare all'interno, calcia <C-j>e batti, il cursore si sposterà da parentesi e continuerai a digitare in avanti. Una volta abituato, inizia a formare un flusso di battitura che crea dipendenza ...

Vedete dall'alto, una \left \rightcoppia può essere digitata facilmente con una doppia corsa della sua parentesi di apertura. E il <C-j>salto fa scorrere la digitazione.

Un grosso problema IMAP()e la <C-j>cosa è che rovinano la tua ultima cronologia delle modifiche . (Un bug che desidero correggere a lungo.) Pertanto, potresti provare un comportamento imprevisto quando provi a ripetere l'ultima modifica .se la "presunta ultima modifica" contiene queste chiamate di funzione.

  • Puoi eseguire tutti i tipi di mappature utilizzando IMAP(), dalle semplici mappature dei tasti a modelli più complessi. Ecco alcuni esempi dei miei mapping ( 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 fatto interessante riguardo al imaps.vimplugin è che si tratta di un plugin globale, il che implica il suo potenziale utilizzo al di là di LaTeX. In effetti, utilizzo <++>e <C-j>jumppings (combinandoli con altri plug-in) per creare modelli di frammenti di codice in C.

<F5> <F7> Inserimento di comandi e ambienti

Uno svantaggio IMAP()è che la combinazione di tasti non può più essere utilizzata nel testo normale (a meno che non si annulli la mappatura di u). Nei casi che si desidera solo per innescare la mappatura come si desidera, l' <F5>e <F7>tornare utile. Questi due tasti vengono utilizzati rispettivamente per l' attivazione di ambienti e l'inserimento di comandi inline. E si comportano diversamente in base alla modalità e alle personalizzazioni dell'utente.

  • In modalità Inserisci / Normale, quando il cursore sta attaccando una parola o si trova nella parola, premendo <F5>per impostazione predefinita si inserirà un ambiente di base del modulo

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

    basato sulla parola; premendo <F7>per impostazione predefinita verrà inserito un comando in linea di base del modulo \word{}<++>basato sulla parola.

  • "Per impostazione predefinita", intendo che puoi personalizzare il comportamento di una parola specifica quando attivato da <F5>/ <F7>. Ecco alcune delle mie impostazioni ( .vimrc):

    let g:Tex_Com_newcommand = "\\newcommand{<++>}[<++>]{<++>}<++>"
    let g:Tex_Com_latex = "{\\LaTeX}<++>"
    let g:Tex_Com_D = "\\D{<++>}{<++>}<++>"
    
  • In modalità Inserisci / Normale, quando il cursore non è attaccato a nulla (ovvero solo ), premendo <F5>/ <F7>verrà richiesto un menu per selezionare l'ambiente / comando da inserire. Oppure puoi digitare il nome dell'ambiente / comando desiderato in basso. Personalmente, lo uso raramente <F5>/ in <F7>questo modo.

  • Premere <F5>/ <F7>dopo aver selezionato visivamente un pezzo di testo verrà richiesto un menu per avvolgere il testo . Quindi il testo selezionato verrà inserito nell'ambiente / comando selezionato o digitato.

  • In modalità Inserisci / Normale, quando il cursore si trova nell'ambito di un ambiente / comando, premere <Shift>+<F5>/<F7>richiederà un menu per cambiare ambiente / comando .

Mappature chiave varie

  • Lettere greche. `aa `ze capitali corrispondenti.
  • Simboli come `8for \infty, `<for \le, `Ifor \int_{<++>}^{<++>}<++>, ecc.
  • Premendo "due volte si ottengono un paio di virgolette doppie TeX. Quindi, per digitare il "carattere letterale , devi usare.
  • Premendo in diversi ambienti di enumerazione si inserirà il \itemtag appropriato .
  • È possibile avvolgere parte della matematica visivamente selezionata in \left \rightcoppia per `(, `[e `{.
  • La piegatura è personalizzabile. Tre di controllo variabile globale ciò che può essere piegato: Tex_FoldedSections, Tex_FoldedMisc, e Tex_FoldedEnvironments.

A volte i mapping incorporati sono andati troppo oltre o non sono usciti da ciò che desideri. Puoi sovrascrivere i mapping integrati ridefinendoli in 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')

Imposta motore di compilazione multipla

Ho sempre bisogno di passare da pdflatexe xelatexmotore. Quindi, ho le seguenti righe nel mio .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>

Visualizza PDF, ricerca avanti e indietro tra Vim e il visualizzatore PDF

Questo è un argomento disordinato e complicato. Con un certo visualizzatore di PDF e una certa fortuna , può essere molto semplice. Ma è principalmente una questione di ricerca su Google.

suggerimenti

  • Dovresti trovare il tuo equilibrio tra la via LaTeX e la via Vim-LaTeX.
  • Vim-LaTeX non è affatto leggero. Ci sono alcune caratteristiche e / o mappature dei tasti che probabilmente non utilizzerai mai e devi sostituirle manualmente.
  • Usi Vim. Sai cosa significa pazienza . :-)

Nel complesso, penso che funzionerà bene se sei disposto a investire del tempo per domare la bestia. Detto questo, se avessi tempo e conoscenze adeguate, finirò sicuramente per ridurre le funzionalità generali ed esplorare i potenziali dell'integrazione con altri plugin.

Riferimenti

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.