MarkdownをコマンドでPDFスライドに変換する
勉強会などで簡単な説明資料を作りたいとき,PowerPointで資料作成に時間をかけたくないとき,普段のメモからさっとスライドが作れるのが理想です.
Pandoc
無料の文書変換ソフト Pandoc で,様々な文書間の相互変換(一部は一方向の変換)を行えます.
今回は2種類の形式でスライド化してみようと思います.
- Markdown → PowerPoint
- Markdown → PDF (Beamer)
Installation
パッケージインストーラをダウンロードして起動するだけです.
Markdown to PowerPoint
サンプルとして以下の記事を PowerPoint 形式に変換してみます.
terminal
$ pandoc -o test.pptx -f markdown -t pptx --toc path/to/test.md
完成したものが以下のスライドです.--toc
オプションをつけることで,目次を出力できます.
一見うまくいっているように見えますが,下の部分が見切れてしまっています.
この記事にはテキストの部分だけでなく数式やソースコードが含まれていましたが,テキスト以外の要素が含まれている場合は出力されたときに画像になってしまうらしく,テキストの文字サイズを変更できないため修正するのは難しいです.
H2 をスライドの区切りとして判断しているため,適宜 H2 を差し込みながら Markdown を書けばうまく生成できます.
Markdown to PDF
Markdown から LaTeX の Beamer を利用してスライド PDF を生成します.
環境構築
LaTeX を使用するための TeX Live インストール手順は以下の記事を参考にしてください.
LaTeX
テンプレート用の TeX ファイルを作成します.
main.tex
\documentclass[dvipdfmx]{beamer}
\usepackage{pxjahyper}
\usepackage{graphicx}
\usepackage{amsmath,amssymb}
\usepackage{bm}
% For math
\usefonttheme{professionalfonts}
\usepackage{txfonts}
% For code
\usepackage{listings}
\lstset{
numbers=left,
basicstyle=\ttfamily\tiny,
breaklines=true
}
\providecommand{\tightlist}{
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}
}
\newcommand{\passthrough}[1]{\lstset{mathescape=false}#1\lstset{mathescape=true}}
% Japanese font to gothic style
\renewcommand{\kanjifamilydefault}{\gtdefault}
\usetheme[
block=fill,
progressbar=foot,
numbering=fraction
]{metropolis}
\begin{document}
\title{Pythonによる離散フーリエ変換}
\author{mktia}
\date{}
\maketitle
\input{body}
\end{document}
Markdown を body.tex に変換し,\input
の部分に入れることでスライドを作成します.
コマンド
terminal
$ mkdir ~/bin
$ nano ~/bin/md2slide
毎回コマンドを打たなくても良いように簡単なスクリプトを登録しておきます.
ホームディレクトリ下に LaTeX ディレクトリを作成し,一時的なログファイル等はそこに格納しています(最終的に消えますが).
コード部分で言語を指定していると,デフォルトでは Shaded が指定されます.エラーを直すのが面倒なので,--listings
オプションで lstlisting
を使用しています.
ページ番号が一度で振れなかったため,二度 ptex2pdf
しています.
md2slide
#!/bin/bash
pandoc $1 -o body.tex --pdf-engine=lualatex -t beamer --listings
ptex2pdf -u -l -ot "-kanji=utf8 -synctex=1 -file-line-error" main.tex --output-$
ptex2pdf -u -l -ot "-kanji=utf8 -synctex=1 -file-line-error" main.tex --output-$
find ~/LaTeX -not -name "*.tex" -not -name "*.pdf" | xargs rm
cp ~/LaTeX/main.pdf ./main.pdf
exit 0
利用しやすいようにパスを通します.
.zshrc
export PATH="$PATH:$HOME/bin"
実行権限がないため,権限を追加します.
terminal
$ chmod +x ~/bin/md2slide
実行
terminal
$ md2slide path/to/slide.md
実行すればスライドが生成されます(下の例は修正済みのもの).
H2 はスライドのタイトル,H3 はブロックのタイトルになります.PowerPoint と同様にスライドの区切りは H2 になるため,それを考えて Markdown を書く必要があります.
それでも自動生成の LaTeX では文章がスライドの領域をはみ出ることがあるため,body.tex を適宜編集して ptex2pdf
で PDF を生成すればいい感じになります.
参考
- Pandoc - About pandoc
- GitHub - matze/mtheme: A modern LaTeX Beamer theme
- Beamer — Tasuku Soma's webpage
- page breaking - Explicit frame break with beamer class - TeX - LaTeX Stack Exchange
- Pandoc Markdown Code Blocks in LaTeX
- (error) \tightlist (converting .md file into .pdf using pandoc) - TeX - LaTeX Stack Exchange
- Make failed. Undefined control sequence (\passthrough) · Issue #139 · laboon/ebook · GitHub
- BeamerスライドをMarkdownで簡単に作成 | Tomokazu NOMURA
- Markdown --> LaTeX Beamer --> PDF という変換を Pandoc でするシェルスクリプト - Qiita