vim ( vim-latex , AutomaticLatexPlugin 은 몇 가지를 말함) 용 Tex 플러그인이 많이 있습니다 .
TeX 플러그인 (내가 지정한 것과 다른 것) 사이에 제공된 기능의 차이점은 무엇입니까?
SO에 대한 몇 가지 관련 질문이 있습니다.
vim ( vim-latex , AutomaticLatexPlugin 은 몇 가지를 말함) 용 Tex 플러그인이 많이 있습니다 .
TeX 플러그인 (내가 지정한 것과 다른 것) 사이에 제공된 기능의 차이점은 무엇입니까?
SO에 대한 몇 가지 관련 질문이 있습니다.
답변:
나는 다른 플러그인에 대한 경험이 제한되어 있기 때문에 심도있는 비교를 제공하지 않을 것입니다. 나는 두 개의 플러그인을 잘 알고 있으며 ( LaTeX-Box 및 LaTeX-Suite ), 플러그인을 직접 개발하고 있기 때문에 하나의 플러그인을 잘 알고 있습니다 : vimtex . 따라서 나는 대부분 vimtex에 대해 쓸 것이다. 그러나 먼저 다른 사람들이 관심을 가질만한 참고 문헌을 지적하겠습니다.
Vim 용 플러그인 이 많이 있습니다. 이것들은 적어도 반 인기있는 것으로 인정한 것입니다.
에 tex.stackexchange.com 하는이 거대한 목록 LaTeX의 편집기와 십오는. 일반적으로 좋은 개요를 제공하지만 Vim의 플러그인에 대한 개요도 제공합니다.
vimtex는 LaTeX-Box를 기반으로합니다. LaTeX-Box에 대한 버그 수정 및 업데이트를 한동안 시작한 후에 시작되었습니다. 플러그인을 처음부터 작성하면 훨씬 더 현대적인 방식으로 플러그인을 작성할 수 있다는 것을 깨달았습니다. 먼저 대부분의 기능을 제거하고보다 견고하고 모듈화 된 "엔진"을 구축했습니다. 그런 다음 기능을 추가했으며 오늘 LaTeX-Box의 기능 대부분과 일부 기능이 있다고 생각합니다.
전체 기능 목록을 제공하는 대신 (여기서는 여기 참조 ) vimtex와 다른 플러그인의 차이점을 지적하려고합니다. 그러나 나는 대담한 주장을 제시하고 싶다.
vimtex는 LaTeX-Box를 기반으로하기 때문에 비슷한 원칙을 가지고 있습니다. 아이디어는 일을 단순하게 유지하고 문제 해결을 위해 다른 더 나은 플러그인으로 아직 해결되지 않았습니다. 그것은 사용 latexmk 텍 문서를 컴파일하고, 내부 Vim은 구문 강조를위한 플러그인을 기반으로 구축.
LaTeX-Box에는 vimtex에서 누락 된 중요한 기능이 하나 있습니다 : callback을 사용한 싱글 샷 컴파일 . 이 기능이 vimtex에없는 이유는 단순히 복잡하기 때문에 자신의 취향에 맞게 간단하게 구현 할 수있는 방법을 찾지 못했기 때문입니다 (제안은 환영합니다, 주저하지 말고 문제를 제기하십시오. ).
vimtex와 LaTeX-Suite의 주요 차이점은 vimtex가 Vim 내부의 LaTeX를위한 완전한 IDE를 구현하려고하지 않는다는 것입니다. 예 :
latexmk
콜백 기능이있는 컴파일에 사용 하여 컴파일 오류에 대한 즉각적인 피드백을 얻습니다.Vim-LaTeX는 내가 사용한 유일한 LaTeX 플러그인이므로 비교할 수 없습니다. 거의 1 년 동안 Vim-LaTeX를 사용하고 있습니다. Vim-LaTeX에 대해서만 이야기하겠습니다.
Vim-LaTeX 에는 많은 기능 이 있습니다 . 나는 그들 모두를 기억하지 못한다. 알고 있고 지속적으로 사용하는 기능에 대해서만 이야기하겠습니다.
참고 :이가 내 제한된 사용자 경험을 할 수있다, 매우 오해의 소지가 . 나는 노련한 Vim 사용자가 아닙니다. 그리고 나는 vimscript에 대해 아무것도 모른다.
<C-j>
점프IMAP()
기능 및 <C-j>
점프 기능은 imaps.vim
Vim-LaTeX 번들에서 플러그인 으로 별도로 제공됩니다 . 이 기능은 강력한 기능이며 LaTeX를 작성하지 않더라도 매우 유용 할 수 있습니다.
IMAP()
이 함수는 내장 imap
및 iabbrev
, IMO 보다 일반적으로 삽입 모드 매핑 및 템플릿을 수행하는보다 자연스러운 방법을 제공합니다 .
<C-j>
점프는 많은 Vim-LaTeX 완성 기능에 의해 활용됩니다. 점핑 포인트는로 표시됩니다 <++>
.
내장 된 삽입 모드 키 매핑은 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")
...
그런 다음 say를 입력 ()
하면 커서가 괄호 사이에 자동으로 상주하여 첫 번째를 바꿉니다 <++>
. 안으로 입력을 마치면 차고 <C-j>
쾅쾅 거리며 커서가 괄호 밖으로 이동하고 계속해서 입력합니다. 익숙해지면 중독성이 강한 타이핑 흐름이 형성되기 시작합니다.
위에서 \left
\right
보았을 때 오프닝 브라켓의 이중 스트로크로 페어를 쉽게 입력 할 수 있습니다. 그리고 <C-j>
점프는 타이핑 흐름을 만듭니다.
하나의 주요 결함 IMAP()
과 <C-j>
일이 있다는 것입니다 그들은 당신의 마지막 변경 기록을 망쳐 놨어요 . (오랫동안 고치려고하는 하나의 버그입니다.) 따라서 .
"최종 변경 사항"에 이러한 함수 호출이 포함되어 있으면 마지막 변경 사항을 다시 실행할 때 예기치 않은 동작이 발생할 수 있습니다 .
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에서 코드 스 니펫 템플릿을 빌드하기 위해 다른 플러그인과 결합하여 점프 <++>
하고 사용합니다 <C-j>
.
<F5> <F7>
명령과 환경의 삽입한 가지 단점은 IMAP()
키 조합을 더 이상 일반 텍스트에서 사용할 수 없다는 것입니다 (에 의해 매핑을 취소하지 않는 한 u
). 사례에서 당신은 단지하려는 트리거 당신이 원하는 경우, AS 매핑을 <F5>
하고 <F7>
편리. 이 두 키는 각각 환경 및 인라인 명령 삽입 을 트리거 하는 데 사용 됩니다. 또한 사용자의 모드 및 사용자 지정에 따라 다르게 작동합니다.
삽입 / 정상 모드에서 커서가 단어를 첨부하거나 단어에있을 때 <F5>
기본적으로 will을 누르면 양식의 기본 환경이 삽입됩니다.
\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{<++>}{<++>}<++>"
삽입 / 정상 모드에서 커서가 아무 것도 붙어 있지 않은 경우 (일명 단독 ) <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 뷰어와 일정량의 운 이 있으면 매우 쉽습니다. 그러나 그것은 주로 구글 검색의 문제입니다.
전반적으로, 나는 짐승을 길들이기 위해 약간의 시간을 기꺼이 투자한다면 그것이 효과가 있다고 생각합니다. 그러나 시간과 적절한 지식이 있다면 오버 헤드 기능을 완전히 줄이고 다른 플러그인과의 통합 가능성을 모색 할 것입니다.
vimtex
와 나란히 작업 할 수 있습니다Latex-Suite
당신은이 플러그인의 장점을 얻을 수 있다는 뜻, 같은 시간에 . :)