TeXで書くのめんどくさい部分はmarkdownで書いちゃえば最強じゃないかな?【Vim + pandoc】

  • 44
    いいね
  • 0
    コメント

シチュエーション

あなたはTeXで資料を作っているところです。
(Beamerでスライドを作っていると置き換えてもいいです)

箇条書きって,書くの面倒くさくないですか?

\begin{itemize}
  \item
    hoge
  \item
    huga
  \item
    piyo
\end{itemize}

ましてローマ数字(I, II, ...)で番号を振りたいとなったら

\begin{enumerate}
  \def\labelenumi{\Roman{enumi})}
  \item
    hoge
  \item
    huga
  \item
    piyo
\end{enumerate}

書きたいのはhoge, huga, piyoとかなのに。

Vimのformat機能 + pandocを使って解決

gq コマンドとformatprg

:help formattingもしくは:help gqの項を見ると,
gq(+モーションコマンド)を使えば

  1. formatexprが空でなければその内容を実行
  2. formatprgが空でなければその外部プログラムが使われる
  3. 上記に当てはまらなければ内部でフォーマッティングが行われる

みたいなことが書いてあると思います。

注目するのは2番めのformatprgを指定してフォーマットを行う方法です。

文書変換ツールpandoc

pandocというツールを使えば,markdownからLaTeXに変換するのも楽ちんです。

したがって,tex形式のファイルにおいてgqコマンドを実行した時にはpandocを使って選択範囲に対して markdown -> LaTeX 変換を行うようにすれば良さそうです。~/.vimrc

augroup texfile
  autocmd BufRead,BufNewFile *.tex set filetype=tex
  let md_to_latex  = "pandoc --from=markdown --to=latex"
  autocmd Filetype tex let &formatprg=md_to_latex
augroup END

のように書いておきます。

使い方

texファイルを編集している最中に,「markdownで書いたらすぐなのになぁ」という事案に遭遇したら,とりあえずその場でmarkdownで書いて,範囲選択して,gqと押したら,その部分がTeX形式に変換されて編集終了です。

(markdownでとりあえず書いたリストを範囲指定)
screen_004.png

(gqと押せば一瞬で出力される)
screen_005.png

(pdfにするとこんな感じ。)
screen_006.png

まとめ

pandoc万能。Vim拡張性高すぎ。
スニペット挿入機能とかを使ってもいいのかもしれないけれど,そのコマンドを覚えるくらいなら,markdownで書いてしまったほうが速いよねって話。

あと,以前はmarkdownで全部書いてからpandocを通してTeXに変換していたのだけれど,変換後にTeX側を細かく修正してしまい,手直ししようと思うと結局TeXファイルを直にいじることになるので,逆に,基本はtexファイルを直接編集して,書きづらいところだけmarkdownで書くようにすればいいかなと思いました。

例ではTeXのリストしかあげていませんが,画像の貼り付けなどでも威力を発揮するので,TeX書かないといけない人はぜひお試しあれ。

(追記: 2016/07/20)

formatprgを活用する例

(追記ここまで)