読者です 読者をやめる 読者になる 読者になる

ささみろぐ

チラシの裏

markdownでレポートを書く

日ごと夜ごとに積もり積もるレポート課題からなる圧倒的需要にお答えして、今日はmarkdownで爆速かつ高品質なレポートを書く環境を作っていきたいと思います。材料はこちら

全体のイメージとしては markdowntex ➔ 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ファイルが得られます。

つぎにmarkdowntexという変換をするrubyスクリプトはこれ

md2tex.rb · GitHub

例えば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コマンドでビルドして f:id:sasamijp:20170330215811p:plain 簡単な置き換えをしてるだけですが結構楽になりました。

最後にmarkdowntex ➔ 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コマンドを使って無理やり生成するワザがあります。