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から出てくるときにキャプションを上にしておく方法などがあれは、ぜひ教えてください。

2015/02/13

Windows 8.1で、カーソルが表示されなくなった

Blogを書くのはずいぶん久しぶりのようです。

先日、Windowsが起動しなくなったためWindows8.1のリフレッシュを行ったところ、システムは復活したのですが、代わりにカーソルが表示されなくなってしまいました。

最終的には、こちらのサイト
Windows 8.1 Updateをインストールしたらマウスカーソル(マウスポインター)が表示されなくなった件について
の内容で解決しましたが、経緯とやったことを以下に示します。

環境

問題のWindows8.1は、MacBook Pro (Retina, 15-inch, Early 2013)にBoot Campでインストール、VirtalBoxからも起動できるようになっています。

犯人は、VirtualBoxではなかった

はじめはVirtalBox Guest Additionsが疑われました。だって、VirtualBoxから起動するとカーソルが出たんだもの。そのため、Guest Additionsをスタートアップから外したり、アンインストールしたりしましたが、一向に解決しません。

仲間がいないかと検索していると、上記のページが引っかかりました。
どうやら、問題は「VirtalBoxから起動しているか、否か」ではなく、「画面の解像度」のようです。

グラフィックドライバが原因

私の使っているMacにはNVIDIAのGPUが搭載されています。どうやら、これのドライバが原因のようです。VirtalBoxはまだRetina対応していないのか、Mac上で実行しても低解像度で実行されます。このため、問題が発生しなかったのでしょう。

ちょうどWindowsをリフレッシュ(個人用データを残しつつ、OSを再インストール)したところですから、グラフィックドライバが問題のあるバージョンに変わった可能性は十分にあります。

グラッフィックドライバを更新

調べてみると、インストールされていたドライバは最新のバージョンではなかったので、ドライバを更新してみました。
カーソルが出ない状況での作業になりますが、(キーボード操作で)Ctrlキーを押すとカーソルの位置を表示などをONにして、手探りで頑張りましょう...

ドライバを更新する際は、まずタスクバー右側の通知領域内から、NVIDIAのロゴをクリック。
メニューが出てくるので、

 更新プログラムの確認をクリックします。

すると、以下のような画面が出てきます。更新プログラムがある場合は、「インストールする」のようなボタンが現れるので、画面の指示に従ってインストールします。

私の環境では、更新プログラムのインストール後、再起動を行うと、カーソルが表示されるようになりました。

まとめ

今回、カーソルが表示されなくなるという(GUIだと)致命的な問題が発生しましたが、ちょっと特殊な環境だったためすぐに情報が見つからなく少々苦労しました。同様の問題が発生した方のお役に立てばと思います。