Apa perbedaan antara plugin LaTeX?

Jawaban:

28

Saya tidak akan memberikan perbandingan mendalam, karena saya hanya memiliki pengalaman terbatas dengan berbagai plugin. Saya tahu beberapa plugin dengan baik ( LaTeX-Box dan LaTeX-Suite ), dan saya tahu satu plugin dengan sangat baik, karena saya mengembangkannya sendiri: vimtex . Jadi, saya kebanyakan akan menulis tentang vimtex. Namun, saya pertama-tama akan menunjukkan beberapa referensi yang mungkin menarik bagi orang lain.

Beberapa ikhtisar dan referensi

Ada banyak plugin untuk Vim. Inilah yang saya akui paling tidak semi populer:

Di tex.stackexchange.com , ada sejumlah besar editor dan IDE LaTeX. Ini memberikan ikhtisar yang bagus secara umum, tetapi juga memberikan beberapa ikhtisar plugin untuk Vim:

vimtex

vimtex didasarkan pada LaTeX-Box. Itu dimulai setelah saya berkontribusi perbaikan bug dan pembaruan untuk LaTeX-Box untuk beberapa waktu. Saya menyadari bahwa plugin dapat ditulis dengan cara yang jauh lebih modern jika saya menulisnya dari awal. Saya pertama kali menanggalkan sebagian besar fitur dan membangun "mesin" yang lebih kuat dan modular. Saya kemudian menambahkan fitur, dan saya pikir hari ini ia memiliki sebagian besar fitur LaTeX-Box dan kemudian beberapa.

Alih-alih memberikan daftar lengkap fitur (lihat di sini untuk itu ), saya lebih suka mencoba menunjukkan beberapa perbedaan antara vimtex dan plugin lainnya. Namun, saya ingin memberikan beberapa klaim berani:

  • vimtex adalah plugin Vim paling modern untuk LaTeX yang tersedia saat ini
  • Kode ini berkualitas tinggi dan saat ini sedang dikelola sendiri oleh saya
  • Pengaya sebagian besar stabil, meskipun beberapa fitur masih dikembangkan (dan karena itu dapat berubah dan diperbarui)

vimtex vs LaTeX-Box

Karena vimtex didasarkan pada LaTeX-Box, itu jelas memiliki prinsip yang sama. Idenya adalah untuk menjaga hal-hal sederhana dan untuk menyelesaikan masalah yang belum diselesaikan oleh plugin lain yang lebih baik. Ini menggunakan latexmk untuk mengkompilasi dokumen LaTeX, dan itu dibangun di atas plugin Vim internal untuk penyorotan sintaksis.

Saat ini ada satu fitur penting di LaTeX-Box yang tidak ada di vimtex: Kompilasi sekali pakai dengan panggilan balik . Alasan mengapa fitur ini tidak ada di vimtex adalah hanya karena itu rumit, dan bahwa saya tidak pernah menemukan cara untuk mengimplementasikannya yang cukup sederhana untuk preferensi saya sendiri (saran dipersilahkan, jangan ragu untuk membuka masalah atau menarik permintaan ).

vimtex vs LaTeX-Suite

Perbedaan utama antara vimtex dan LaTeX-Suite mungkin vimtex tidak mencoba untuk mengimplementasikan IDE yang lengkap untuk LaTeX di dalam Vim. Misalnya:

  • vimtex tidak menyediakan fitur cuplikan penuh, karena ini lebih baik ditangani oleh UltiSnips atau neosnippet atau mesin cuplikan serupa.
  • vimtex dibangun berdasarkan prinsip-prinsip Vim: Ini menyediakan objek teks untuk lingkungan, inline matematika, ini menyediakan gerakan untuk bagian dan paragraf
  • vimtex digunakan latexmkuntuk kompilasi dengan fitur panggilan balik untuk mendapatkan umpan balik instan tentang kesalahan kompilasi
  • vimtex sangat modular: jika Anda tidak menyukai fitur, Anda dapat mematikannya.
Karl Yngve Lervåg
sumber
Hanya ingin membuatnya jelas: vimtexdapat bekerja berdampingan Latex-Suite, yang berarti Anda bisa mendapatkan yang terbaik dari dua plugin sekaligus . :)
llinfeng
12

Saya tidak bisa melakukan perbandingan, karena Vim-LaTeX adalah satu-satunya plugin LaTeX yang saya gunakan. Saya telah menggunakan Vim-LaTeX selama hampir setahun. Jadi saya akan berbicara tentang Vim-LaTeX sendirian.

Ada banyak fitur yang hadir di Vim-LaTeX. Saya tidak ingat semuanya. Saya hanya akan berbicara tentang fitur yang saya tahu dan gunakan terus-menerus.

Catatan: Ini adalah pengalaman pengguna saya yang terbatas , yang mungkin sangat menyesatkan . Saya bukan pengguna Vim berpengalaman. Dan saya tidak tahu apa-apa tentang vimscript.

IMAP () dan <C-j>Jumpping

IMAP()fungsi dan fungsi <C-j>lompatan disediakan secara terpisah sebagai plugin imaps.vimdalam bundel Vim-LaTeX. Mereka adalah fitur yang kuat dan bisa sangat berguna bahkan ketika Anda tidak sedang menulis LaTeX.

  • IMAP()fungsi menyediakan cara yang lebih alami untuk melakukan insert modus pemetaan dan template secara umum dari built-in imapdan iabbrev, IMO.

  • <C-j>jumpping digunakan oleh banyak fitur penyelesaian Vim-LaTeX. Titik lompatan ditunjukkan oleh <++>.

  • Pemetaan tombol mode bawaan diimplementasikan sebagai IMAP()panggilan. Misalnya, Anda dapat menemukan daftar panjang IMAP()panggilan berguna dalam 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")
    ...
    

Kemudian ketika Anda mengetik mengatakan (), kursor akan berada secara otomatis di antara tanda kurung, menggantikan yang pertama <++>. Setelah Anda selesai mengetik di dalam, Anda menendang <C-j>dan memukul , kursor akan keluar dari tanda kurung dan Anda terus mengetik ke depan. Setelah Anda terbiasa, itu mulai membentuk aliran pengetikan yang agak membuat ketagihan ...

Anda lihat dari atas \left \rightsepasang dapat diketik dengan mudah dengan double stroke dari braket pembuka. Dan <C-j>melompat membuat aliran pengetikan.

Satu kesalahan besar IMAP()dan <C-j>hal adalah mereka mengacaukan riwayat perubahan terakhir Anda . (Satu bug yang ingin saya perbaiki untuk waktu yang lama.) Oleh karena itu, Anda mungkin menemukan perilaku yang tidak terduga ketika mencoba mengulang perubahan terakhir Anda dengan .jika "perubahan terakhir yang seharusnya" Anda berisi panggilan fungsi ini.

  • Anda dapat melakukan semua jenis pemetaan menggunakan IMAP(), dari pemetaan kunci sederhana hingga templating yang lebih kompleks. Berikut adalah beberapa contoh pemetaan saya ( 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')
    
  • Fakta menarik tentang imaps.vimplugin adalah plugin global, yang menyiratkan potensi penggunaannya di luar LaTeX. Memang, saya menggunakan <++>dan <C-j>melompat - lompat (menggabungkan dengan plugins lain) untuk membangun template potongan kode di C.

<F5> <F7> Penyisipan Perintah dan Lingkungan

Salah satu kelemahannya IMAP()adalah bahwa kombinasi tombol tidak dapat digunakan dalam teks normal lagi (kecuali jika Anda membatalkan pemetaan dengan u). Dalam hal Anda hanya ingin memicu pemetaan seperti yang Anda inginkan, <F5>dan <F7>berguna. Kedua kunci ini digunakan untuk masing-masing lingkungan pemicu dan penyisipan perintah inline. Dan mereka berperilaku berbeda berdasarkan mode dan kustomisasi dari pengguna.

  • Dalam Mode Sisipkan / Normal, ketika kursor melampirkan kata atau di dalam kata, secara otomatis menekan <F5>akan memasukkan lingkungan dasar formulir

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

    berdasarkan kata; Menekan <F7>akan secara default menyisipkan perintah inline dasar formulir \word{}<++>berdasarkan kata.

  • "Secara default", maksud saya Anda dapat menyesuaikan perilaku kata tertentu saat dipicu oleh <F5>/ <F7>. Berikut adalah beberapa pengaturan saya ( .vimrc):

    let g:Tex_Com_newcommand = "\\newcommand{<++>}[<++>]{<++>}<++>"
    let g:Tex_Com_latex = "{\\LaTeX}<++>"
    let g:Tex_Com_D = "\\D{<++>}{<++>}<++>"
    
  • Dalam Mode Sisipkan / Normal, ketika kursor tidak terpasang pada apa pun (alias sendirian ), menekan <F5>/ <F7>akan meminta Anda menu untuk memilih lingkungan / perintah untuk dimasukkan. Atau Anda dapat mengetik nama lingkungan / perintah yang diinginkan di bagian bawah. Secara pribadi, saya jarang menggunakan <F5>/ <F7>dengan cara ini.

  • Tekan <F5>/ <F7>setelah secara visual memilih sepotong teks akan meminta menu untuk membungkus teks . Kemudian teks yang dipilih akan dibungkus dengan lingkungan / perintah yang Anda pilih atau ketikkan.

  • Dalam Mode Sisipkan / Normal, ketika kursor berada dalam lingkup lingkungan / perintah, tekan <Shift>+<F5>/<F7>akan meminta menu untuk mengubah lingkungan / perintah .

Pemetaan Kunci Misc

  • Surat-surat Yunani. `ake `zdan ibukota yang sesuai.
  • Simbol seperti `8untuk \infty, `<untuk \le, `Iuntuk \int_{<++>}^{<++>}<++>, dll.
  • Menekan "dua kali mendapat sepasang tanda kutip ganda TeX. Jadi untuk mengetik "karakter literal , Anda harus menggunakan.
  • Menekan di beberapa lingkungan enumerasi akan menyisipkan \itemtag yang sesuai .
  • Anda dapat membungkus bagian matematika yang dipilih secara \left \rightberpasangan dengan `(, `[dan `{.
  • Lipat bisa disesuaikan. Tiga variabel global kontrol apa yang bisa dilipat: Tex_FoldedSections, Tex_FoldedMisc, dan Tex_FoldedEnvironments.

Terkadang pemetaan bawaan baru saja berjalan terlalu jauh atau tidak berhenti seperti yang Anda inginkan. Anda dapat mengesampingkan pemetaan bawaan dengan mendefinisikannya kembali di 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')

Atur Multiple Compilation Engine

Saya selalu perlu beralih antara pdflatexdan xelatexmesin. Jadi, saya memiliki baris berikut di .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>

Lihat PDF, Maju dan Mundur Cari antara Vim dan PDF viewer

Ini adalah topik yang berantakan dan rumit. Dengan penampil PDF tertentu dan sedikit keberuntungan , itu bisa sangat mudah. Tapi ini terutama masalah pencarian google.

Saran

  • Anda harus menemukan saldo Anda antara cara LaTeX dan cara Vim-LaTeX.
  • Vim-LaTeX sama sekali tidak ringan. Ada beberapa fitur dan / atau pemetaan kunci yang mungkin tidak akan pernah Anda gunakan dan Anda harus menimpanya secara manual.
  • Anda menggunakan Vim. Anda tahu apa artinya kesabaran . :-)

Secara keseluruhan, saya pikir ini akan bekerja dengan baik jika Anda bersedia meluangkan waktu untuk menjinakkan binatang buas. Yang sedang berkata, seandainya saya punya waktu dan pengetahuan yang memadai, saya pasti akan menipiskan fitur-fitur overhead dan mengeksplorasi potensi integrasi dengan plugin lain.

Referensi

Naitree
sumber