--- title: Pandocチュートリアル 第1回 Pandocでドキュメントを変換しよう author: 藤原 惟 / すかいゆき (@sky\_y) date: 2017年1月20日 revealjs-url: reveal.js-3.4.0 theme: sky-sky-y transition: fade transitionSpeed: fast slideNumber: true margin: 0 ... ---- # 自己紹介 - 名前 - 藤原 惟 - すかいゆき - Yuki Fujiwara (本名) - 職業 - フリープログラマ - 専門学校 非常勤講師 ---- # Pandocに関する活動 - Qiitaを中心に記事執筆 - [多様なフォーマットに対応!ドキュメント変換ツールPandocを知ろう - Qiita](http://qiita.com/sky_y/items/80bcd0f353ef5b8980ee) - Pandocユーザーズガイドを和訳 - [Pandoc ユーザーズガイド 日本語版](http://sky-y.github.io/site-pandoc-jp/users-guide/) - バージョンが古くなったので、改訂を予定 ---- # 発表を始めます ---- # Pandoc公式サイト - [Pandoc - About pandoc](http://pandoc.org/index.html) - ユーザーズガイド - [Pandoc - Pandoc User’s Guide](http://pandoc.org/MANUAL.html) - [Pandoc ユーザーズガイド 日本語版](http://sky-y.github.io/site-pandoc-jp/users-guide/) ---- # Pandocと私 - 院生時代の依頼 - 従来よりLaTeXで書かれた「教育用システムの利用手引」を、EPUBにできるかどうか検証してくれないか? - このとき調べ回って、「Pandocというものがあるらしい」と気づいた - 「LaTeXからEPUBに変換する」タスクが想像以上にあっさり実現 - 多少は難はあったが(input命令に当時は対応してない(今は対応)とか、組版がいけてないとか) - この感動が、今の活動の原点 - なんでこんなにすごいソフトウェアが、日本では知られていなかったんだろう? - 「Pandocを広めよう」と決意した瞬間 ---- # このチュートリアルでやること(2回分の概要) - 第1回(今回) Pandocでドキュメントを変換しよう - Pandocをツールとして使う(入門編、第2回の基礎知識) - 第2回 HaskellでPandocを拡張してみよう - Haskellのやさしい入門(を目指します) - 「日常的な実用言語」としてのHaskellを体験してもらいたい - Pandocのソースコードも少し読みます ---- # Markdownって何? - このスライド自体が、実はMarkdownで書かれています - 元々は[John Gruberが作ったオリジナルの処理系](http://daringfireball.net/) でHTMLに変換するための略記法だった - そのうちGitHubやPHPなどで記法が拡張された - MultiMarkdownやPandocの登場をきっかけに、目的も「論文」「プレゼンテーション」「電子書籍」など用途が広がった - 数々の「方言」がある状態 - しかし、本当に基本のMarkdownだけを覚えれば、大抵は書けます - プレビューを行うのが鉄則 ---- # こんなことに困っていませんか? - 書類をWord形式で提出しなければならないけど、Word重いし面倒 - バージョン管理をしたいけど、Word文書は`git diff`とか取りにくい - Word文書をHTMLに変換せよとお達しがあった - 手元にLaTeXのソースがあって、それをEPUBにしてくれと言われた(実話) - 卒論のLaTeX辛いので、Markdownで書きたい - Markdownでスライドショーを作りたい ---- # Pandocの魅力 ---- # Pandocとは - [Pandoc - About pandoc](http://pandoc.org/index.html) - 文書変換ツール - あるフォーマットで書かれた文書を、別のフォーマットに変換するツール - Pandocの特徴は、対応フォーマットが非常に多いこと ---- [![](figure/pandoc_diagram.jpg){ width=15% }](http://pandoc.org/diagram.jpg) ---- # 対応フォーマット(一部省略) - 入力 - 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 - 出力 - Markdown (同上) - manページ, AsciiDoc, InDesign ICML - プレゼンテーション: LaTeX Beamer, HTML5(reveal.jsなど) - PDF (wkhtmltopdfまたはLaTeXエンジンが必要) ---- # Pandocを使う心得 - 過剰な期待をし過ぎないこと - Pandocは万能でないし、文書仕様の全てを満たしているわけではない - 補助的に使うのがベスト - Pandocで、テキストと大まかな構造を抽出 - 変換し切れなかった部分を、手作業や自作スクリプトで編集 ---- # Pandocの実装 - 言語: Haskell - Pandoc的には、「厳密に型が定義されている」ことがありがたい - Haskellは構文解析器(パーサ)を作るのにすごく適している (Parsecなど) - モジュール構成 - Reader: 入力文書を解析し、Haskell上の中間文書に変換する - Writer: 中間文書を受け取り、出力フォーマットに変換する ---- ![Pandocの処理フロー](figure/pandoc_block.jpg) ---- # Pandocが扱えるMarkdown方言 - Pandoc's Markdown: `-f markdown` - Pandocにおける標準のMarkdown方言 - 技術文書から論文・電子書籍まで幅広く対応 - GitHub Flavored Markdown (gfm): `-f markdown_github` - プログラマ・フレンドリーな方言 - PHP Markdown Extra: `-f markdown_phpextra` - 最近はMarkdown Extraとも呼ばれる - MultiMarkdown: `-f markdown_mmd` - HTMLだけでなくLaTeXなどの論文も意図した処理系 - CommonMark: `-f commonmark` ---- # 準備: Pandocをインストールする ---- # ターミナルを開く - Mac: ターミナル.app or iTerm2 - Windows: (今回は)コマンドプロンプト - (分かっている方は)お好きなターミナルでも結構です ---- # Pandocのインストール - Haskell処理系は不要です - パッケージを直接落としてインストール 1. [ここからパッケージをダウンロード](https://github.com/jgm/pandoc/releases/latest) - Windows: `.msi`, Mac: `.pkg` 2. インストール - パッケージマネージャでインストール - Mac([Homebrew](http://brew.sh/index_ja.html)): `$ brew install pandoc` - Windows([Chocolatey](https://chocolatey.org/)): `> cinst pandoc` - Chocolateyのみ、PowerShell(管理者権限付き)がおすすめ - Linux(Debian): `$ sudo apt-get install pandoc` ---- # wkhtmltopdfのインストール - パッケージを直接落としてインストール 1. [ここからパッケージをダウンロード](http://wkhtmltopdf.org/downloads.html) - Windowsは未検証ですが、MinGWの方を試してみてください 2. インストール - パッケージマネージャでインストール - Mac: `$ brew cask install wkhtmltopdf` - Caskの方なので注意 ---- # 動作確認: Pandoc単体 Bashにて確認(コマンドプロンプトも同様のはず) ``` $ pandoc --version $ pandoc --list-input-formats $ pandoc --list-output-formats $ echo "**Hello**" | pandoc -f markdown -t html
Hello
``` ---- # 動作確認: Pandoc + wkhtmltopdf (PDF) ``` $ echo "**Hello**" | pandoc -f markdown -t html5 -o hello.pdf ``` ---- # このスライドを自分で作ろう ---- # Pandocで作れるスライド - 今回は「reveal.js」形式に変換 - HTML+JavaScriptによるプレゼンテーション - 補足: Pandocでは他のプレゼン形式にも変換できる - LaTeX Beamer - reveal.js以外のHTMLプレゼン(割愛) ---- # reveal.js - HTML/CSS/JavaScriptで実装されたプレゼンWebアプリ - クライアントサイドで完結→GitHub Pagesにアップロード可能 ---- # 実際のソースコード - このスライド自体はGitHub Pagesでアップされています - GitHubリポジトリ: