2015/05/23

markdown->latexの変換をしたときに、表のキャプションを上にもってくる

最近、markdownで報告書を記述して、pandocを用いて一旦latexに変換し、そこからpdfにするということをしています。

このとき、markdownで記述した表はlatexのlongtableに変換されるようなのですが、表のキャプションが下に来てしまいます。表のキャプションは上に書きたいので、これでは困るわけです。

これを
こうしたい

始めの状態

記述したMarkdownはこんな感じです。
# 表 #################################

表

Table:例

|A        |B           |C           |D            |
|:--------|:-----------|:-----------|:------------|
|11111    |222         |33          |4            |
|5        |6           |7           |8            |
変換すると、キャプションが\end{longtable}の直前にきます。
\section{表}\label{ux8868}

表

\begin{longtable}[c]{@{}llll@{}}
\toprule\addlinespace
A & B & C & D
\\\addlinespace
\midrule\endhead
11111 & 222 & 33 & 4
\\\addlinespace
5 & 6 & 7 & 8
\\\addlinespace
\bottomrule
\addlinespace
\caption{例}
\end{longtable}

下に持ってくる

pandocで変換された後のTeXファイルに手を加えてなんとかしました。sedとかに慣れてないので、Pythonで作っています。

Makefileに書いて使っています。 Makefileの一部
convertmd: $(MDSCRIPT)
 @cat $^ \
 | sed s/.png/.eps/g \
 | pandoc -t latex \
 | sed 's/includegraphics/includegraphics[width=0.65\\columnwidth]/g' \
 | sed 's/\mathrm/\,\\mathrm/g' \
 | python FixTableCaption.py \
 | sed 's/\caption{\(.*\)}/\caption{\1\\label{fig:\1}}/g' \
 > $(MDSCRIPT:.md=.tex)
無事、キャプションが上にきました。
\section{表}\label{ux8868}

表

\begin{longtable}[c]{@{}llll@{}}
\caption{例\label{fig:例}}
\\
\toprule\addlinespace
A & B & C & D
\\\addlinespace
\midrule\endhead
11111 & 222 & 33 & 4
\\\addlinespace
5 & 6 & 7 & 8
\\\addlinespace
\bottomrule
\addlinespace
\end{longtable}

キャプションが\end{longtable}の直前にこない場合に遭遇すると失敗しますが、そうなったことがないので、一旦気にしないことにします。

まとめ

これが本当に良い方法なのかわかりませんが、とりあえずキャプションを上に持ってくることができました。
根本的に、pandocから出てくるときにキャプションを上にしておく方法などがあれは、ぜひ教えてください。