閑話休題

ブログの効能と言わば何ぞ其れ日々の由なし事の記帳に限らんや

pandocでmarkdownをlatexに変換してレポートを作成する方法

markdownからlatexへの変換

pandocでは基本的に以下をterminal やcommand promptから走らせれば変換自体はできる.

pandoc markdownfile.md -t latex -o latexfile.tex

例えば

# this is the test
ここはbody部分です.

## subsection starts from here
ここもボデイー部分.
- enumerating the item.
- easy to write.

みたいなのを書いてこれを上記の通りpandocで変換すると

¥section{this is the test}¥label{this-is-the-test}

ここはbody部分です.

¥subsection{subsection starts from
here}¥label{subsection-starts-from-here}

ここもボデイー部分.

¥begin{itemize}
¥tightlist
¥item
  enumerating the item.
¥item
  easy to write.
¥end{itemize}

となるので当然このままじゃコンパイルできない.\documentclassとか\begin{document}とかがインクルードされないので,latexファイルを吐き出してからこれらを書き加える手間がいる.そこで,

Pandoc - Pandoc User’s Guide

にはオプションとして-H,-B,-Aが掲載されている.

-Hmarkdownから生成されるファイルの前に指定したファイルを付け加える. 例えば上記のmarkdownファイルに加えてpreamble.texと言う以下のようなファイルを用意する.

%opening
¥author{Blah Blah man}
¥title{ Final Exam}
¥date{¥today}

そして以下のようにpandocコマンドを打つ.

pandoc markdown.md -t latex -o latex.tex -H preamble.tex
¥documentclass[]{article}
¥usepackage{lmodern}
¥usepackage{amssymb,amsmath}
¥usepackage{ifxetex,ifluatex}
¥usepackage{fixltx2e} % provides ¥textsubscript
¥PassOptionsToPackage{hyphens}{url} % url is loaded by hyperref
¥usepackage[unicode=true]{hyperref}
¥hypersetup{
            pdfborder={0 0 0},
            breaklinks=true}
¥urlstyle{same}  % don't use monospace font for urls
¥IfFileExists{parskip.sty}{%
¥usepackage{parskip}
}{% else
¥setlength{¥parindent}{0pt}
¥setlength{¥parskip}{6pt plus 2pt minus 1pt}
}
¥setlength{¥emergencystretch}{3em}  % prevent overfull lines
¥providecommand{¥tightlist}{%
  ¥setlength{¥itemsep}{0pt}¥setlength{¥parskip}{0pt}}
¥setcounter{secnumdepth}{0}
% Redefines (sub)paragraphs to behave more like sections
¥ifx¥paragraph¥undefined¥else
¥let¥oldparagraph¥paragraph
¥renewcommand{¥paragraph}[1]{¥oldparagraph{#1}¥mbox{}}
¥fi
¥ifx¥subparagraph¥undefined¥else
¥let¥oldsubparagraph¥subparagraph
¥renewcommand{¥subparagraph}[1]{¥oldsubparagraph{#1}¥mbox{}}
¥fi

% set default figure placement to htbp
¥makeatletter
¥def¥fps@figure{htbp}
¥makeatother


%opening
¥author{Blah Blah man}
¥title{Final Exam}
¥date{¥today}

¥date{}

¥begin{document}

¥section{this is the test}¥label{this-is-the-test}

ここはbody部分です.

¥subsection{subsection starts from
here}¥label{subsection-starts-from-here}

ここもボデイー部分.

¥begin{itemize}
¥tightlist
¥item
  enumerating the item.
¥item
  easy to write.
¥end{itemize}

¥end{document}

オリジナルに出力されたtexファイルはerrorを吐いてコンパイルできなかったので,preambleの一部を削除したら普通に動いた.ただし,preamble部分がごちゃついたり,いろんなパッケージを読まされるのは不愉快.

-B-Hに似ているが,指定したファイル(preamble.tex)が\begin{document}の後ろで読み込まれる.だから\maketitleだけを含んだtexファイルを作って-Bの引数に当ててやれば,タイトルが出力される.

基本的に-B-Hを使えば即コンパイルできるtexファイルは得られるのだが,結局カスタマイズの余地がないのが寂しいし,デフォルトのデザインを使うだけであればtexを使う意味はあまり感じない.というわけでどうやってカスタマイズするかは別の記事で書いてみたい.