ปลั๊กอิน LaTeX แตกต่างกันอย่างไร


42

มีปลั๊กอิน Tex จำนวนมากสำหรับ vim ( vim-latex , AutomaticLatexPluginเพื่อพูดสองสามอย่าง)

อะไรคือความแตกต่างของฟังก์ชั่นที่ให้ไว้ระหว่างปลั๊กอิน TeX เหล่านี้ (สิ่งที่ฉันตั้งชื่อและอื่น ๆ )


นี่คือคำถามที่เกี่ยวข้องสองสามข้อเกี่ยวกับ SO:

คำตอบ:


28

ฉันจะไม่ทำการเปรียบเทียบเชิงลึกเนื่องจากฉันมีประสบการณ์ จำกัด กับปลั๊กอินที่แตกต่างกันเท่านั้น ฉันรู้ว่าคู่ของปลั๊กอินดี (เป็นน้ำยางกล่องและน้ำยาง-Suite ) และฉันรู้ว่าหนึ่งปลั๊กอินดีมากตั้งแต่ผมกำลังพัฒนาตัวเอง: vimtex ดังนั้นฉันจะเขียนเกี่ยวกับ vimtex เป็นส่วนใหญ่ อย่างไรก็ตามฉันจะชี้ให้เห็นการอ้างอิงบางอย่างที่อาจเป็นที่สนใจของผู้อื่น

ภาพรวมและการอ้างอิงบางอย่าง

มีปลั๊กอินจำนวนมากสำหรับ Vim เหล่านี้คือสิ่งที่ฉันได้รับการยอมรับว่าเป็นที่นิยมอย่างน้อยกึ่ง:

บนtex.stackexchange.comมีรายการบรรณาธิการ LaTeX และ IDE จำนวนมาก มันให้ภาพรวมที่ดีโดยทั่วไป แต่ยังให้ภาพรวมของปลั๊กอินสำหรับ Vim:

vimtex

vimtex ขึ้นอยู่กับ LaTeX-Box มันเริ่มต้นหลังจากที่ฉันมีส่วนแก้ไขข้อผิดพลาดและการปรับปรุงเพื่อ LaTeX-Box บางครั้ง ฉันรู้ว่าปลั๊กอินนั้นสามารถเขียนได้อย่างทันสมัยยิ่งขึ้นถ้าฉันเขียนตั้งแต่เริ่มต้น ครั้งแรกที่ฉันตัดคุณสมบัติส่วนใหญ่และสร้าง "เครื่องยนต์" ที่แข็งแกร่งและแยกส่วน ฉันเพิ่มฟีเจอร์และฉันคิดว่าวันนี้มันมีฟีเจอร์ส่วนใหญ่ของ LaTeX-Box แล้วบ้าง

แทนที่จะให้รายการคุณสมบัติเต็มรูปแบบ (ดูที่นี่สำหรับสิ่งนั้น ) ฉันจะพยายามชี้ให้เห็นถึงความแตกต่างระหว่าง vimtex และปลั๊กอินอื่น ๆ อย่างไรก็ตามฉันต้องการให้การเรียกร้องตัวหนา:

  • vimtex เป็นปลั๊กอิน Vim ที่ทันสมัยที่สุดสำหรับ LaTeX ที่มีอยู่ในปัจจุบัน
  • รหัสนี้มีคุณภาพสูงและขณะนี้อยู่ในระหว่างการบำรุงรักษาด้วยตนเอง
  • ปลั๊กอินส่วนใหญ่มีความเสถียรแม้ว่าคุณลักษณะบางอย่างยังคงได้รับการพัฒนา (และอาจมีการเปลี่ยนแปลงและปรับปรุง)

vimtex กับ LaTeX-Box

เนื่องจาก vimtex ใช้ LaTeX-Box จึงเห็นได้ชัดว่ามีหลักการที่คล้ายกัน ความคิดคือการทำให้สิ่งต่าง ๆ เรียบง่ายและเพื่อแก้ปัญหา thare ไม่ได้แก้ไขโดยปลั๊กอินอื่นที่ดีกว่า มันใช้latexmkเพื่อรวบรวมเอกสาร LaTeX และมันสร้างขึ้นบนปลั๊กอิน Vim ภายในสำหรับการเน้นไวยากรณ์

ขณะนี้เป็นหนึ่งในคุณลักษณะที่สำคัญในน้ำยาง-Box ที่ขาดหายไปใน vimtex: รวบรวมภาพเดียวกับการเรียกกลับ เหตุผลที่คุณสมบัตินี้ไม่ได้อยู่ใน vimtex นั้นเป็นเพราะมันซับซ้อนและฉันไม่เคยพบวิธีที่จะใช้มันที่ง่ายพอสำหรับการตั้งค่าของฉันเอง (ยินดีต้อนรับข้อเสนอแนะโปรดอย่าลังเลที่จะเปิดประเด็นหรือดึงคำขอ )

vimtex กับ LaTeX-Suite

ความแตกต่างที่สำคัญระหว่าง vimtex และ LaTeX-Suite อาจเป็นไปได้ว่า vimtex ไม่ได้พยายามใช้ IDE แบบเต็มรูปแบบสำหรับ LaTeX ภายใน Vim เช่น:

  • vimtex ไม่ได้มีคุณสมบัติตัวอย่างเต็มเพราะเป็นUltiSnipsหรือneosnippetหรือเอ็นจิ้น snippet ที่คล้ายกัน
  • vimtex สร้างตามหลักการ Vim: มันมีวัตถุข้อความสำหรับสภาพแวดล้อมคณิตศาสตร์แบบอินไลน์มันให้การเคลื่อนไหวสำหรับส่วนและย่อหน้า
  • vimtex ใช้latexmkสำหรับการรวบรวมด้วยคุณสมบัติการโทรกลับเพื่อรับข้อเสนอแนะทันทีเกี่ยวกับข้อผิดพลาดในการรวบรวม
  • vimtex เป็นมอดุลาร์มาก: ถ้าคุณไม่ชอบคุณสมบัติคุณสามารถปิดได้

เพียงแค่ต้องการให้มันชัดเจนvimtexสามารถทำงานเคียงข้างกับLatex-Suiteซึ่งหมายความว่าคุณจะได้รับสิ่งที่ดีที่สุดของทั้งสองปลั๊กอินในเวลาเดียวกัน :)
llinfeng

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และiabbrevIMO

  • <C-j>jumpping ถูกใช้โดยคุณสมบัติการทำให้เสร็จสมบูรณ์ของ Vim-LaTeX จุด jumpping <++>จะแสดงโดย

  • การแม็พคีย์โหมดการแทรกในตัวถูกนำมาใช้เป็นการ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")
    ...
    

จากนั้นเมื่อคุณพิมพ์พูด()เคอร์เซอร์จะอาศัยอยู่โดยอัตโนมัติระหว่าง Parenthese <++>เปลี่ยนครั้งแรก หลังจากที่คุณพิมพ์ภายในเสร็จแล้วคุณก็เริ่มเตะ<C-j>ปังเคอร์เซอร์จะเลื่อนออกมาจากภาษาแม่และคุณก็พิมพ์ต่อไป เมื่อคุณคุ้นเคยกับมันแล้วมันก็จะเริ่มก่อให้เกิดการไหลของการพิมพ์ที่เสพติด ...

คุณสามารถดูจากด้านบน\left \rightคู่ได้อย่างง่ายดายด้วยการลากเส้นเปิดสองครั้ง และการ<C-j>ทำ jumpping ทำให้การพิมพ์เป็นไปอย่างราบรื่น

หนึ่งในความผิดพลาดที่สำคัญของIMAP()และ<C-j>เป็นสิ่งที่พวกเขา messes up ประวัติการเปลี่ยนแปลงล่าสุดของคุณ (ข้อผิดพลาดหนึ่งที่ฉันต้องการแก้ไขเป็นเวลานาน) ดังนั้นคุณอาจพบกับพฤติกรรมที่ไม่คาดคิดเมื่อพยายามทำซ้ำการเปลี่ยนแปลงล่าสุดโดย.หาก "การเปลี่ยนแปลงครั้งล่าสุดควร" มีการเรียกใช้ฟังก์ชันเหล่านี้

  • คุณสามารถทำการแมปทุกชนิดที่ใช้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{<++>}{<++>}<++>"
    
  • ในแทรก / โหมดปกติเมื่อเคอร์เซอร์ไม่ได้ต่ออยู่กับสิ่งใด (aka เพียงอย่างเดียว ) การกด<F5>/ <F7>จะแสดงเมนูเพื่อเลือกสภาพแวดล้อม / คำสั่งเพื่อแทรก หรือคุณสามารถพิมพ์ชื่อของสภาพแวดล้อม / คำสั่งที่ต้องการได้ที่ด้านล่าง โดยส่วนตัวแล้วฉันไม่ค่อยใช้<F5>/ <F7>ด้วยวิธีนี้

  • กด<F5>/ <F7>หลังจากสายตาการเลือกชิ้นส่วนของข้อความจะแจ้งให้เมนูสำหรับวางรูปภาพกับข้อความ จากนั้นข้อความที่เลือกจะถูกห่อในสภาพแวดล้อม / คำสั่งที่คุณเลือกหรือพิมพ์

  • ในโหมดแทรก / ปกติเมื่อเคอร์เซอร์อยู่ในขอบเขตของสภาพแวดล้อม / คำสั่งให้กด<Shift>+<F5>/<F7>จะแจ้งให้เมนูสำหรับสภาพแวดล้อมที่เปลี่ยนแปลงคำสั่ง /

การแม็พคีย์อื่น ๆ

  • ตัวอักษรกรีก `aไปยัง`zและเมืองหลวงที่สอดคล้องกัน
  • สัญลักษณ์เช่น`8สำหรับ\infty, `<สำหรับ\le, `Iสำหรับ\int_{<++>}^{<++>}<++>ฯลฯ
  • การกด"สองครั้งจะได้รับเครื่องหมายคำพูดคู่ของ TeX ดังนั้นในการพิมพ์ตัว"อักษรคุณต้องใช้
  • การกดในสภาพแวดล้อมการแจงนับหลายครั้งจะเป็นการแทรก\itemแท็กที่เหมาะสม
  • คุณสามารถเลือก WRAP สายตาส่วนหนึ่งของคณิตศาสตร์ใน\left \rightคู่โดย`(, และ`[`{
  • การพับสามารถปรับแต่งได้ สามการควบคุมตัวแปรทั่วโลกสิ่งที่สามารถพับเก็บ: Tex_FoldedSections, และTex_FoldedMiscTex_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

นี่เป็นหัวข้อที่ยุ่งและซับซ้อน ด้วยโปรแกรมดู PDF บางตัวและจำนวนโชคมันจะง่ายมาก แต่ส่วนใหญ่มันเป็นเรื่องของการค้นหาของ Google

ข้อเสนอแนะ

  • คุณควรหาสมดุลระหว่างวิธี LaTeX และ Vim-LaTeX
  • Vim-LaTeX ไม่มีน้ำหนักเบาเลย มีคุณสมบัติบางอย่างและ / หรือการแมปคีย์ที่คุณอาจไม่เคยใช้และคุณต้องแทนที่ด้วยตนเอง
  • คุณใช้เป็นกลุ่ม คุณรู้ว่าความอดทนหมายถึงอะไร :-)

โดยรวมแล้วฉันคิดว่ามันจะทำงานได้ดีถ้าคุณยินดีที่จะใช้เวลาในการเชื่องสัตว์ร้าย ที่ถูกกล่าวว่าถ้าฉันมีเวลาและความรู้เพียงพอฉันจะทำให้บางคุณสมบัติค่าใช้จ่ายและสำรวจศักยภาพของการรวมกับปลั๊กอินอื่น ๆ

อ้างอิง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.