Sự khác biệt giữa các plugin LaTeX là gì?


42

Có một số plugin Tex cho vim ( vim-latex , AutomaticLatexPlugin để nói một vài).

Sự khác biệt về các chức năng được cung cấp giữa các plugin này (những cái tôi đặt tên và có thể là các plugin khác) là gì?


Dưới đây là một vài câu hỏi liên quan về SO:

Câu trả lời:


28

Tôi sẽ không cung cấp một so sánh chuyên sâu, vì tôi chỉ có kinh nghiệm hạn chế với các plugin khác nhau. Tôi biết rõ một vài plugin ( LaTeX-BoxLaTeX-Suite ) và tôi biết rất rõ một plugin, vì tôi đang tự mình phát triển nó: vimtex . Vì vậy, tôi sẽ chủ yếu viết về vimtex. Tuy nhiên, trước tiên tôi sẽ chỉ ra một số tài liệu tham khảo có thể được người khác quan tâm.

Một số tổng quan và tài liệu tham khảo

rất nhiều plugin cho Vim. Đây là những cái mà tôi đã công nhận là ít nhất là bán phổ biến:

Trên tex.stackexchange.com , có một danh sách rất lớn các trình soạn thảo và IDE LaTeX. Nó cung cấp một cái nhìn tổng quan đẹp nói chung, nhưng nó cũng cung cấp một số tổng quan về các plugin cho Vim:

vimtex

vimtex dựa trên LaTeX-Box. Nó bắt đầu sau khi tôi đã đóng góp sửa lỗi và cập nhật cho LaTeX-Box một thời gian. Tôi nhận ra rằng plugin có thể được viết theo cách hiện đại hơn nhiều nếu tôi viết nó từ đầu. Trước tiên tôi đã loại bỏ hầu hết các tính năng và xây dựng một "động cơ" mạnh mẽ và mô-đun hơn. Sau đó tôi đã thêm các tính năng và tôi nghĩ rằng ngày nay nó có hầu hết các tính năng của LaTeX-Box và sau đó là một số tính năng.

Thay vì đưa ra một danh sách đầy đủ các tính năng ( thay vào đó hãy xem ở đây ), tôi sẽ cố gắng chỉ ra một số khác biệt giữa vimtex và các plugin khác. Tuy nhiên, tôi muốn cung cấp một số tuyên bố táo bạo:

  • vimtex là plugin Vim hiện đại nhất dành cho LaTeX hiện có
  • Mã này là chất lượng cao và nó hiện đang được tích cực duy trì bởi bản thân mình
  • Plugin hầu hết ổn định, mặc dù một số tính năng vẫn đang được phát triển (và do đó có thể bị thay đổi và cập nhật)

vimtex vs LaTeX-Box

Vì vimtex dựa trên LaTeX-Box, nên rõ ràng nó có các nguyên tắc tương tự. Ý tưởng là để giữ cho mọi thứ đơn giản và để giải quyết vấn đề mà chúng chưa được giải quyết bằng các plugin khác tốt hơn. Nó sử dụng latexmk để biên dịch các tài liệu LaTeX và nó được xây dựng dựa trên plugin Vim nội bộ để làm nổi bật cú pháp.

Hiện tại có một tính năng quan trọng trong LaTeX-Box bị thiếu trong vimtex: Biên dịch bắn một lần với gọi lại . Lý do tính năng này không có trong vimtex đơn giản là vì nó phức tạp và tôi chưa bao giờ tìm được cách triển khai nó đủ đơn giản cho sở thích của riêng mình (xin đề xuất, xin đừng ngần ngại mở các vấn đề hoặc kéo yêu cầu ).

vimtex vs LaTeX-Suite

Sự khác biệt chính giữa vimtex và LaTeX-Suite có lẽ là vimtex không cố gắng thực hiện một IDE đầy đủ cho LaTeX bên trong Vim. Ví dụ:

  • vimtex không cung cấp tính năng đoạn trích đầy đủ, vì điều này được xử lý tốt hơn bởi UltiSnips hoặc neosnippet hoặc các công cụ đoạn trích tương tự.
  • vimtex xây dựng theo nguyên tắc Vim: Nó cung cấp các đối tượng văn bản cho môi trường, toán học nội tuyến, nó cung cấp các chuyển động cho các phần và đoạn văn
  • vimtex sử dụng latexmkđể biên dịch với tính năng gọi lại để nhận phản hồi tức thì về lỗi biên dịch
  • vimtex rất mô-đun: nếu bạn không thích một tính năng, bạn có thể tắt nó đi.

Chỉ muốn làm cho nó rõ ràng: vimtexcó thể làm việc song song với nhau Latex-Suite, điều đó có nghĩa là bạn có thể tận dụng tốt nhất hai plugin cùng một lúc . :)
llinfeng

12

Tôi không thể so sánh, vì Vim-LaTeX là plugin LaTeX duy nhất tôi đã sử dụng. Tôi đã sử dụng Vim-LaTeX được gần một năm. Vì vậy, tôi sẽ nói về Vim-LaTeX một mình.

nhiều tính năng hiện diện trong Vim-LaTeX. Tôi không nhớ tất cả chúng. Tôi sẽ chỉ nói về các tính năng mà tôi biết và sử dụng liên tục.

Lưu ý: Đây là những trải nghiệm người dùng hạn chế của tôi , có thể rất sai lệch . Tôi không phải là người dùng Vim dày dạn. Và tôi không biết gì về vimscript.

IMAP () và <C-j>Jumpping

IMAP()chức năng và chức năng <C-j>jumpping được cung cấp riêng như một plugin imaps.vimtrong gói Vim-LaTeX. Chúng là các tính năng mạnh mẽ và có thể rất hữu ích ngay cả khi bạn không viết LaTeX.

  • IMAP()chức năng cung cấp một cách tự nhiên hơn để làm chèn ánh xạ mode và khuôn mẫu nói chung so với built-in imapiabbrev, IMO.

  • <C-j>jumpping được sử dụng bởi nhiều tính năng hoàn thành Vim-LaTeX. Một điểm jumpping được chỉ định bởi <++>.

  • Ánh xạ khóa chế độ chèn tích hợp được thực hiện dưới dạng IMAP()các cuộc gọi. Ví dụ: bạn có thể tìm thấy một danh sách dài các IMAP()cuộc gọi hữu ích trong main.vimtệp:

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

Sau đó, khi bạn gõ nói (), con trỏ sẽ tự động nằm giữa cha mẹ, thay thế đầu tiên <++>. Sau khi bạn nhập xong, bạn đá <C-j>và đập, con trỏ sẽ di chuyển ra khỏi ngoặc đơn và bạn tiếp tục gõ về phía trước. Khi bạn đã quen với nó, nó bắt đầu hình thành một dòng gõ gây nghiện ...

Bạn nhìn thấy từ phía trên một \left \rightcặp có thể được gõ dễ dàng với hành trình kép của khung mở của nó. Và <C-j>jumpping làm cho dòng chảy.

Một trục trặc lớn IMAP()<C-j>điều đó là chúng làm rối tung lịch sử thay đổi cuối cùng của bạn . (Một lỗi tôi muốn sửa trong một thời gian dài.) Do đó, bạn có thể gặp phải hành vi không mong muốn khi cố gắng làm lại thay đổi cuối cùng của mình .nếu "thay đổi được cho là cuối cùng" của bạn có chứa các lệnh gọi hàm này.

  • Bạn có thể thực hiện tất cả các loại ánh xạ bằng cách sử dụng IMAP(), từ ánh xạ khóa đơn giản đến tạo khuôn phức tạp hơn. Dưới đây là một số ví dụ về ánh xạ của tôi ( 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')
    
  • Một sự thật thú vị về imaps.vimplugin là nó là một plugin toàn cầu, ngụ ý việc sử dụng tiềm năng của nó ngoài LaTeX. Thật vậy, tôi sử dụng <++><C-j>jumppings (kết hợp với các plugin khác) để xây dựng các mẫu đoạn mã trong C.

<F5> <F7> Chèn lệnh và môi trường

Một nhược điểm của IMAP()là tổ hợp phím không thể được sử dụng trong văn bản bình thường nữa (trừ khi bạn hoàn tác ánh xạ theo u). Trong các trường hợp mà bạn chỉ muốn kích hoạt ánh xạ như bạn muốn, <F5><F7>sẽ có ích. Hai khóa này được sử dụng để kích hoạt môi trường và chèn lệnh nội tuyến tương ứng. Và họ hành xử khác nhau dựa trên chế độ và các tùy chỉnh từ người dùng.

  • Trong Chế độ chèn / Chế độ bình thường, khi con trỏ đính kèm một từ hoặc trong từ đó, nhấn <F5>theo mặc định sẽ chèn một môi trường cơ bản của biểu mẫu

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

    dựa trên từ; nhấn <F7>theo mặc định sẽ chèn một lệnh nội tuyến cơ bản của biểu mẫu \word{}<++>dựa trên từ.

  • "Theo mặc định", ý tôi là bạn có thể tùy chỉnh hành vi của một từ cụ thể khi được kích hoạt bởi <F5>/ <F7>. Đây là một số cài đặt của tôi ( .vimrc):

    let g:Tex_Com_newcommand = "\\newcommand{<++>}[<++>]{<++>}<++>"
    let g:Tex_Com_latex = "{\\LaTeX}<++>"
    let g:Tex_Com_D = "\\D{<++>}{<++>}<++>"
    
  • Trong Insert / Normal Mode, khi con trỏ được không gắn liền với bất cứ điều gì (hay còn gọi là một mình ), nhấn <F5>/ <F7>sẽ nhắc cho bạn một thực đơn để chọn môi trường / lệnh để chèn. Hoặc bạn có thể gõ tên của môi trường / lệnh mong muốn ở phía dưới. Cá nhân, tôi hiếm khi sử dụng <F5>/ <F7>cách này.

  • Nhấn <F5>/ <F7>sau khi chọn trực quan một đoạn văn bản sẽ nhắc một menu để gói văn bản . Sau đó, văn bản được chọn sẽ được bọc trong môi trường / lệnh bạn đã chọn hoặc gõ.

  • Trong Chế độ chèn / chế độ bình thường, khi con trỏ ở trong phạm vi của một môi trường / lệnh, nhấn <Shift>+<F5>/<F7>sẽ nhắc một menu để thay đổi môi trường / lệnh .

Linh tinh Mappings

  • Chữ Hy Lạp. `ađến `zvà thủ đô tương ứng.
  • Các biểu tượng như `8cho \infty, `<cho \le, `Icho \int_{<++>}^{<++>}<++>, v.v.
  • Nhấn "hai lần sẽ nhận được một cặp dấu ngoặc kép TeX. Vì vậy, để gõ ký "tự chữ , bạn phải sử dụng.
  • Nhấn trong một số môi trường liệt kê sẽ chèn \itemthẻ thích hợp .
  • Bạn có thể quấn phần lựa chọn trực quan của toán học trong \left \rightcặp bằng `(, `[`{.
  • Folding có thể tùy chỉnh. Ba kiểm soát biến toàn cầu những gì có thể được gấp lại: Tex_FoldedSections, Tex_FoldedMisc, và Tex_FoldedEnvironments.

Đôi khi các ánh xạ tích hợp đã đi quá xa hoặc không thoát khỏi những gì bạn muốn. Bạn có thể ghi đè lên ánh xạ tích hợp bằng cách xác định lại chúng trong 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')

Đặt nhiều công cụ biên dịch

Tôi luôn cần phải chuyển đổi giữa pdflatexxelatexđộng cơ. Vì vậy, tôi có các dòng sau trong .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>

Xem PDF, Chuyển tiếp và Tìm kiếm lùi giữa trình xem Vim và PDF

Đây là một chủ đề lộn xộn và phức tạp. Với một số người xem PDF nhất định và một số may mắn nhất định , nó có thể rất dễ dàng. Nhưng đó chủ yếu là vấn đề tìm kiếm google.

Gợi ý

  • Bạn nên tìm sự cân bằng giữa cách LaTeX và cách Vim-LaTeX.
  • Vim-LaTeX hoàn toàn không có trọng lượng nhẹ. Có một số tính năng và / hoặc ánh xạ chính mà bạn có thể sẽ không bao giờ sử dụng và bạn phải ghi đè chúng theo cách thủ công.
  • Bạn dùng Vim. Bạn biết kiên nhẫn nghĩa là gì . :-)

Nhìn chung, tôi nghĩ rằng nó sẽ hoạt động tốt nếu bạn sẵn sàng đầu tư một chút thời gian để chế ngự con thú. Điều đó đã được nói, nếu tôi có thời gian và kiến ​​thức đầy đủ, tôi chắc chắn sẽ giảm bớt các tính năng trên cao và khám phá tiềm năng tích hợp với các plugin khác.

Người giới thiệu

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.