Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

シチュエーション

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

(追記ここまで)

ssh0
[興味]物理/数学/Python/Linux/ShellScript 編集リクエスト、コメント、フォロー等はお気軽に。
http://ssh0.hatenablog.com/
team-lab
最新のテクノロジーを活用したシステムやデジタルコンテンツの開発を行うウルトラテクノロジスト集団
https://www.team-lab.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした