markdownでレポートを書く
日ごと夜ごとに積もり積もるレポート課題からなる圧倒的需要にお答えして、今日はmarkdownで爆速かつ高品質なレポートを書く環境を作っていきたいと思います。材料はこちら
全体のイメージとしては markdown ➔ tex ➔ pdf という順番で変換していく仕組みを作ります。
まずtex ➔ pdfです。dockerのlatexイメージはこれ
GitHub - thii/docker-platex: Docker image for pLaTeX
latex環境を作ろうとして失敗することはよくありますが、これはdockerで動くので失敗しません楽勝です。 githubのREADMEにもありますが、dockerをインストールしてdockerコマンドを使えるようにした後、
docker pull thii/platex docker run --rm -v `pwd`:/latex thii/platex build example.tex
などのコマンドでtexファイルをビルドしてpdfファイルが得られます。
つぎにmarkdown ➔ texという変換をするrubyスクリプトはこれ
例えばmarkdownのほうに
あ # はじめに ## はじめに1 ### はじめに2 enumerate - 粒子の速度から粒子を移動する - 粒子の衝突規則から値のみを変更する - 速度ベクトルの平均を求める - 二次元平面に全てのベクトルをプロットする \enumerate ![包含判定アルゴリズムのフローチャート](img/flow.png) w=9 l=aa
というふうに書くと、出力は
\documentclass[onecolumn, a4paper, dvipdfmx, 12pt]{jsarticle} \usepackage{listings} \usepackage{color} %\usepackage{pdfcolparallel} \usepackage{layout} \usepackage[dvipdfmx]{graphicx} \usepackage[margin=2cm, bottom=3cm, footskip=1.5cm]{geometry} \usepackage{url} \usepackage{amsmath} \usepackage{amsfonts} \usepackage{here} \usepackage[caption=false]{subfig} \begin{document} \definecolor{OliveGreen}{cmyk}{0.64,0,0.95,0.40} \definecolor{colFunc}{rgb}{1,0.07,0.54} \definecolor{CadetBlue}{cmyk}{0.62,0.57,0.23,0} \definecolor{Brown}{cmyk}{0,0.81,1,0.60} \definecolor{colID}{rgb}{0.63,0.44,0} \lstset{ breaklines=true,%折り返し } \title{あ} \author{おなまえ} \maketitle \section{はじめに} \subsection{はじめに1} \subsubsection{はじめに2} \begin{enumerate} \item 粒子の速度から粒子を移動する \item 粒子の衝突規則から値のみを変更する \item 速度ベクトルの平均を求める \item 二次元平面に全てのベクトルをプロットする \end{enumerate} \begin{figure}[H] \centering \includegraphics[width=9.0cm]{./img/flow.png} \caption{包含判定アルゴリズムのフローチャート} \label{aa} \end{figure} \end{document}
これを先ほどのdockerコマンドでビルドして 簡単な置き換えをしてるだけですが結構楽になりました。
最後にmarkdown ➔ tex ➔ pdfの流れをシェルスクリプトで自動化します。
ruby /path/to/main.rb report.md > main.tex docker run --rm -v `pwd`:/latex thii/platex build main.tex open main.pdf
3行だけですがこれで完了です。rubyスクリプトとシェルスクリプトは自分で書いてみると自分好みにできて楽しいと思います。
p.s. 画像を貼り付けるとき、pngファイルに対応するxbbファイルが生成できないエラーが出ることがありますが
cd img for f in *.png; do docker run --rm -v `pwd`:/latex thii/platex extractbb -x $f done cd ../
こういう感じに、platexイメージ内にあるextractbbコマンドを使って無理やり生成するワザがあります。