LoginSignup
60
54

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-07-05

シチュエーション

あなたは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を活用する例

(追記ここまで)

60
54
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
60
54