読者です 読者をやめる 読者になる 読者になる

Pandocメモ

Haskell

ちょっとしたドキュメントはMarkdownでささっと書いて HTMLやPDFに変換したいなということでPandocを使ってみることにしました。

Pandoc

Pandoc自体は様々な形式に対応しているようです。

$ pandoc -h
pandoc [OPTIONS] [FILES]
Input formats:  native, json, markdown, markdown_strict, markdown_phpextra,
                markdown_mmd, rst, mediawiki, docbook, textile, html, latex
Output formats: native, json, docx, odt, epub, epub3, fb2, html, html5, s5,
                slidy, slideous, dzslides, docbook, opendocument, latex, beamer,
                context, texinfo, man, markdown, markdown_strict,
                markdown_phpextra, markdown_github, markdown_mmd, plain, rst,
                mediawiki, textile, rtf, org, asciidoc
...

すごく頼もしい。なおPDFを出力したい場合はLaTeXのインストールも必要とのこと。

MarkdownからHTMLへの変換を例につらつらと使い方をメモしておきます。

$ pandoc -o foo.html foo.md

出力されたHTMLは不完全なもの(html, head, body要素がない)なので 完全なものを出力したい場合は -s/--standalone オプションを指定します。 またHTML5のように拡張子だけでは特定できない場合は指定が必要です。

$ pandoc -s -f markdown -t html5 -o foo.html foo.md

デフォルトのテンプレートの確認は以下のとおり。

$ pandoc -D html5
<!DOCTYPE html>
<html$if(lang)$ lang="$lang$"$endif$>
<head>
  <meta charset="utf-8">
  <meta name="generator" content="pandoc">
  ...

Pandocが渡してくれる変数は$lang$という記述で埋め込めるようです。 例えば入力ファイルの先頭に以下の3行を書いておけばtitleなどを変数として渡してくれます。

% title
% author(s) (separated by semicolons)
% date 

またデフォルトテンプレートをカスタマイズして独自テンプレートとして渡すこともできます。

$ pandoc -D html5 > html5_template
$ pandoc --template=html5_template -o foo.html foo.md

CSSファイルを指定するなら -c/--css オプション。

$ pandoc -s -t html5 -c foo.css -o foo.html foo.md

-H/----include-in-header, -B/--include-before-body, -A/--include-after-body オプションで それぞれhead要素、body要素の前後に指定したファイルのコンテンツを挿入できます。

$ pandoc -s -t html5 -H additional_header.txt -o foo.html foo.md

$lang$はどうやって渡せばいいのかな。-V/--variable オプションにより変数の値を直接指定することも可能なようなので。

$pandoc -s -t html5 -V lang=ja -o foo.html foo.md

でもこのオプションは通常カスタムテンプレートの時に使うものだってガイドに書いてありますね。 うーん、langはどう指定するの?

それとgithub風のCSSを公開されている方がいたのでありがたく使わせてもらうことにしました。

andyferra / github.css

こんな感じでMarkdownの確認もありですね。

$ pandoc -s -t html5 -c github.css -o foo.html foo.md