มีปลั๊กอิน Tex จำนวนมากสำหรับ vim ( vim-latex , AutomaticLatexPluginเพื่อพูดสองสามอย่าง)
อะไรคือความแตกต่างของฟังก์ชั่นที่ให้ไว้ระหว่างปลั๊กอิน TeX เหล่านี้ (สิ่งที่ฉันตั้งชื่อและอื่น ๆ )
นี่คือคำถามที่เกี่ยวข้องสองสามข้อเกี่ยวกับ SO:
มีปลั๊กอิน Tex จำนวนมากสำหรับ vim ( vim-latex , AutomaticLatexPluginเพื่อพูดสองสามอย่าง)
อะไรคือความแตกต่างของฟังก์ชั่นที่ให้ไว้ระหว่างปลั๊กอิน TeX เหล่านี้ (สิ่งที่ฉันตั้งชื่อและอื่น ๆ )
นี่คือคำถามที่เกี่ยวข้องสองสามข้อเกี่ยวกับ SO:
คำตอบ:
ฉันจะไม่ทำการเปรียบเทียบเชิงลึกเนื่องจากฉันมีประสบการณ์ จำกัด กับปลั๊กอินที่แตกต่างกันเท่านั้น ฉันรู้ว่าคู่ของปลั๊กอินดี (เป็นน้ำยางกล่องและน้ำยาง-Suite ) และฉันรู้ว่าหนึ่งปลั๊กอินดีมากตั้งแต่ผมกำลังพัฒนาตัวเอง: vimtex ดังนั้นฉันจะเขียนเกี่ยวกับ vimtex เป็นส่วนใหญ่ อย่างไรก็ตามฉันจะชี้ให้เห็นการอ้างอิงบางอย่างที่อาจเป็นที่สนใจของผู้อื่น
มีปลั๊กอินจำนวนมากสำหรับ Vim เหล่านี้คือสิ่งที่ฉันได้รับการยอมรับว่าเป็นที่นิยมอย่างน้อยกึ่ง:
บนtex.stackexchange.comมีรายการบรรณาธิการ LaTeX และ IDE จำนวนมาก มันให้ภาพรวมที่ดีโดยทั่วไป แต่ยังให้ภาพรวมของปลั๊กอินสำหรับ Vim:
vimtex ขึ้นอยู่กับ LaTeX-Box มันเริ่มต้นหลังจากที่ฉันมีส่วนแก้ไขข้อผิดพลาดและการปรับปรุงเพื่อ LaTeX-Box บางครั้ง ฉันรู้ว่าปลั๊กอินนั้นสามารถเขียนได้อย่างทันสมัยยิ่งขึ้นถ้าฉันเขียนตั้งแต่เริ่มต้น ครั้งแรกที่ฉันตัดคุณสมบัติส่วนใหญ่และสร้าง "เครื่องยนต์" ที่แข็งแกร่งและแยกส่วน ฉันเพิ่มฟีเจอร์และฉันคิดว่าวันนี้มันมีฟีเจอร์ส่วนใหญ่ของ LaTeX-Box แล้วบ้าง
แทนที่จะให้รายการคุณสมบัติเต็มรูปแบบ (ดูที่นี่สำหรับสิ่งนั้น ) ฉันจะพยายามชี้ให้เห็นถึงความแตกต่างระหว่าง vimtex และปลั๊กอินอื่น ๆ อย่างไรก็ตามฉันต้องการให้การเรียกร้องตัวหนา:
เนื่องจาก vimtex ใช้ LaTeX-Box จึงเห็นได้ชัดว่ามีหลักการที่คล้ายกัน ความคิดคือการทำให้สิ่งต่าง ๆ เรียบง่ายและเพื่อแก้ปัญหา thare ไม่ได้แก้ไขโดยปลั๊กอินอื่นที่ดีกว่า มันใช้latexmkเพื่อรวบรวมเอกสาร LaTeX และมันสร้างขึ้นบนปลั๊กอิน Vim ภายในสำหรับการเน้นไวยากรณ์
ขณะนี้เป็นหนึ่งในคุณลักษณะที่สำคัญในน้ำยาง-Box ที่ขาดหายไปใน vimtex: รวบรวมภาพเดียวกับการเรียกกลับ เหตุผลที่คุณสมบัตินี้ไม่ได้อยู่ใน vimtex นั้นเป็นเพราะมันซับซ้อนและฉันไม่เคยพบวิธีที่จะใช้มันที่ง่ายพอสำหรับการตั้งค่าของฉันเอง (ยินดีต้อนรับข้อเสนอแนะโปรดอย่าลังเลที่จะเปิดประเด็นหรือดึงคำขอ )
ความแตกต่างที่สำคัญระหว่าง vimtex และ LaTeX-Suite อาจเป็นไปได้ว่า vimtex ไม่ได้พยายามใช้ IDE แบบเต็มรูปแบบสำหรับ LaTeX ภายใน Vim เช่น:
latexmk
สำหรับการรวบรวมด้วยคุณสมบัติการโทรกลับเพื่อรับข้อเสนอแนะทันทีเกี่ยวกับข้อผิดพลาดในการรวบรวมฉันไม่สามารถทำการเปรียบเทียบได้เนื่องจาก Vim-LaTeX เป็นปลั๊กอิน LaTeX เพียงตัวเดียวที่ฉันใช้ ฉันใช้ Vim-LaTeX มาเกือบปีแล้ว ดังนั้นฉันจะพูดถึง Vim-LaTeX เพียงอย่างเดียว
มีคุณสมบัติมากมายใน Vim-LaTeX ฉันจำไม่ได้ทั้งหมด ฉันจะพูดถึงคุณสมบัติที่ฉันรู้จักและใช้งานอยู่ตลอดเวลา
หมายเหตุ: เหล่านี้เป็นประสบการณ์การใช้งานที่ จำกัด ของฉันซึ่งอาจจะทำให้เข้าใจผิดมาก ฉันไม่ใช่ผู้ใช้ Vim ที่มีประสบการณ์ และฉันไม่รู้อะไรเลยเกี่ยวกับ vimscript
<C-j>
JumppingIMAP()
ฟังก์ชั่นและฟังก์ชั่น<C-j>
jumpping มีให้แยกเป็นปลั๊กอินimaps.vim
ในชุด Vim-LaTeX มันเป็นคุณสมบัติที่ทรงพลังและอาจมีประโยชน์มากแม้ว่าคุณจะไม่ได้เขียน LaTeX
IMAP()
ฟังก์ชั่นให้วิธีที่เป็นธรรมชาติมากขึ้นในการทำการแมปโหมดและการสร้างเทมเพลตโดยทั่วไปกว่าในตัวimap
และiabbrev
IMO
<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
แท็กที่เหมาะสม\left
\right
คู่โดย`(
, และ`[
`{
Tex_FoldedSections
, และTex_FoldedMisc
Tex_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 บางตัวและจำนวนโชคมันจะง่ายมาก แต่ส่วนใหญ่มันเป็นเรื่องของการค้นหาของ Google
โดยรวมแล้วฉันคิดว่ามันจะทำงานได้ดีถ้าคุณยินดีที่จะใช้เวลาในการเชื่องสัตว์ร้าย ที่ถูกกล่าวว่าถ้าฉันมีเวลาและความรู้เพียงพอฉันจะทำให้บางคุณสมบัติค่าใช้จ่ายและสำรวจศักยภาพของการรวมกับปลั๊กอินอื่น ๆ
vimtex
สามารถทำงานเคียงข้างกับLatex-Suite
ซึ่งหมายความว่าคุณจะได้รับสิ่งที่ดีที่สุดของทั้งสองปลั๊กอินในเวลาเดียวกัน :)