このとき、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で作っています。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
import sys | |
import re | |
buffer = [] | |
tableBeginPattern = r"\\begin{longtable}" | |
tableEndPattern = r"\\end{longtable}" | |
tableFlag = False | |
for line in sys.stdin: | |
if tableFlag == True: | |
matchEnd = re.match(tableEndPattern, line) | |
if matchEnd != None: | |
# endの直前の行(つまりcaptionの行)を出力 | |
print buffer.pop(), | |
# 行の終わり | |
print "\\\\" | |
for buf in buffer: | |
# longtable内のデータを先頭から出力 | |
print buf, | |
# endを出力 | |
print line, | |
# フラグを下ろす | |
tableFlag = False | |
# バッファの中身をからにする | |
buffer = [] | |
else: | |
# バッファの末尾に行を追加(出力はしない) | |
buffer.append(line) | |
else: | |
matchBegin = re.match(tableBeginPattern, line) | |
if matchBegin != None: | |
# テーブルが始まったらフラグを立てる | |
tableFlag = True | |
print line, |
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}
まとめ
これが本当に良い方法なのかわかりませんが、とりあえずキャプションを上に持ってくることができました。
根本的に、pandocから出てくるときにキャプションを上にしておく方法などがあれは、ぜひ教えてください。