Vim-LaTeX (LaTeX-Suite) について

2015/1/2 追記: こんな記事も書きました: LaTeX-suite じゃない vim-latex を使ってvimによるLaTeX作成環境を整える - 睡分不足



友達がTeXを勉強していたので自分もつられて少しやってみました。
emacsにはTeXの入力支援環境があるということなので、vimにもないかなーと思って探してみたらVIM-LaTeX(LaTeX-Suite) なるものを発見。一通り使ってみましたが、かなり多機能です。自分がTeXを使うようになる必要性が出てくるのはおそらく一年以上後なので、忘れないようにメモしておきます。なお、自分はまだTeX歴1週間にも満たなくてTeX自体よく分かってないので間違ってる所があるかもしれないです。

インストール方法

今回はUbuntu9.04,Vim7.2 上で使用しました。

1. http://sourceforge.net/projects/vim-latex/files/ からファイルをダウンロード。
2. ダウンロードしてきたファイルを~/.vim以下に展開(すでにlatexのftpluginがあると上書きされちゃうかもしれないので、そのときは一時的なフォルダからコピー等する)
3. それからvimrcに以下の内容を記述

filetype plugin on
filetype indent on
set shellslash
set grepprg=grep\ -nH\ $*

" コンパイル時に使用するコマンド
let g:Tex_CompileRule_dvi = 'platex --interaction=nonstopmode $*' 
let g:Tex_BibtexFlavor = 'jbibtex'
let g:Tex_CompileRule_pdf = 'dvipdfmx $*.dvi'

" ファイルのビューワー
let g:Tex_ViewRule_dvi = 'xdvi'
let g:Tex_ViewRule_pdf = 'evince'

さらに、vimだとデフォルトで.texのファイルを開いてもファイルタイプがtexにならないので、$VIMRUNTIME/filetype.vim の 以下の所を変更。

変更前:  au BufNewFile,BufRead *.latex,*.sty,*.dtx,*.ltx,*.bbl setf tex
変更後:  au BufNewFile,BufRead *.tex,*.latex,*.sty,*.dtx,*.ltx,*.bbl setf tex

2009/9/27 追記:公式のFAQみたら答えが書いてありました。以下の内容を.vimrcに書くといいみたいです。

let g:tex_flavor='latex' 

4. vimで :helptags ~/.vim/doc 
:help latex --> LaTeX2e についてのヘルプ
:help latex-suite --> VIM-LaTeXのヘルプ


注意すること
gtk2のgvimだとscimで日本語入力ができない(autoclose.vimなんかと同じ症状、gvimのバグってことでいいのかな?)解決策としてscimの設定のフロントエンドの項目にある「未確定文字列を〜」のチェックをはずすと大丈夫だけれどこれをすると非常に使いづらい。ということで自分はVimを使ってます。(skk.vimだと大丈夫かも?)
ちなみにVimだと動作しないマップがあったりする。(適当にマップしなおせば動く)


(追記)
Windowsでは一部の機能が正常に動作しないみたいです。こちらも参考にしてください。

使い方

以下の内容のほとんどはヘルプに書いてあります。

コンパイル&ビュー

\ll --> ファイルをコンパイルしてdviを生成。
BibTeX使ったりしていて複数コンパイルする必要があるときも自動コンパイルしてくれる。PDFを作りたいときは、dviを生成してから、 :TTarget pdf としてもう一度コマンドを実行。
\lv --> dviを指定したビュワーで表示。 :TTarget pdfとしたあとだとPDFを表示。


エラーがあったときはどこにエラーがあったかを別のウィンドウで表示。
一部分(1セクションとか)だけ選択してこのコマンドを実行すると、その部分をプレビューできる。

による補完
  1. は環境(Environment)関連の補完を行う。
  2. 空行でを押すとよく使う環境のリストが表示されて入力できる。
  3. 単語+で自動的に補完
(例)document <F5>
-->  \documentclass[<+options+]{<+class+>}<++>

     \begin{document}
        <++>
     \end{document}

この<++>というのはPlace Holderといって、を押すとその位置まで移動できる

  1. もし前にある単語が定義されていなければ\begin{hoge}と\end{hoge}に囲まれる。
  2. この定義は変えることができるし、追加することもできる。(元の定義は~/.vim/ftplugin/latex-suite/envmacro.vim)

 定義されているものまとめ

figure , table , figure_graphicx ,array
minipage , description , picture , document
list , tabular , tabular_star

  1. プリアンブル部において空行でを押すと使用できるパッケージのリストが表示される。(~/.vim/ftplugin/latex-suite/packages を調べている)
  2. もし前に1単語あるとそれが\usepackage{}に囲まれる。
を使った補完
  1. 空行でを押すとよく使うコマンドの一覧が表示される。
  2. コマンド名+で自動補完
 (例) frac+<F7>
 -->   \frac{<++>}{<++>}<++>
  1. もちろんこれもカスタマイズ可能
を使った補完
  1. インサートモード時にで\refとか\citeとかの候補を表示してくれる(grepprgの設定とpythonが必要)。
  2. \ref{ の後に押すとファイルの中のラベルの候補を表示(一つだけならそれを補完)
  3. \cite{ の後に押すと、そのファイルに\bibliography{file1,file2}っていうのがあればfile1,file2から候補を表示してくれる。もしなければ、そのファイルから\begin{thebibliography}を探してそっから候補を表示する。
  4. 候補表示の時日本語は文字化けしてしまった --> 解決しました
  5. \input とかしてあるファイルのラベルも参照できる。
  6. \input{ とかの後にを押すとファイル名の候補を表示してくれる。(自分の環境だと\inputを補完しようとするとエラーが発生しました)
主要なマッピング

マップは :Tshortcuts で確認できる(すべてではない)。


(追記)Vim-Latex Reference Cardなんてものをみつけました。簡単に主要なコマンドがまとめられてます。


:Tshortcuts まとめ

\ll コンパイル
\lv ビュー
\ls forward searching (if possible)
\rf 折りたたむ

環境関連

I v&V 変換内容 I v&V 変換内容
ELI ,li list EQN ,qn quotation
EDE ,de description ESP ,sb sloppypar
EEN ,en enumerate ETI ,ti theindex
EIT ,it itemize ETP ,tp titlepage
ETI ,ti theindex EVM ,vm verbatim
ETL ,tl trivlist EVE ,ve verse
ETE ,te table ETB ,tb thebibliography
ETG ,tg tabbing ENO ,no note
ETR ,tr tabular EOV ,ov overlay
EAR ,ar array ESL ,sl slide
EDM ,dm displaymath EAB ,ab abstract
EEA ,ea eqnarray EAP ,ap appendix
EEQ ,eq equation ECE ,ce center
EDO ,do document EFI ,fi figure
EFC ,fc filecontents ELR ,lr lrbox
EFL ,fl flushleft EMP ,mp minipage
EFR ,fr flushright EPI ,pi picture
EMA ,ma math EQE ,qe quote


フォント関連

I v&V I&v 変換内容 V 変換内容
FBF `bf \textbf{} {\bfseries }
FMD `md \textmd{} {\mdseries }
FTT `tt \texttt{} {\ttfamily }
FSF `sf \textsf{} {\sffamily }
FRM `rm \textrm{} {\rmfamily }
FUP `up \textup{} {\upshape }
FSL `sl \textsl{} {\slshape }
FSC `sc \textsc{} {\scshape }
FIT `it \textit{} {\itshape }

セクション関連

I v&V 変換内容
SPA ,pa part
SCH ,ch chapter
SSE ,se section
SSS ,ss subsection
SS2 ,s2 subsubsection
SPG ,pg paragraph
SSP ,sp subparagraph

 数学関連 - Insert mode

`a \alpha `b \beta `L \Lambda `M Mu
`g \gamma `d \delta `N \Nu `X Xi
`e \varepsilon `z \zeta `P \Pi `R Rho
`h \eta `q \theta `S \Sigma `T Tau
`i \iota `k \kappa `U \Upsilon `C Chi
`l \lambda `m \mu `Y \Psi `W Omega
`n \nu `x \xi `( \subset `) Subset
`p \pi `r \rho `= \equiv =~ approx
`s \sigma `v \varsigma `- \bigcap `+ bigcup
`t \tau `u \upsilon `. \cdot `* times
`f \varphi `c \chi `\ \setminus `@ circ
`y \psi `w \omega `& \wedge `, nonumber
`A \Alpha `B \Beta `8 \infty `_ bar{}
`G \Gamma `D \Delta `: \ddot{} `; dot{}
`E \Epsilon `Z \mathrm{Z} `^ \hat{} `~ tilde{}
`H \Eta `K \Kappa `6 \partial


Iはインサートモード時、vはビジュアルモード時,Vは矩形選択時(選択した文字が囲まれる)。

(例) EEA  
--> \begin{eqnarray}

        \label{<++>}
    \end{eqnarray}<++>
その他のマップ

・インサートモード時

__ _{<++>}<++> `/ \frac{<++>}{<++>}<++>
() (<++>)<++> `% \frac{<++>}{<++>}<++>
[] [<++>]<++> `0 ^\circ
{} {<++>}<++> `& \wedge
^^ ^{<++>}<++> `M \sum_{<++>}^{<++>}<++>
$$ $<++>$<++> `S \Sigma
== &=& `< \le
~~ &\approx& `> \ge
=~ \approx `2 \sqrt{<++>}<++>
:: \dots `| \Big
(( \left( <++> \right)<++> `I \int_{<++>}^{<++>}<++>
[[ \left[ <++> \right]<++>
{{ \left\{ <++> \right\}<++>

・ビジュアルモード時…選択した文字を囲む

`( \left( hoge \right)
`[ \left[ hoge \right]
`{ \left{ hoge \right}
`$ $ hoge $ か \[ hoge \](矩形選択時)
BibTeX(.bibファイル編集中)のインサートモード時マッピング

次の4つがある。 BBB BBL BBH BBX (項目数 ----------> 多)
これを押すとオプション(articleとかbookとか)を選択するよう促されて、選んだオプションに応じて補完される。
(例)BBBって押してオプションをbookにした時

--> @BOOK{<+key+>,
    author = {<++>},
    editor = {<++>},
    title = {<++>},
    publisher = {<++>},
    year = {<++>},
    otherinfo = {<++>}
}<++>
場合によってマップが変わるもの

" --> `` か、''
... --> \ldots(通常) か、\cdots(math mode)

Alt Key Macros

インサートモードで使う

以下の文字を入力してからってしたとき

    (  --> \left( <++> \right)
    [  --> \left[ <++> \right]
    |  --> \left| <++> \right|
    {  --> \left\{ <++> \right\}
    <  --> \langle <++> \rangle
    q  --> \lefteqn{<++>}<++>

それ以外 --> \label{<++>}<++>

直前の1文字を\mathbf{}で囲む。

文字か数字の後 --> それを大文字にして \mathcal{}で囲む。
それ以外 --> \cite{}

特定の環境内において\itemコマンドを挿入。

環境 挿入されるもの
itemize \item
enumerate \item
theindex \item
thebibliography \item[<+biblabel+>]{<+bibkey+>} <++>
description \item[<+label+>] <++>
(例)
    \begin{itemize}
        \item first item
        \item second item
              \begin{description}
                  \item[label1] first desc
                  \item[label2] second
                  % ここで <Alt-I>
                  %  --> "\item[<+label+>] <++>" を挿入
              \end{description}
        \item third item
        % ここで <Alt-I>
        %  -->  "\item " を挿入
    \end{itemize}
    % ここで<Alt-I> --> なにもしない
プロジェクトが複数のLaTeXファイルから成るとき

・論文とかは複数のLaTeXファイルに分割されていることが多い。こうなっている時もVIM-LaTeXには便利な機能がある。
(例)次のようなディレクトリ構成になっているとする

  thesis/
        main.tex
        chapter1/
            chap1.tex
        conclusion/
            conclusion.tex
            figures/

んで、main.texの内容はこんな感じ。

% file: main.tex
\documentclass{report}
\begin{document}

\input{chapter1/chap1.tex}
\input{conclusion/conclusion.tex}
 
\end{document}


VIM-LaTeXでは、新たなTeXファイルを開くと、そのファイルのあるディレクトリから、上位方向にルートディレクトリまで *.latexmain ファイルを検索する。このファイルはマスターファイルと呼ばれる。

上の例で、main.tex.latexmainと言うファイルをmain.texと同じディレクトリに作ると、chap1.texやconclusion.texを開いたときそれらはmain.texの一部であると認識される。
すると、chap1.texやconclusion.texで\llってすると自動的にmain.texがコンパイルされる。(一部だけをプレビューしたいときはその部分を選択してから\ll)
また、こうしておくと、\ref{でmain.texに\inputされているファイルにあるラベルや、\cite{でbibファイルを参照できる。
ちなみにマスターファイルにはVimのコマンドを記すことができ、マスターファイルが見つかった時点でそれが:sourceされる。


(使用例)こんな感じで使ってみました。

その他の機能
  • 辞書補完()ができる。
  • :TTemplate [{template}] で テンプレートを挿入出来る。何も指定しないと ~/.vim/ftpluginlatex-suite/templates/ 以下のテンプレート一覧が表示される。
  • :TLook hoge で編集しているファイルと同じディレクトリにある .tex ファイルの中からhogeが含まれるものを表示。
  • :TLookBib 上のやつの.bib版
  • :TLookAll 上の二つを合わせたもの
  • だいたいカスタマイズ可能

とりあえず自分なりにまとめてみましたが、まだ機能はあります。
詳しくは:help latex-suite