書式の自由が社会を変える―LibreOfficeとPandocができること
藤原 由来
2017年4月29日
Pandocに関する活動
- Qiitaを中心に記事執筆
- Pandocユーザーズガイドを和訳
- 日本Pandocユーザ会
Pandocと私
- 院生時代の依頼
- 従来よりLaTeXで書かれた「教育用システムの利用手引」を、EPUBにできるかどうか検証してくれないか?
- このとき調べ回って、「Pandocというものがあるらしい」と気づいた
- 「LaTeXからEPUBに変換する」タスクが想像以上にあっさり実現
- 多少は難はあったが(input命令に当時は対応してない(今は対応)とか、組版がいけてないとか)
- この感動が、今の活動の原点
- なんでこんなにすごいソフトウェアが、日本では知られていなかったんだろう?
この発表の概要
- Pandocの概要
- Pandocをインストールする
- Pandocでドキュメントを変換する
- 「書式の自由」について
こんなことに困っていませんか?
- Writerが重いのでテキストファイルで下書きしたい
- バージョン管理をしたいけど、Writer文書は
git diff
が取りにくい
- Writer文書をHTMLに変換せよとお達しがあった
- Writer文書をSphinx(reST)で使いたい
- Markdownなどでスライドショーを作りたい
対応フォーマット(一部省略)
- 入力
- Markdown (Pandoc, CommonMark, PHP Markdown Extra, GitHub-Flavored Markdown, MultiMarkdown)
- (subsets of) Textile, reStructuredText, HTML, LaTeX, MediaWiki markup, Emacs Org mode
- OPML, DocBook, EPUB, ODT and Word docx
- 出力
- 入力フォーマットのほとんど(ODT含む)
- Markdown
- manページ, AsciiDoc, InDesign ICML
- プレゼンテーション: LaTeX Beamer, HTML5(reveal.jsなど)
- PDF (wkhtmltopdfまたはLaTeXエンジンが必要)
そもそもMarkdownって何?
- このスライド自体が、実はMarkdownで書かれています
- 元々はJohn Gruberが作ったオリジナルの処理系 でHTMLに変換するための略記法だった
- そのうちGitHubやPHPなどで記法が拡張された
- MultiMarkdownやPandocの登場をきっかけに、目的も「論文」「プレゼンテーション」「電子書籍」など用途が広がった
- 数々の「方言」がある状態
- 基本のMarkdownだけを覚えれば、大抵は書けます
Pandocでできないこと
- 表主体の文書を扱うこと
- Excel, LibreOffice Calc
- 一部に簡単な表を埋め込むことはできる(HTMLの
<table>
相当)
- LibreOffice Impressに/を変換すること
- LaTeX Beamer/HTMLプレゼンには変換可能
Pandocを使う心得
- 過剰な期待をし過ぎないこと
- Pandocは万能でないし、文書仕様の全てを満たしているわけではない
- 補助的に使うのがベスト
- Pandocで、テキストと大まかな構造を抽出
- 変換し切れなかった部分を、手作業や自作スクリプトで編集
Pandocの実装
- 言語: Haskell
- Pandoc的には、「厳密に型が定義されている」ことがありがたい
- Haskellは構文解析器(パーサ)を作るのにすごく適している (Parsecなど)
- モジュール構成
- Reader: 入力文書を解析し、Haskell上の中間文書に変換する
- Writer: 中間文書を受け取り、出力フォーマットに変換する
Pandocの処理フロー
Pandocが扱えるMarkdown方言
- Pandoc’s Markdown:
-f markdown
- Pandocにおける標準のMarkdown方言
- 技術文書から論文・電子書籍まで幅広く対応
- GitHub Flavored Markdown (gfm):
-f markdown_github
- GitHubの標準、プログラマ・フレンドリーな方言
- PHP Markdown Extra:
-f markdown_phpextra
- MultiMarkdown:
-f markdown_mmd
- HTMLだけでなくLaTeXなどの論文も意図した処理系
- CommonMark:
-f commonmark
- 仕様の曖昧さをなくすことを目的とした仕様/処理系
- ここ最近は、事実上の標準に近づく(公式な標準ではない)
ターミナルを開く
- Mac: ターミナル.app or iTerm2
- Windows: (今回は)コマンドプロンプト
- (分かっている方は)お好きなターミナルでも結構です
- Linux: お好きなターミナル
Pandocのインストール: パッケージマネージャ編
wkhtmltopdfのインストール
- PDF出力のために必要
- TeXLive/MacTeXを入れていれば、LaTeX処理系も利用可能(説明略)
- ただし、pLaTeXはNGなので、LuaLaTeX/XeLaTeXのみ
- パッケージマネージャでインストール
- Mac:
$ brew cask install wkhtmltopdf
- Windows:
> cinst -y wkhtmltopdf
- Debian:
$ sudo apt-get install wkhtmltopdf
- パッケージを直接落としてインストール
- wkhtmltopdf - Downloadsからダウンロード
- インストール
動作確認: Pandoc単体
Bashにて確認(コマンドプロンプトも同様のはず)
$ pandoc --version
$ pandoc --list-input-formats
$ pandoc --list-output-formats
$ echo "**Hello**" | pandoc -f markdown -t html
<p><strong>Hello</strong></p>
動作確認: Pandoc + wkhtmltopdf (PDF)
$ echo "**Hello**" | pandoc -f markdown -t html5 -o hello.pdf
-f
: 入力フォーマット名
-t
: 出力フォーマット名
-o
: 出力ファイル名
- 入力ファイル名が指定されていない場合は、標準入力を使用
おまけ: Pandocで作れるスライド
- このスライド自体をPandocで生成しました
- 今回は「reveal.js」形式に変換
- HTML+JavaScriptによるプレゼンテーション
- クライアントサイドで完結→GitHub Pagesにアップロード可能
- 補足: Pandocでは他のプレゼン形式にも変換できる
- LaTeX Beamer
- reveal.js以外のHTMLプレゼン(割愛)
Pandocでドキュメントを変換する
LibreOffice Writer文書を中心に
これからやること
- Markdown文書からWriter文書に変換する
- とりあえず変換してみる
- 綺麗なWriter文書を生成する: テンプレート機能
- Writer文書をMarkdownに変換する
- 以下の作業では、GitHubリポジトリのsampleディレクトリにあるファイルを使います
- 興味のある人はgit cloneして試してみてください
とりあえず変換してみる: pandocコマンド
$ pandoc connpass.md -o connpass.odt
ファイルを開く
$ open connpass.odt # Mac/Linux
> start connpass.odt # Windows
綺麗なWriter文書を生成する
- Pandocのテンプレート機能を使う
- Pandocコマンドからテンプレートを生成
- テンプレートをWriterで編集する
- Pandocの変換時にテンプレートをオプションで指定する
(1) Pandocコマンドからテンプレートを生成
$ pandoc --print-default-data-file reference.odt > reference.odt
- コマンドオプションで指定する場合は「reference.odt」という名前でなくてよい
- ユーザデータディレクトリ(後述)に入れる場合は必ず「reference.odt」という名前にする
(2) テンプレートをWriterで編集する
- reference.odtを開く
- 内容はPandocから参照されない
- デフォルトで「Hello World!」と表示されている
- 例えば表示用サンプルを置いてもいい
- 「スタイルと書式設定」から書式を変更
(3) Pandocの変換時にテンプレートをオプションで指定する
$ pandoc connpass.md --reference-doc=reference.odt -o connpass2.odt
--reference-doc
: Writer(やWordなど)のテンプレートを指定 (v2.0)
- 注意: 以前は
--reference-odt
というオプションだった
補足:テンプレートをユーザデータディレクトリに入れる
- ユーザデータディレクトリの場所:
pandoc -v
で出る
- Windows:
C:\Users\ユーザ名\AppData\Roaming\pandoc
- Mac:
$HOME/.pandoc
- このディレクトリに「reference.odt」という名前でテンプレートを入れると、次回からデフォルトで使ってくれる
PandocとWriterの具体的なノウハウ (nogajunさん)
$ pandoc connpass.md --reference-doc=pandoc-writer.odt -o connpass-pandoc-writer.odt
Writer文書からMarkdown/reST/LaTeX文書に変換してみる
- nogajunさんの
pandoc-writer.odt
を変換してみる
- Markdown (Pandoc’s)
$ pandoc pandoc-writer.odt -o pandoc-writer.md
- reStructuredText (Sphinxなどで使用)
$ pandoc pandoc-writer.odt -o pandoc-writer.rst
- LaTeX
Pandocも自由を愛する者の味方です
LibreOffice は、ちょうどあなたのように、フリーソフトウェアの原理を信じ、そしてその成果を制限のない形で世界中で共有することを信じるユーザーによって開発されています。
Pandocの思想的インパクト=「書式の自由」
- 「あらゆる書式は変換できる」というメッセージ
- 真に「書式の自由」がもたらされたとき、何が起こるか?
「書式の自由」がもたらされたとき
- 各々が好きな書式やソフトで文書を作成できる
- それを、目的の書式に変換する
- 適切な形式で入力・データベース化・出力できる
- MS Officeで入力してもいい(もちろんLibreOfficeが嬉しいけど)
- オープンデータの推進
「書式の自由」が与える真のインパクト
- 例:「Excel方眼紙(ネ申Excel)」の縛りから人々が解放されたら?
- 「書式の縛り」が生んできた仕事がなくなる→雇用がなくなる
- いわゆるシンギュラリティの一種?
- 例:社内の「Excel職人」がお役御免となる
- その人たちはどうなるのか?
課題:自由の前提として「肯定」と「居場所」が必要になる
- 「仕事=プライド」の人は、少なくないらしい
- そのような人にとって、自由=「何をしてもいい」という状況は虚しく息苦しい
- 「自由からの逃走」(エーリッヒ・フロム)は起こりうる
- 「仕事=プライド」の人を単に非難してはいけない
- ただ、受け入れること
- 気軽に寄れる「居場所」をつくること
Pandocの今後の課題
- 日本語に特化した文書フォーマットにほとんど対応していない
- 書籍におけるルビや圏点など
- 日本語コミュニティの必要性
- 表形式の文書は対応していない
- Excel文書など→Excel方眼紙への対策には致命的
- サードパーティのプリプロセッサにより部分的に変換する手段はある
- 一部の図表(Graphvizなど)はこの方法で取り込むことができる
日本Pandocユーザ会
- Webサイトはリニューアル予定
- Slackを始めました