Wordで書かれた原稿をInDesignでDTPして、同時にリフロー型の電子書籍にもしたいという案件が来た。
「Re:VIEW」というテキスト変換ツールがある。決められた記法で書かれたテキストファイルをEPUB形式の電子書籍やMarkdown、HTML、InDesign向けXML(IDGXML)などに変換してくれる。TeXをインストールすればPDFでの出力も可能。@kmutoさんなどが開発している。
- Home · kmuto/review Wiki(https://github.com/kmuto/review/wiki)
- 記法の解説:review/format.ja.md at master · kmuto/review(https://github.com/kmuto/review/blob/master/doc/format.ja.md)
この種のテキスト変換ツールでは「Pandoc」というのもある。Pandocの記法はMarkdownを拡張したもの。
- Pandoc ユーザーズガイド 日本語版 - Japanese Pandoc User's Association(http://sky-y.github.io/site-pandoc-jp/users-guide/)
今回PandocではなくRe:VIEWを採用したのは、「リード文」(章や節の冒頭に載る、ここからの内容の概略)を指定する記法があったりして書籍の執筆向けであるとか、IDGXMLのInDesignへの取り込みで(ツールをひとつ通すと)いい感じにいけるとわかったから。
- 作者によるざっくりとした紹介:書籍制作フローを変える。「ReVIEW」という解。【PDF】(https://kmuto.jp/events/page2012/page2012.pdf)
WindowsやMacにRe:VIEW環境をインストール
Re:VIEWはRubyで動作する。WindowsでRe:VIEWを使うにはまずRubyをインストールする。「RubyInstaller」からインストールするのが簡単だ。
- RubyInstaller for Windows - Downloads(http://rubyinstaller.org/downloads/)
Rubyをインストールしたのち、「コマンドプロンプト」から「gem install review」でRe:VIEWがインストールされる。Rubyのインストール前にコマンドプロンプトを開いていた場合、環境変数(PATH)の変化を反映させるためにコマンドプロンプトを再起動する。
検索してみると「WindowsでRe:VIEWを使うにはCygwinを」という解説がたくさん見つかるが、今のRe:VIEWはWindowsのコマンドプロンプトで使うことができる。
MacにはRubyがプリインストールされている。「ターミナル」から「sudo」(管理者として実行)を加えて「sudo gem install review」とする。
.reファイルの執筆環境
- 書籍執筆用の仕組み「Re:VIEW」の環境構築とRe:VIEW記法の紹介 - Cross Road(http://magicbullet.hatenablog.jp/entry/review_howtouse)
上の記事で、テキストエディタ「Atom」でRe:VIEW向け設定を使う方法が解説されている。シンタックスハイライトだけでなくリアルタイムプレビューもできるそうでこれはいいですね。
(Windows版で試してみたら、自分のところではプレビューはエラーが出てうまくいかなかった。「language-review」パッケージについて「Uncaught TypeError: Cannot read property 'getParent' of null」とのこと)
Re:VIEWを使ってみる
「review-init ドキュメント名」と実行すると、標準的な設定ファイルやフォルダを作ってくれる。
「.re」ファイルからHTMLを作るには、たとえば「sample.re」からなら「review-compile --target html sample.re > sample.html」。
(設定ファイルを置かない場合、CSSはreファイルと同じディレクトリにある「stylesheet.css」を参照する。stylesheet.cssの例は https://github.com/kmuto/review/blob/master/test/sample-book/src/style.css などに)
InDesign向けXMLにするには「review-compile --target idgxml sample.re > sample.xml」。これは後述する方法でもう一度変換してからInDesignで読み込むとよい。
EPUBを作るには「sample.yml」などyml形式のテキストファイルに設定を書いて「review-epubmaker sample.yml」。
Re:VIEWの解説書
Re:VIEWについてひと通り解説した同人誌が無償で提供されている。
- TechBooster/FirstStepReVIEW: 「はじめてのReVIEW」(https://github.com/TechBooster/FirstStepReVIEW)
EPUBやPDFに出力するためのファイル一式が提供されているので、Re:VIEWを使って自分で変換するとよい。ただしPDFでの出力はTeXのインストールが必要でちと大変。
EPUBの閲覧は「Calibre」で
EPUBの閲覧にいいのは電子書籍管理ソフトの「Calibre」で、Windows/Mac/Linux用が提供されている。
- calibre - E-book management(https://calibre-ebook.com/)
IDGXMLをInDesignに読み込むための変換スクリプト
Re:VIEWで出力したIDGXMLはそのままだとInDesignではちょっと使いづらい。変換するスクリプトがあった。
- ReVIEWの生成したXMLをInDesignに取り込む時のXSL例 - 名もないテクノ手に(http://seuzo.net/entry/2012/01/25/140954)
これは「xsltproc」を使うということでMacにインストールしようとしたが、そのために必要な「libxml」をMacへインストールできなかった。
libxmlのソースは↓にある。ここから自分でコンパイルすればいいかもしれない。
- Index of /sources/old(http://xmlsoft.org/sources/old/)
Windowsではxsltprocをインストールできた。しかしこれがなかなか大変だった。xsltprocのインストール方法は↓で解説されている。
- 2. インストール(Windowsプリコンパイル版)(http://saj.co.jp/techinfo/htmls/xml-libxslt-install_windows_precompile.html)
ここで説明されているのは「libxslt」のインストールだがこのページで正しい。このページの「Prev」にはこう書いてある。
1. はじめに
さて、xsltproc(libxslt)をインストールするにはあらかじめインストールしておくべきソフトがいろいろある。ここがけっこう大変なのだった。
- gettextをインストール(解説:http://saj.co.jp/techinfo/htmls/other-gettext-install_windows_precompile.html)
- libiconvとzlibをインストール(解説:http://saj.co.jp/techinfo/htmls/xml-libxml2-install_windows_precompile.html)
- libxml2をインストール(解説:http://saj.co.jp/techinfo/htmls/xml-libxml2-install_windows_precompile.html)
この順序でインストールしていって、やっとxsltproc(libxslt)をインストールできる。お疲れさまでした。
ユーザー環境変数の追加について
xsltprocのインストールに際しては、実行ファイルを置いた場所を環境変数「PATH」に指定してあげる必要がある。
「システムのプロパティ」([Win]+[Break]→「システムの詳細設定」)→「詳細設定」タブの[環境変数]ボタンをクリック→[PATH]をクリックして[編集]ボタンをクリック、「変数値」の末尾にxsltprocのインストールディレクトリ(「;C:\bin\usr\bin」など)を記入する。
IDGXMLをInDesignへ読み込む手順
まず「review-compile --target idgxml 変換元.re > 変換元.xml」などで.reファイルをIDGXMLに変換する。次に「名もないテクノ手に」にあるスタイルシートをたとえば「4review.xsl」などで保存して、「xsltproc 4review.xsl 変換元.xml > 変換先.xml」などとすればInDesign向けに読み込みやすいXMLファイルになる。
XMLファイルをInDesignに読み込む方法の解説は以下。
- MarkdownをXMLに変換してInDesignに読み込む - arinoth's memo(http://arinoth.hatenablog.com/entry/2014/10/13/065953)
この記事の「XMLの読み込み」に、InDesign用XMLを流し込む方法が解説されている。InDesign側であらかじめ段落スタイルや文字スタイルを作っておき、XMLのどのタグをどのスタイルに割り当てるかを指定していく。
ここでしっかりやっておけば、InDesignに流し込んでからの作業が格段に楽になる。
「技術書典」にRe:VIEWとInDesignを使った組版の解説本が出る
6月25日にアキバで開催される技術書オンリーの同人誌即売会「技術書典」で、@kmutoさん自ら執筆の『Re:VIEW+InDesign制作技法』なる本が販売されるとのこと。買います!
- 技術書典(https://techbookfest.org/)
- Re:VIEW+InDesign制作技法 Automatic typesetting using Re:VIEW, InDesign, and JavaScript |(http://review.kmuto.jp/)
Wordファイルからテキストをちゃんと取り出すソフト「xdoc2txt」
ところで今回の仕事では元原稿がWord形式で提供されている。これをいったんテキスト形式に変換しなければならなかった。
Wordでdocxファイルなどを読み込み、「名前を付けて保存」でテキスト形式(txt)を選択しても、テキストボックス内の文字が出力されなかったりしてうまくない。
そんなあなたに「xdoc2txt」。WordやExcel、PDFなどのファイルから文字を取り出す。テキストボックス内の文字列もちゃんと取り出してくれてありがたい。
- xdoc2txt(http://ebstudio.info/home/xdoc2txt.html)
(docxやpdfをドラッグ&ドロップできるショートカットを作るときは、ショートカットのプロパティの「ショートカット」タブにある「リンク先」を「C:\…\xdoc2txt.exe -f -8 -o=0」にするとUTF-8のテキストファイルに書き出される)
WZ Editor 5.x向けのRe:VIEW向け色分けスタイル設定
わかる人向けです。Re:VIEWのすべての記法を網羅しきれていない可能性があります。最新版のWZ Editorと互換性があるかは不明です。
reword(use=1;rgb="0x0000FF";atr=2;re=1): https?://[\w/\:;%\.,\$\&\!@\+\?=~\#-]+ reword(use=1;rgb="0x0080C0";atr=3;re=1): ^\s\*+\s|^\s\d+\.\s|^\s:\s reword(use=1;rgb="0x800040";atr=0;re=1): ^\*+\^\+\]+ words(use=1;rgb="0xC46B00";atr=0;flag=1): @@< >{ } ( ) //
1つの.reファイルを分割するPerlスクリプト
Re:VIEWで1つの.reファイルを複数のHTMLに分割して出力する方法がわからない。どうもRe:VIEWは1つの.reファイルにはh1要素(「= 」で始まる行、章タイトルの扱いになる)が1つしかない前提で作られているようだ。しかし原稿全体を検索したいときや一括置換したいときなど、複数の.reファイルを横断的に検索するのはちょっと手間だし間違いも入りやすい。1つの.reファイルでh1が出てくるごとにHTMLファイルを分割して出力するようなしくみがほしい。
といっても今のところどうにもならないので、h1ごとに「.re」を生成するPerlスクリプトを書いた。
以下をサンプル「all.re」として保存する。
#@# ここから「preface.re」
* 本書中に登場する各種の会社名、製品名は一般に各社の登録商標です。
= はじめに
本書が読者の皆さんの役に立つことを願っています。
#@# この行から下が「chap1.re」
= あれについて
あれこれ
#@# この行から下が「chap2.re」
= これについて
これそれ
以下のPerlスクリプトを「all.re」と同じディレクトリに置いて実行する。自分用なのでファイル名、分割方式などはすべて決め打ちになっている。
- 参考にしたページ:perlでファイルを分割するプログラム - Perl 解決済 | 教えて!goo(http://oshiete.goo.ne.jp/qa/801750.html)
上のページで紹介されていたスクリプトでは1行ごとにファイル出力していたが、それだとディスクへの書き込みがたくさん発生して処理がものすごく遅かった。分割するファイルの内容ごとに変数に入れていき、最後にまとめてファイル出力する処理にしたらすぐ終わるようになった。
#! /usr/local/bin/perl use warnings; my $chap=0; my $infile="all.re"; #入力ファイルのファイル名 my $outfilename = "preface.re"; #最初の出力ファイル名だけ「preface.re」固定、2つめから"chap".n-1.".re"に # $infileの冒頭(見出しなし)〜最初のh1〜次のh1の手前までを「preface.re」として出力、 # 2つめのh1から次のh1の前の行までを「chapN.re」として出力 open IN, $infile or die $!; while (<IN>) { if (/^= .+/) { $chap++; $out[$chap] .= $_; } else { $out[$chap] .= $_; } } close IN; my $i = -1; foreach (@out){ if ($i > 0){ $outfilename = "chap".$i.".re"; open (OUT , "> $outfilename"); $outarray = $i + 1; print OUT $out[$outarray]; } else { open (OUT , "> $outfilename"); print OUT $out[0].$out[1]; } $i++; } close(OUT); exit;
これで「preface.re」「chap1.re」「chap2.re」が生成される。これに合わせた「config.yml」や「catalog.yml」をあらかじめ作っておけば、このPerlスクリプトの実行に続けて「review-epubmaker config.yml」をすればEPUBが作られるというわけ。そういうバッチファイルを書いた。
Re:VIEWへの要望:見出し文字列を取得しつつ見出しへリンクしたい
Re:VIEWでは「@
また「@
(こういう要望はGitHubにissueを立てればいいのかなー。でもGitHubは恐ろしくてできない)
追記:config.ymlでの指定でリンクになる由
「config.yml」に「chapterlink: true」と書いておくことで、@
EPUBのお手軽作成は「でんでんコンバータ」で
EPUBへの変換という目的だけなら「でんでんコンバータ」が簡単だ。
- 電書ちゃんのでんでんコンバーター - でんでんコンバーター(http://conv.denshochan.com/)
Markdownをもとにした「でんでんマークダウン」でいろいろ指定する。
「でんでんコンバータ」は画像などの構成ファイルが50ファイルまでという制限があるため今回は採用しなかった。また、(EPUBの内部的に)章ごとに別のHTMLファイルに分かれてほしいときにどうしたらいいのかもわからず。
md2reviewでMarkdownをRe:VIEW形式に変換
MarkdownをRe:VIEW形式に変換するには「md2review」を使う。
- takahashim/md2review: a converter from Markdown into Re:VIEW, using redcarpet(https://github.com/takahashim/md2review)
「ターミナル」から「gem install md2review」でインストールされる。
Windowsでも同様に「install md2review」。
MacのRubyのバージョンが低いとき
こんな手順でmd2reviewをインストールできた。
- Homebrewをインストール(http://brew.sh/index_ja.html)
- gitを2.3.5にバージョンアップ(https://sourceforge.net/projects/git-osx-installer/files/?source=navbar)
- .bash_profileを編集:OSX で Git をバージョンアップする - Qiita(http://qiita.com/d_nishiyama85/items/d63da1e50405abc0929c)
- rbenvをインストール(brew install rbenv ruby-build)
- 参考:Homebrewでrbenvをインストールする | Mawatari.jp(http://mawatari.jp/archives/install-rbenv-by-homebrew)
- Ruby 2.3.0をインストール(rbenv install 2.3.0)
- md2reviewをインストール(gem install md2review)
Pandoc用Re:VIEWのWriter
ひょっとしてこれを使えば、Pandocが扱えるいろいろなファイルを直接Re:VIEW向けに変換できるのかもしれない。(未検証)
- takahashim/review-pandoc: Re:VIEW Writer for Pandoc(https://github.com/takahashim/review-pandoc)
カスタムWriterを使用するには、単にLuaスクリプトへのパスを出力フォーマットとして指定するだけです。例えば:
pandoc -t data/sample.luaPandoc ユーザーズガイド 日本語版 - Japanese Pandoc User's Association
とのこと。
はてな記法とMarkdown記法の相互変換
はてな記法を使ってマークアップした文書をRe:VIEWに使いたいことがあるかもしれない。またその逆もあるかもしれない。そういった場合、間にMarkdownを挟んで変換することになる。(以下はいずれも未検証)
- はてな記法→Markdown(Hateda2md)
- 一生涯はてな記法しますか?それともMarkdownしますか?(http://melborne.github.io/2012/05/05/to-be-hatena-notation-or-to-be-markdown/)
- Markdown→はてな記法(hatena.lua)
- PandocのカスタムWriterでMarkdownからはてな記法に変換 - Qiita(http://qiita.com/takada-at/items/4d94a8811b4aaa5d5fd3)
Markdownになればmd2reviewでRe:VIEW形式に変換できる。Re:VIEWからMarkdownへの変換はRe:VIEW本体で可能である。
Pandoc向けのはてな記法Writerもあるもよう。
- Pandoc で はてな記法 Writer を書いた - Oh, you `re no (fun _ → more)(http://d.hatena.ne.jp/camlspotter/20120308/1331223588)
(6月9日記)