MarkdownとPandocを用いた簡易Latex環境の構築


## はじめに

論文などの文章を書くとき、texを使う・・でも、軽いメモ書きとかミーティングログとか、毎週の報告書で書くにはちょっと手軽じゃない。一方、markdownは簡単で良いけど、ビュワーを通して見ないと整形されない。ソフトウェアのreadmeで使うには良いけど、普段のログをみんなで共有するとかドキュメントとして残すにはもう一歩足りない。

Word?なにそれ美味しいの？ってかそもそも、有料の時点で終わってる。（Office使いの人ごめんなさい。）

普段からログや文章を残す人・残したい人はツールやまとめる書式選びで日々悩んでいることと思います（僕だけか・・）。そんなあなたに普段の日常的な記録・ログ・報告の類はMarkdown記法でまとめておいて、必要に応じて、pdf化する方法を紹介します。なお、今回はtexフォーマットにしてから、pdf化する手順で紹介しますが、スタイルが質素なままで良ければ、そのままpdf化しても、html化しても構いません。

注意：方法は結構ギークなので、好きな方のみ採用してください。

## MarkdownとPandocを用いた簡易Latex環境

標題は難しい感じがしますが、やり方は至って簡単です。Pandocとはドキュメント変換ツールで、markdown、html、Latexを相互変換する便利なツールです。出力側はwordやpdfファイルをサポートしているので、簡単な書式で書いた文章の体裁を整えるにはうってつけのツールといえるでしょう。今回はこのツールを使って、texファイルを作り、pdf化するまでの手順を紹介します。なお、インストール方法以外はおそらくwindows, linuxでも共通なので、他のOSを使っている人でも同じような作業で導入できると思います。

### インストール

homebrewを使ってインストールする方法もありますが、時間がかかるので、mac版のインストーラを使ってインストールするのが便利です。

* http://johnmacfarlane.net/pandoc/installing.html

上記のページから、dmgファイルをダウンロードしてインストールしてください。もちろん、linux用のtarball, windowsのインストーラも提供されています。

### ドキュメント変換

ドキュメントの変換は以下のようなコマンドで行います。

```
$ pandoc readme.md -o readme.tex
```

readme.mdが入力、readme.texが出力です。入力したreadme.mdと出力されたreadme.texをそれぞれ以下に示します。

```md:readme.md
# はじめに

これはテストです。書式はgithubのmarkdownを採用しています。

# いろいろな書式

## subsection的な

* 箇条書きも対応してほしい
* itemizeとか毎回書くのまじでしんどい
	* 入れ子とかもサポートしてくれると良いよね

### subsubsection的な

1. もちろん、数字のサポートも必須でしょ
	* 違うアイテマイズの入れ子ももちろんサポートするよね

# リンク関係

[リンクはどうなるの？](http://localhost)

![画像とかはどうなるの？](sample.png)

# 文字書式

* これはイタリック体です*
* _これもイタリック体です_
* これはイタリック体になりません
* **これは太字です**
* __これも太字です__

> 引用はどうなるんだろう

# 表はどうなる

|カラム1|カラム2|
|------|------|
|hoge|geho|
```
上記が以下のように変換されます。

```readme.tex
\section{はじめに}\label{はじめに}

これはテストです。書式はgithubのmarkdownを採用しています。

\section{いろいろな書式}\label{いろいろな書式}

\subsection{subsection的な}\label{subsection的な}

\begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt
\item
  箇条書きも対応してほしい
\item
  itemizeとか毎回書くのまじでしんどい

  \begin{itemize}
  \itemsep1pt\parskip0pt\parsep0pt
  \item
    入れ子とかもサポートしてくれると良いよね
  \end{itemize}
\end{itemize}

\subsubsection{subsubsection的な}\label{subsubsection的な}

\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\itemsep1pt\parskip0pt\parsep0pt
\item
  もちろん、数字のサポートも必須でしょ

  \begin{itemize}
  \itemsep1pt\parskip0pt\parsep0pt
  \item
    違うアイテマイズの入れ子ももちろんサポートするよね
  \end{itemize}
\end{enumerate}

\section{リンク関係}\label{リンク関係}

\href{http://localhost}{リンクはどうなるの？}

\begin{figure}[htbp]
\centering
\includegraphics{sample.png}
\caption{画像とかはどうなるの？}
\end{figure}

\section{文字書式}\label{文字書式}

\begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt
\item
  これはイタリック体です*
\item
  \emph{これもイタリック体です}
\item
  これはイタリック体になりません
\item
  \textbf{これは太字です}
\item
  \textbf{これも太字です}
\end{itemize}

\begin{quote}
引用はどうなるんだろう
\end{quote}

\section{表はどうなる}\label{表はどうなる}

\begin{longtable}[c]{@{}ll@{}}
\hline\noalign{\medskip}
カラム1 & カラム2
\\\noalign{\medskip}
\hline\noalign{\medskip}
hoge & geho
\\\noalign{\medskip}
\hline
\end{longtable}
```

ほとんどのMarkdownの書式をtex変換してくれていることがわかると思います。ここまでできるなら、markdownで書いてtex変換するほうが楽だと言えるでしょう。

なお、出力されるのは、texでいう\begin{document}の後に続く部分です。ドキュメントのスタイルなどは、別途、元となるtexファイルにまとめておき、中で上記のtexファイルをincludeするようにしておくと、毎回書き直す必要がなく便利だと思います。

```manuscript.tex
\documentclass[11pt,a4paper,twocolumn]{jarticle}
%
\usepackage{amsmath,amssymb}
\usepackage{bm}
\usepackage{graphicx}
\usepackage{ascmac}
\usepackage[dvipdfm]{hyperref}

\title {Weekly Report}
\author {Yamamoto Tarou}

\begin {document}
\maketitle
\input {readme}
\end{document}
```

注意：使っているパッケージやドキュメントクラスは用途に応じて、使い分けてください。今回はjarticleの2カラム版のドキュメントを生成するように書いています。

後は、latexコマンドを使って、ビルドするだけです。

```
$ platex manuscript.tex
$ dvipdfmx manuscript.dvi
```
---
```
$ pdflatex manuscript.tex
```

なお、文中の数式などもそのまま反映されることが確認済みです。もう少し頑張れば、論文などの執筆にも使える強力なツールになりそうです。

ついでに、論文のpdfをつくるときによく使うMakefileの中身をさらす。tableもなんとかしたいけど、これは次の課題。

```Makefile
# -*- makefile -*-

TEX=platex
DVI2PDF=dvipdfmx

SOURCES = \
	manuscript.tex \
	$(NULL)

MDSCRIPT = \
	contents.md \
	$(NULL)

all: convertmd dvi2pdf clean

convertmd: $(MDSCRIPT)
	@cat $^ \
	| sed s/.png/.eps/g \
	| pandoc -t latex \
	| sed 's/includegraphics/includegraphics[width=1.0\\columnwidth]/g' \
	| sed 's/\[htbp\]/\[t\]/g' \
	> $(MDSCRIPT:.md=.tex)

.tex.dvi: convertmd
	@${TEX} $<
	@${TEX} $<	

dvi2pdf: $(SOURCES:.tex=.dvi)
	@${DVI2PDF} $^

clean: 
	@rm -f *.dvi *.aux *.log
```

図はtexではepsの方がよく、markdown上で確認するときはpngがよいので、両方出力するようにして、sedで変換するようにしている．また、図の位置はトップのみにしたいので、[htbp]から[t]に、graphicsの広さは、2カラムの文章が多いため、1.0\columnwidthとしている。

## Macで使う人に便利なツール

Macの人限定ですが、Markdownの編集にはkobitoが便利です。

* [Kobito](http://kobito.qiita.com/)

オープンにしてよい技術文章はQiitaで公開することもできるので、公開する場合は、Qiitaに内部で発表するにはTexでといった使い分けができます。また、編集した内容をDropboxなどで管理することで、複数のmac間でリソースを管理することもできます。

## 将来的には

プレゼンなどもこの形式で作れたら、なお便利でしょうね。でも、pandocを使えばできそうなので、試してみて成功したら次回紹介します。

## 参考文献

* [GithubのMarkdown書式](http://qiita.com/Qiita/items/c686397e4a0f4f11683d)
* [Kobito+Dropbox](http://qiita.com/yamakuda/items/5fdd269af54f83c6c64e)