Markdown+Texの環境構築と使い方


##はじめに
tex+markdownでレポートを作ったら早いのではないかと思って試してみた．自分なりに思ったメリットデメリットをあげてみる

+ メリット
	* texでepsを貼りまくると起こる __めちゃくちゃ長いコンパイル時間がなくなる__のでmarkdownで作業してる分には快適
	* __texの数式がそのまま使える__
	* (アプリによるけど) __リアルタイムで結果が反映__されるので作業がしやすい
	* ひな形のtexファイルは使い回し可能
	* texのフォーマットを使っているので適当に作っても __割と綺麗__
+ デメリット
	* 長い長い文章を書いていると応答がなくなることが稀にある．(wordの100倍ぐらいは快適)
	* pandocで変換するときに __細かいところに手が回らない__ので後で手直ししなければならない．

こんな感じ．やっぱり一番大きいデメリットは変換後のtexを自分でいじらなければならないところかもしれない． ~~htmlに変換してCSSのスタイルシート使い回した方が早いのでは？と作業中にn回思った．~~  
総括すると結構使いやすいけど細かいところで変換が上手くいかなかったりするので普通にtexで書くより少し楽程度なのかもしれない．

##作業環境

* MacDown
* Mac OS 10.9
* homebrew
* ~~普通こういうところになにかけばいいんだろう~~

##環境導入

###MacDownのインストール
別にMacDownでなくてもいい．というかなんでもいい．
[MacDown公式サイト](http://macdown.uranusjr.com/) 
普通にインストールしちゃって下さい．

###Pandocのインストール
pandocはhaskell製のドキュメント変換ツール．めちゃくちゃすごいやつ．``pandoc hoge.md -o hoge.doc``で，Wordファイルにも変換可能．

```
brew install pandoc
```
でインストールしようと思ったらできてなかった．cabalをつかってインストールすることに．

```
brew install haskell-platform
cabel update
cabel install pandoc
PATH=${HOME}/.cabal/bin:$PATH
```
めちゃくちゃ長いのでおやすみしよう．  

朝目覚めたら適当なmdファイルをつくって，``pandoc test.md -o test.tex``としてみよう．変換できたら次に進もう．変換できなかったらググろう．

###Texのインストール
私の場合最初からインストールしてたので関係なし．ただtlmgrってパッケージを入れないとエラーを吐いた気がする?

```
tlmgr update --self
tlmgr update --all
sudo tlmgr install collection-langcjk collection-latexrecommended collection-fontsrecommended
```
これも相当に長い．寝よう．  
あとjlistingsとかいろいろのパッケージを使いたいのでインストールしていく．下記は参考にしたサイト

* [Texでソースコードを埋め込む](http://qiita.com/ayihis@github/items/c779e4ab5cd7580f1f87)
* [booktabsのリンク](http://www.biwako.shiga-u.ac.jp/sensei/kumazawa/tex/booktabs.html)
* [hereのリンク](http://www.biwako.shiga-u.ac.jp/sensei/kumazawa/tex/here.html)
* [パッケージのインストールがわからないという人はこちら](http://www.biwako.shiga-u.ac.jp/sensei/kumazawa/aboutsty.html)


###スクリプトを書こう

できたtexをみてみるとよくわからないtightlistとかあるので，そこらへんをとらないとエラーになる．また，markdownではpng,jpgでも問題ないが，texでは __xbbファイルがないとコンパイルが通らない__．めんどくさいのでファイル内にある画像ファイルのxbbつくってくれないだろうか．そこでスクリプトで __markdown->tex->修正->pdf__までを一括でやってしまおうという話．  
#### まずスクリプトを置いておくところを作る．

```
cd $HOME
makedir tools
cd tools
```

#### rubyのスクリプトを書く．
ここは自動で変換されて気に入らない表現なんかを置換してる.

```ruby:tex.rb
f_name = ARGV[0].to_s
f=File.open(f_name,"r")
buffer = f.read();
buffer.gsub!("\\tightlist" , "\n");
buffer.gsub!("\\begin{figure}[htbp]","\\begin{figure}[H]");
buffer.gsub!("\\begin{verbatim}","\\begin{lstlisting}");
buffer.gsub!("\\end{verbatim}","\\end{lstlisting}");
buffer.gsub!(/\\includegraphics\{(?<file>.+?)\}/,'\\includegraphics[width=100mm]{\k<file>}');
f=File.open(f_name,"w")
f.write(buffer)
f.close()
puts "正常に置換が終了しました"
```

 Hereパッケージを使うようにしてたり，コードが見にくいのでjlistingをつかったり,やたら画像が大きいと困るので一律に10cmに指定したりしてる． 気に食わないところがあったらガンガン書き直そう．(~~正規表現が世界一できない~~)  
 こいつをtex.rbと名前を付けて$HOME/toolsに保存．


### Shellスクリプトを書く
 ~~今更なんだけどこれ，Makefileに書けばまずまず綺麗かなとか思えてきた~~

参考にしたサイト 
http://qiita.com/yukisako/items/cd83d4d7604027abf2a9

```bash:mdtex.sh
#!/bin/sh

echo "マークダウンで書いたものをLaTeXに変換するツール"
read -p "please input your file: " file

mdfile="${file}.md"
texfile="${file}.tex"

echo "${mdfile}を${texfile}に変換します"

pandoc $mdfile -o $texfile
ruby ${HOME}/tools/tex.rb $texfile

##extractbbの自動化
for file in `ls *.png`
do
    echo $file
	extractbb $file
done
for file in `ls *.jpg`
do
    echo $file
	extractbb $file
done

platex master.tex
dvipdfmx master.dvi
```
png,jpgをextractbbしてくれるやつも追加してある．こころへんの細かい使い勝手は自由に変えれば良いと思う．
そしてパスを通す．

```bash:.bash_profile
if [ -d $HOME/tools ]
then
    PATH=$PATH:$HOME/tools; export PATH
fi
```
(.bash_profileは``vim ~/.bash_profile``なんて叩くと編集できます)
そして権限を与えておく．

```
cd $HOME/tools
chmod u+x mdtex.sh
```
これで，``mdtex.sh``とたたけばスクリプトが呼び出せる．

###Texのひな形を晒す

```tex:master.tex
\documentclass[11pt,a4paper]{jsarticle}
%
\usepackage{color}
\usepackage{amsmath,amssymb}
\usepackage{bm}
\usepackage[dvipdfmx,hiresbb]{graphicx}
\usepackage{ascmac}
\usepackage{here}
\usepackage{txfonts}
\usepackage{longtable}
\usepackage{booktabs}
\usepackage{listings, jlisting}
\renewcommand{\lstlistingname}{リスト}
%languageはものによって変える
\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{
    language=C,%プログラミング言語によって変える。
    basicstyle={\ttfamily\small},
    keywordstyle={\color{OliveGreen}},
    %[2][3]はプログラミング言語によってあったり、なかったり
    keywordstyle={[2]\color{colFunc}},
    keywordstyle={[3]\color{CadetBlue}},%
    commentstyle={\color{Brown}},
    %identifierstyle={\color{colID}},
    stringstyle=\color{blue},
    tabsize=2,
    frame=trBL,
    numbers=left,
    numberstyle={\ttfamily\small},
    breaklines=true,%折り返し
    backgroundcolor={\color[gray]{.95}},
    captionpos=b
}%
\setlength{\textwidth}{\fullwidth}
\setlength{\textheight}{40\baselineskip}
\addtolength{\textheight}{\topskip}
\setlength{\voffset}{-0.2in}
\setlength{\topmargin}{0pt}
\setlength{\headheight}{0pt}
\setlength{\headsep}{0pt}
%
\newcommand{\divergence}{\mathrm{div}\,}  %ダイバージェンス
\newcommand{\grad}{\mathrm{grad}\,}  %グラディエント
\newcommand{\rot}{\mathrm{rot}\,}  %ローテーション
%
\title{...}
\author{...}
\date{\today}
\begin{document}
\maketitle
\include{template}
\end{document}
```
ひな形をコンパイルしてエラーがでたら逐次パッケージをインストールしてください．

##使い方

1. おもむろにディレクトリを作る．
2. master.texを入れる
2. MacDownでレポートを書き書き
3. (画像なんかはディレクトリの直下入れてね)
4. 完成したらshellを起動．``mdtex.sh`` -> ファイル名を入れる
5. master.pdfができあがる！

こんな流れになると思う.master.pdfみて気に入らないところがあれば，hoge.texを直していく作業になると思う．


##だれか助けてのコーナー
画像とか式とかlabelを指定できないので参照できなかったりしてつらい．だれか解決策下さい  
ラベルが付けられないのが地味に一番きつい  
あと，markdownで数式を複数行に渡って数式を使うやつがわからない(これはQitaの中の話ではなくて，markdown標準からtexに変換したときにeqnarrayとかalign*に対応するものがわからないという意味．)  
表を書くとき縦線がない(tableをうまいこと正規表現で置換すればできそうだけどわからず)  
リアルタイムで反映されて，数式が簡単に入力できて，図の形式も自由で，高速でサクサク動くエディターが天から降ってこないだろうか