Markdownで爆速LaTeXレポート

Markdownで爆速LaTeXレポート

事の経緯

少し前に,SublimeLaTeXでレポート環境を構築しよう!ってことで以下の記事を書きました.

mcg.hateblo.jp

でもまだまだめんどくさい.

うーん...でもやっぱりまだまだめんどくさい.箇条書きするときにいちいち\itemizeとか書くんですもんね...

ってことで Markdown記法で書いたものをLaTeXに変換しよう! ということに

windowsユーザの方はちょっとやり方が変わってきます.

LaTeXのセットアップは終わっているのが前提です. 終わってなかったら以下の記事の記事でとりあえずMacTeXでコンパイルができるようにしてみてください.

mcg.hateblo.jp

Markdown記法って?

例えば,HTMLとか書くのにいちいち<p>とか書いてられないわけです. そこでできたのがMarkdown記法です.

htmlとMarkdownの比較は

kojika17.com

のサイトを見てみてください.

こちらのソフトを使えば,レビューを行いながら編集ができます.

kobito.qiita.com

ちなみに,この記事もマークダウンで書いて,早く綺麗な文章を作れるようになっています.

f:id:McG:20151212180319p:plain

MarkdownでLaTeX??

そうです.MarkdownからLaTeXへの変換を行っていきます. そのために必要なのが,Pandocというアプリなので,'brew install pandoc`とターミナルに打ち込んでpandocをインストールします. brewは入っていない方は以下の記事から入れてみてください.

mcg.hateblo.jp

これさえあれば,MarkdownからLaTeXへの変換ができます.

実際に書いてみる

以下は http://qiita.com/mountcedar/items/e7603c2eb65661369c3b の例を使っています.

# はじめに

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

# いろいろな書式

## subsection的な

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

### subsubsection的な

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

# リンク関係

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


# 文字書式

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

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

この後,pandoc test.md -o test.tex とターミナルに打ち込んで,test.texファイルを生成します.

\section{はじめに}\label{ux306fux3058ux3081ux306b}

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

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

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

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

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

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

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

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

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

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

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

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

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

圧倒的に楽ですね.こんなのいきなり test.tex 書いてたらいくら時間があっても足りないです.

ただ,なぜか\tightlistっていう謎のコマンドが付加されてて,それがどうもエラーになってしまう.

ということで,いちいち置換するのもめんどくさいので,rubyスクリプト書きました.

tex.rb

f_name = ARGV[0].to_s
f=File.open(f_name,"r")
buffer = f.read();
buffer.gsub!("\\tightlist" , "\n");
f=File.open(f_name,"w")
f.write(buffer)
f.close()
puts "正常に置換が終了しました"

`ruby tex.rb test.md'と打ちます.

これで\tightlistっていうのは消えているはずです.

では,master.texを用意して,先ほど作ったtest.texを埋め込んでいきます.

\documentclass[11pt,a4paper]{jarticle}
%
\usepackage{graphicx}
\usepackage[dvipdfm]{hyperref}


\begin {document}

\input{test.tex}
\end{document}

部分部分に分けてtexファイルを作っていって,inputしていく感じです.

すると,こんな感じのファイルを生成してくれます. f:id:McG:20151212180401p:plain

便利ですね!!

コマンドいっぱい打つのもめんどくさい

ここまでの手順ですが 1. Markdownでレポートを書く

  1. pandocでMarkdownからTeXに変換

  2. 生成されたTeXファイルのおかしいとこをrubyスクリプトで直す

  3. platex master.textexコンパイル

  4. dvipdfmx master.dvi でpdfファイルを生成

うん,長すぎる. ということで,シェルスクリプトに初挑戦です.

以下のようなスクリプトを書きました.

#!/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 tex.rb $texfile

platex master.tex

dvipdfmx master.dvi

こうすることによって,このように1コマンドで一気にpdfを生成できるようになっています.

シェルスクリプトのコマンド化

で,最後にこのシェルスクリプトをコマンド化します. LaTeXのディレクトリにこのスクリプトは起きたくないですから.

toolsディレクトリを作って,パスを通すために .zshrcbash使っている方は変わってきますが.

if [ -d $HOME/tools ]
then
    PATH=$PATH:$HOME/tools; export PATH
fi

を追記します.source ~

$ cd ~/tools $ chmod u+x スクリプト名

こうして,権限を変えておきます. すると,どこからでもmdtex.shが使えるようになります.

こんな感じに,自動でpdf化までやってくれる!!

f:id:McG:20151212180622g:plain

.zshrcalias mdtx='mdtex.sh' とか書いてけば mdtxと打つだけで実行できて本当のコマンドみたい.

© 2016 Yuki Sako.