やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Pandocをインストールする

ドキュメント変換ツール。

開発環境

  • Linxu Mint 17.3 MATE 32bit

AsciiDocからMarkdownへ変換したい Markdownから楽してフォーマット変換する方法 - Qiita

インストール

Synapticでインストールした。

f:id:ytyaru:20170228130110g:plain
f:id:ytyaru:20170228130124g:plain
f:id:ytyaru:20170228130132g:plain

確認

バージョン

$ pandoc --version
pandoc 1.12.2.1
Compiled with texmath 0.6.5.2, highlighting-kate 0.5.5.1.
Syntax highlighting is supported for the following languages:
    actionscript, ada, apache, asn1, asp, awk, bash, bibtex, boo, c, changelog,
    clojure, cmake, coffee, coldfusion, commonlisp, cpp, cs, css, curry, d,
    diff, djangotemplate, doxygen, doxygenlua, dtd, eiffel, email, erlang,
    fortran, fsharp, gnuassembler, go, haskell, haxe, html, ini, java, javadoc,
    javascript, json, jsp, julia, latex, lex, literatecurry, literatehaskell,
    lua, makefile, mandoc, markdown, matlab, maxima, metafont, mips, modelines,
    modula2, modula3, monobasic, nasm, noweb, objectivec, objectivecpp, ocaml,
    octave, pascal, perl, php, pike, postscript, prolog, python, r,
    relaxngcompact, rhtml, roff, ruby, rust, scala, scheme, sci, sed, sgml, sql,
    sqlmysql, sqlpostgresql, tcl, texinfo, verilog, vhdl, xml, xorg, xslt, xul,
    yacc, yaml
Default user data directory: /home/mint/.pandoc
Copyright (C) 2006-2013 John MacFarlane
Web:  http://johnmacfarlane.net/pandoc
This is free software; see the source for copying conditions.  There is no
warranty, not even for merchantability or fitness for a particular purpose.

ヘルプ

$ pandoc --help
pandoc [OPTIONS] [FILES]
Input formats:  docbook, haddock, html, json, latex, markdown, markdown_github,
                markdown_mmd, markdown_phpextra, markdown_strict, mediawiki,
                native, opml, rst, textile
Output formats: asciidoc, beamer, context, docbook, docx, dzslides, epub, epub3,
                fb2, html, html5, json, latex, man, markdown, markdown_github,
                markdown_mmd, markdown_phpextra, markdown_strict, mediawiki,
                native, odt, opendocument, opml, org, pdf*, plain, revealjs,
                rst, rtf, s5, slideous, slidy, texinfo, textile
                [*for pdf output, use latex or beamer and -o FILENAME.pdf]
Options:
  -f FORMAT, -r FORMAT  --from=FORMAT, --read=FORMAT                    
  -t FORMAT, -w FORMAT  --to=FORMAT, --write=FORMAT                     
  -o FILENAME           --output=FILENAME                               
                        --data-dir=DIRECTORY                            
                        --strict                                        
  -R                    --parse-raw                                     
  -S                    --smart                                         
                        --old-dashes                                    
                        --base-header-level=NUMBER                      
                        --indented-code-classes=STRING                  
  -F PROGRAM            --filter=PROGRAM                                
                        --normalize                                     
  -p                    --preserve-tabs                                 
                        --tab-stop=NUMBER                               
  -s                    --standalone                                    
                        --template=FILENAME                             
  -M KEY[:VALUE]        --metadata=KEY[:VALUE]                          
  -V KEY[:VALUE]        --variable=KEY[:VALUE]                          
  -D FORMAT             --print-default-template=FORMAT                 
                        --print-default-data-file=FILE                  
                        --no-wrap                                       
                        --columns=NUMBER                                
                        --toc, --table-of-contents                      
                        --toc-depth=NUMBER                              
                        --no-highlight                                  
                        --highlight-style=STYLE                         
  -H FILENAME           --include-in-header=FILENAME                    
  -B FILENAME           --include-before-body=FILENAME                  
  -A FILENAME           --include-after-body=FILENAME                   
                        --self-contained                                
                        --offline                                       
  -5                    --html5                                         
                        --html-q-tags                                   
                        --ascii                                         
                        --reference-links                               
                        --atx-headers                                   
                        --chapters                                      
  -N                    --number-sections                               
                        --number-offset=NUMBERS                         
                        --no-tex-ligatures                              
                        --listings                                      
  -i                    --incremental                                   
                        --slide-level=NUMBER                            
                        --section-divs                                  
                        --default-image-extension=extension             
                        --email-obfuscation=none|javascript|references  
                        --id-prefix=STRING                              
  -T STRING             --title-prefix=STRING                           
  -c URL                --css=URL                                       
                        --reference-odt=FILENAME                        
                        --reference-docx=FILENAME                       
                        --epub-stylesheet=FILENAME                      
                        --epub-cover-image=FILENAME                     
                        --epub-metadata=FILENAME                        
                        --epub-embed-font=FILE                          
                        --epub-chapter-level=NUMBER                     
                        --latex-engine=PROGRAM                          
                        --bibliography=FILE                             
                        --csl=FILE                                      
                        --citation-abbreviations=FILE                   
                        --natbib                                        
                        --biblatex                                      
  -m[URL]               --latexmathml[=URL], --asciimathml[=URL]        
                        --mathml[=URL]                                  
                        --mimetex[=URL]                                 
                        --webtex[=URL]                                  
                        --jsmath[=URL]                                  
                        --mathjax[=URL]                                 
                        --gladtex                                       
                        --dump-args                                     
                        --ignore-args                                   
  -v                    --version                                       
  -h                    --help                                          

使ってみる

HTML→Markdown

$ pandoc -f html -t markdown -o test.md test.html
形式 ファイルパス
入力 html test.html
出力 markdown test.md

ソースコード(test.html)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 1.5.5">
<title>AsciiDocテスト</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
</head>
<body class="article">
<div id="header">
<h1>AsciiDocテスト</h1>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>リスト項目1</p>
<div class="ulist">
<ul>
<li>
<p>リスト項目1-1</p>
</li>
</ul>
</div>
</li>
</ul>
</div>
<div class="paragraph">
<p><a href="http://asciidoctor.org/">AsciiDoc</a> 参照。</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>手順1</p>
</li>
<li>
<p>手順2</p>
<div class="dlist">
<dl>
<dt class="hdlist1">AsciiDoc</dt>
<dd>
<p>軽量マークアップ言語</p>
</dd>
</dl>
</div>
</li>
</ol>
</div>
<div class="imageblock">
<div class="content">
<img src="http://placehold.it/350x150" alt="代替テキスト">
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_テーブル">テーブル</h2>
<div class="sectionbody">
<table class="tableblock frame-all grid-all spread">
<caption class="title">Table 1. テーブルタイトル</caption>
<colgroup>
<col style="width: 33.3333%;">
<col style="width: 33.3333%;">
<col style="width: 33.3334%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">列1</th>
<th class="tableblock halign-left valign-top">列2</th>
<th class="tableblock halign-left valign-top">列3</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">値1</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">あああ</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">2</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">値2</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">いいい</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">3</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">値3</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">ううう</p></td>
</tr>
</tbody>
</table>
<div class="sect2">
<h3 id="_csv">CSV</h3>
<table class="tableblock frame-all grid-all spread">
<colgroup>
<col style="width: 25%;">
<col style="width: 25%;">
<col style="width: 25%;">
<col style="width: 25%;">
</colgroup>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">3</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">a</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">b</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">c</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">d</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">A</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">B</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">C</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">D</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="_html埋込">HTML埋込</h3>
<ruby>
  <rb>亜米利加</rb>
  <rp></rp>
  <rt> アメリカ</rt>
  <rp></rp>
</ruby>
</div>
<div class="sect2">
<h3 id="_外部ファイル表示">外部ファイル表示</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-python" data-lang="python">include::test.py</code></pre>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="footer">
<div id="footer-text">
Last updated 2017-02-28 09:41:52 JST
</div>
</div>
</body>
</html>

出力結果(test.md)

AsciiDocテスト
==============

-   リスト項目1

    -   リスト項目1-1

[AsciiDoc](http://asciidoctor.org/) 参照。

1.  手順1

2.  手順2

    AsciiDoc
    :   軽量マークアップ言語

![代替テキスト](http://placehold.it/350x150)

テーブル {#_テーブル}
--------

  列1   列2   列3
  ----- ----- --------
  1     値1   あああ
  2     値2   いいい
  3     値3   ううう

  : Table 1. テーブルタイトル

### CSV {#_csv}

  --- --- --- ---
  1   2   3   4
  a   b   c   d
  A   B   C   D
  --- --- --- ---

### HTML埋込 {#_html埋込}

亜米利加 ( アメリカ )

### 外部ファイル表示 {#_外部ファイル表示}

~~~~ {.highlight}
include::test.py
~~~~

Last updated 2017-02-28 09:41:52 JST

リストやテーブルなどがいつも使っている形式と違う。はてなブログで使えない。

ドキュメント変換ツールPandoc:ユーザーズガイドを熟読して分かったマニアックな使い方 - Qiita

整形

Pandocの簡単なお作法的な - ITカメラマン忘備録  Inner Journeys: PandocのHTML出力でGFMとカスタムテンプレートを使う

いろいろとパラメータがあるらしい。

コマンド

$ pandoc -f html -t markdown_github+backtick_code_blocks+lists_without_preceding_blankline -o test2.md test.html

はてなGitHubで使っているような形式にできない。

  • リストの項目間に改行が入る
  • コードブロックがPandoc形式になっている

どうしたものか。

Markdown

パラメータ 説明
markdown Pandoc拡張
markdown_strict オリジナル
markdown_phpextra PHP Markdwon Extra
markdown_github Github

これに以下のようなオプションを付与する

オプション

Home · jgm/pandoc Wiki · GitHub

テーブル

  • grid_tables
  • multiline_tables
  • pipe_tables
  • simple_tables

リスト

lists_without_preceding_blanklineで無駄な改行を消せるらしいが、反映されない

コードブロック

backtick_code_blocksはてなGitHubと同じ形式のコードブロックにできると思うが、反映されない。

課題

  • Pandocで思い通りに整形できない

所感

簡単ではなかった。AsciiDoctor→HTMLのほうが簡単な気がしてきた。どちらも思い通りに使えていないが。

現状、はてなブログに応用するのはまだ難しい。はてなAPIでブログデータ取得するのが先決か。