Hatena::ブログ(Diary)

名もないテクノ手 このページをアンテナに追加 RSSフィード

EPUB版『InDesign者のための正規表現入門』

InDesignのTips一覧

2011-09-29

[][][][] はじめてのReVIEW〜InDesignへの取り込み

たいへん遅ればせながらReVIEWを導入しました。著者や編集者が簡易に編集可能なReVIEW記法*1を基に、XHTMLやEPUB、XMLTeX、PDFなどを自動生成するフレームワークです。

昨年発行された『電子書籍で生き残る技術−紙との差、規格の差を乗り越える−』を読んでからReVIEWに大きな関心を持ちました。先月、海上忍さんのコラム「1つのソースでEPUBとPDFを生成できる「ReVIEW」を試す」を拝見して、ヤラねば! と思いつつずっと宿題だったんです。先日たまたま「ReVIEW の使い方 - A Day in Serenity @ Kenji」を読んでようやく重い腰をあげることとなりました。<重すぎるだろ...

でだ。「ReVIEWクイックスタートガイド」と前述のリンクなどを参考にしてちょろっとやってみたら、簡単すぎて拍子抜けしました。もう、書くことない。


(インストール上で注意点があるとすれば)Mac OS Xの環境ですと、rubyは1.8系なので、gemがそもそも入っていないはずです*2TeXやPDFを生成するためには、TeX環境が必要です。TeXやPDFを生成しないなら、TeX環境はいりません。

海上忍さんのコラム中で紹介されている達人出版会の高橋征義さんがご用意くださっているサンプルを使って、実際にEPUBを作ってみます。

$ review-epubmaker config.yml

これだけで、ディレクトリ内にEPUBが生成されました。これをAdobe Digital Editionsで見ると、こんな感じです。

f:id:seuzo:20110929141220p:image



自前で作ってみた

あんまりあっけないので、簡単なものをひとつ自前で作ってみました。ディレクトリ階層はこんな感じです。

f:id:seuzo:20110929142607p:image

gingatetsudono_yoru.zip 直

ファイル・フォルダ名説明
_cover.htmlEPUB用のカバーHTML
base.cssCSS(EPUBやHTMLに付加するスタイルシート)
ch01.re〜ch09.re章分けしたReVIEWファイル(ソースコンテンツ)
CHAPS章構成を記述したファイル(名前は固定)
config.ymlEPUBやPDFを生成する時の設定YAML
images画像用ディレクトリ(名前は固定)
 ch01-fig01.jpg〜ch09-fig09.jpg画像ファイル(ファイル名には章ファイルと同じプレフィックスが必要)
 cover.jpgカバー用画像
styPDFやTeX生成時のマクロ
 jumoline.styTeXマクロ
 samplemacro.styTeXマクロ

EPUBに書き出してみると、こんな感じです。gingatetsudono_yoru.epub 直

f:id:seuzo:20110929151507p:image

iPhoneiBooksで見ると、こんな感じ。*3

f:id:seuzo:20110929151508p:image f:id:seuzo:20110929151509p:image f:id:seuzo:20110929151510p:image f:id:seuzo:20110929151511p:image


ReVIEWフォーマット自体は、いくら簡易フォーマットとはいえ人間がタイプするものですから、当然タイプミスが含まれてしまいます。HTMLでさくっと確認できればより正確ですね*4

$ review-compile --target html ch02.re > ch02.html

f:id:seuzo:20110929152953p:image

確認するだけならこれでも悪くないんですが、デフォルトでは見出しにセクション番号が付いてしまいます。番号が不要ならば「--level=0」を指定しましょう。また、特定のスタイルシートを適用したいなら、「--stylesheet=hoge.css」を付けます。他のオプションの説明は「--help」で表示されます。

$ review-compile --target html --stylesheet=base.css --level=0 ch02.re > ch02.html

とすればこうなりました。

f:id:seuzo:20110929152954p:image


InDesignへの取り込み

ReVIEWファイルからは、XMLを生成できます。XMLを生成すれは、InDesignへの取り込みはごく簡単なことでしょう。

$ review-compile --target idgxml --level=0 ch01.re > ch01.xml

とすると、xmlが生成されます。

<?xml version="1.0" encoding="UTF-8"?>
<doc xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/"><title aid:pstyle="h2">一 午後の授業</title><?dtp level="2" section="一 午後の授業"?>
<p>「ではみなさん、さういふふうに川だと云はれたり、乳の流れたあとだと云はれたりしてゐた、このぼんやりと白いものが何かご承知ですか。」</p>
<p> 先生は、黒板に吊した大きな黒い星座の圖の、上から下へ白くけぶつた銀河帶のやうなところを指しながら、みんなに問ひをかけました。</p>
 ...(中略)
<p> そして教室中はしばらく机の蓋をあけたりしめたり本を重ねたりする音がいつぱいでしたが、まもなくみんなはきちんと立つて禮をすると教室を出ました。</p>
<img>
<Image href="file://images/ch01-fig01.jpg"  />
</img>
</doc>

ここで注目したいのは、このXMLInDesignに流し込むことを前提としていることです。それはxmlnsを見てもわかりますし、InDesign特有の改行の扱いが最適化されています。余計なインデントもありません。実際にInDesignに流し込んでみると、こんな感じになります。

f:id:seuzo:20110929165102p:image

たまたま縦書きなので、写真も回転してくれちゃっています。これはXML読み込みの仕様、後処理はスクリプトで。

f:id:seuzo:20110929165103p:image


この流し込み例はXMLを利用したものですが、ReVIEWフォーマットからInDesignタグに直接マッピングしてもいいかもしれません。事実、ぼくはReVIEWフォーマットの前身にあたるASCIIのEWBフォーマットで何度も原稿をいただいて、InDesignタグ(あるいはXPressタグ)に変換していました。


まとめ

ReVIEWフォーマットを利用する利点を3つ上げます。

  • コンテンツをテキストベースで保持・管理できる
  • 書き出されたタグそのものがきれい
  • フリー!

コンテンツの保持者は著者であり、出版社の編集者です。書籍の改版時や部分的な転用時、あるいは電子出版への展開などに、コンテンツの持ち主が扱いやすいテキストであることはとても重要なことです。コンテンツをInDesignドキュメントとして持っていたらどうでしょう? ほとんどの著者や編集者ではInDesignを扱えません。組版の専業者に別途ご相談ということになります。たいてい、InDesignドキュメントはコンテンツと組み指定が分ち難く一体になっています。電子出版のために、それを分離するには多大な手間と時間とコストがかかっています。

また、InDesignが書出すEPUBやHTMLは人が読める形になっていません。通常、構造化もされていません。InDesign CS5.5からは新たにアーティクルやタグなどの概念が持ち込まれましたが、それはオッカムの剃刀です。InDesignドキュメントでコンテンツを保持するのは、InDesignのアプリケーションやバージョンに縛られる結果になります。このへんのことは以前「InDesignは電子書籍の中間ファイルたりうるか?」に書かせていただきました。現在、InDesignのアップグレードは1年と短くなっており、完全にイノベーションのジレンマに陥っています。InDesignはコンテンツのハブではなく、商業印刷物のための入れ物デバイスだと考えます。

そして、ReVIEWはオープンソースのフレームワークです。誰もが無償でこの環境を享受できます。よくわかんない権利関係に悩まされることもありません。操作同様、シンプルに選択できる選択肢です。


最後に、ReVIEW開発者のみなさまと、使用方法などをレポートしてくださったみなさまに感謝いたします。ぼくの初めてのサンプルはいろいろ間違いがあるかもしれませんが、ご指摘いただければ修正させていただきます。

*1:ReVIEWフォーマットは ASCIIのEWBを基本としながら、一部に RD や各種 Wiki の文法をとりいれて簡素化したものです。詳しくはhttps://github.com/kmuto/review/blob/master/doc/format.rdoc を参照

*2:ぼくは現在、ruby 1.9.2p136を使っているので、デフォルト環境ってものがよくわかっていないんですが... 1.9系ならふつーにgem install reviewだけでいけちゃいます

*3:ちょっと書き方が悪いせいかiBooksでは章の最初にゴミが出てしまったので、Sigilで保存し直しました。

*4:実運用上では、とても重要なことです。所詮、人間がタイプするものなどハナから間違いが存在してあたりまえです。正しい記法でなければ、正しく処理できません。ほら、hatena記法にも「確認する」ホタンが付いているでしょ

2011-02-02

[][][]CPubってなんだ?

本日、PAGE 2011を見学してきた。お目当ては株式会社ニューキャストさんのCPubである。CPubとはナニか? ぼくがグダグダ講説を垂れるよりまず下記エントリーを読んでいただきたい。

ひとことでいうなら、Wikiを利用したCMSだ。Wiki記法によるマークダウンによってコンテンツを構造化して保持しようという目論みだ。マークダウンを使えば、XMLやプログラミングなしに文書を構造化でき、エンジニアリングに詳しくない編集者や著者もブログ感覚で文書を作成・編集できる。

Wikiを利用した出版物向けの文書構造化の取り組みはCPubだけではない。『電子書籍で生き残る技術−紙との差、規格の差を乗り越える−』に紹介されている、TOP STUDIOさんのReVIEWなどもある。またある出版社ではWordPressを積極的に取り入れ、自社での変換ノウハウを蓄積されている会社もある。

CPubが一般的なCMSと違うところを2つあげてみよう。ひとつは、このCMSが(電子出版と紙媒体を含む)出版物を念頭に置いて設計されていること。ニューキャストさんは長年、出版の制作を生業とされている会社だ。このノウハウが生かされているわけだ。ふたつめは、IDML書出しができること。現状、制作会社への原稿の多くはMS Wordやマーキングテキストで渡されている。これらはたいていテキスト洗浄を必要としそのままでは使えない。じゃあ、XML入稿なら文句はあるまい。いやいやXMLって聞くだけでもう腰が引けてしまう。そこでCPubで書き出したIDMLを原稿に使えるのだ。粗組みしたIDMLには段落スタイルや文字スタイルが適用されているし、図版や表もIDML上で再現できる。

CPubを使えば、著者・編集者・校正者などのグループワークを円滑に行えるし、用途によってEPUB、IDML、bookreaderへと出力できる。なにより、InDesignドキュメントを中間ファイルにしようなどというリスキーで野放図なワークフローに混乱させられなくて済む。

実際に動作画面を見てみると、予想以上にシンプルで気負いがない。興味本位でお話を伺ったところによると、写真図版はFlickrなどのWebServiceから直リンクできるらしい。さらに任意のタグ(とその記法)を追加編集できるようになるとのこと。IDMLはStoryをごっそり入れかるような方法を採っているようだ。今春から専用サイトでテスト稼働が始まるとの情報も得た。

今後の課題として、誰がいつどこを直したかのバージョニングが可視化できること。また、WordPressやMediaWikiなど主要なプラットフォームからのインポート/エクスポートを挙げておきたい。今後の動きに注目だ。

2011-01-19

[][][][][]InDesign電子書籍の中間ファイルたりうるか?

2011年、電子2年(あるいは何度目の元年なのか)などと言われている昨今、電子出版への取り組みを始められた出版関係の方も多いと思います。電子出版とひとくちに言っても、アプリ形式のものからPDF、EPUB、専用フォーマットに至るまでさまざまな種類があります。なかでも、自社のコンテンツを構造化されたXMLやDB、または管理されたCMSに取り込む必要性を感じていらっしゃる方も多いかもしれません。

構造化されたコンテンツを取り出すために、組版ソフトのInDesignからのEPUB(XHTML)書出しに期待している方も多いでしょう。実際にそうしたワークフローを推奨する書籍やネット上の記事も散見されます。しかしながら、InDesignからのEPUB(XHTML)書出しは(現状では)まったく使い物になりません。ここで3つだけ理由を述べます。

まず、ひとつめにInDesignから書き出されたEPUB(XHTML)はまったく構造化されていません。ルビ要素などもなくなってしまいます。とある書籍では書き出されたデタラメなタグをパーサーも使わないまま、検索置換で置き換えるバッドノウハウが紹介されていたりします。こうしてできたEPUB(XHTML)は最早InDesignのコンテンツと同期していません。1度目はそれでよいかもしれませんが、再版時、修正時には膨大な手作業を伴います(もちろんここにはコストもかかります)。出版物は長いスパンで保存すべきコンテンツがあり、こうしたワークフローを続ければコンテンツの一意性の維持さえ難しい状況が生まれるでしょう。

ふたつめは、EPUB(XHTML)書出しを前提にしたInDesignドキュメントには、特別な配慮が必要です。InDesign内部のスタイル名の命名や種類に気を遣ったり、見出しや図版をひとつのストーリーに集約したりする作業です。過去データならば、最初にこれを作り直す必要があります。この作業でレイアウトが変わってしまうので、もう元の紙用版下にはなりません。新規で作成するとしても、紙面デザインの大きな制約になります。EPUB(XHTML)書出しを前提にするというだけで、デザインの制約を受けるなんて本末転倒ではありませんか。

みっつめは、わざわざ面倒なInDesignから書き出す意味がないということです。EPUB(XHTML)が必要ならDreamweaverとSigilを使う方が100倍簡単です*1。やってみればすぐにわかります。


近い将来、出版の制作は紙媒体より電子出版が先になるかもしれません。

紙を最初に作る理由はあるでしょうか? 情報コンテンツの「鮮度」から見れば、電子出版を先行させるのは理に叶っています。あるいは、電子版で売り上げの様子の見ながら、印刷流通コストのかかる紙に展開するのは穏当なやり方に見えます。

この時もし、InDesignのドキュメントを中間ファイルにしたワークフローが定着していたらどうでしょう? InDesignを仲介するワークフローは、この可能性を考慮していません。制作ワークフロー全体を見直す中で、大きな流れから1歩も2歩も遅れてしまうのではないでしょうか。

コンテンツはDBやCMSで管理されるべきです。こうした一次コンテンツから電子出版物を制作するソリューションは既にいくつかあります。紙媒体へ展開する必要があればDBからXMLを書出し、InDesignでレイアウトします(InDesignはずっと以前からXMLを扱えます)。InDesignはコンテンツの入れ物であって、紙媒体のためのデバイスです。


AdobeはInDesignプロダクトをコンテンツのハブとして位置づけているようです。前述のEPUB(XHTML)書出しだけでなく、FLASH書出し、インタラクティブPDF、そしてAdobe Digital Publishing Suiteもあります。一見してにぎやかで、将来性があるように見えます。しかし、全体の道筋や方向性が違うような気がしてなりません。それは端的に成果物の完成度に現れています。たとえば、Adobe Digital Publishing Suiteでは、ユーザー操作のちょっとしたダイアログやビープを追加したりするようなUIのカスタマイズすらできません。そもそもこれをアプリと呼ぶのは正しくありません。細かい操作や振る舞いが制御できないのですから、根本的に違うなにかです。そして今後、(アプリとして)より多くのことができるように機能が追加され続けるとしたら、それはほとんど拷問に近い学習を意味するでしょう。また、将来性といったところで、それはアドビのロードマップに依存しすぎます。不具合があってもそれがいつ解消されるかわからない状況はワークフローを常に危うくします。アドビでは、かつていくつかのアーキテクチャが何の催告もなく突然打ち捨てられた過去もありました。(電子出版のワークフローが整っていない)今の段階で多様性はよい兆候ではありません。InDesignには組版ソフトとしてやるべきことがまだ山ほどあるんじゃないでしょうか。

*1:拙書、EPUB版『InDesign者のための正規表現入門』はDreamweaverとSigilのみで作成しました。

2010-09-16

[][][][]DTPの勉強会 特別編・第1回

あかつきさん主催の『DTPの勉強会 特別編・第1回』でおしゃべりします。お申し込みは下記から:

セッション1の内容は第6回大阪DTPの勉強部屋と同じです。大阪同様に物販もさせていただくことになりました。CD-ROM版『InDesign者のための正規表現入門』を半額(500円)で販売します。

セッション2ではHTMLからEPUBを作成するデモをさせていただきます。HTMLさえ書けば、あとはSigilで変換するだけなので、すぐに終わっちゃいます。あかつきさんはPagesからの変換のデモをされるご予定とか。


「セミナー行ったことない」「大きなお[兄姉]さんとかいて、なんだか怖そう」と思っている方を特に歓迎します。

2010-09-14

[][][][]sigilの書き出すHTMLを一括修正する

以前、「iBooksでの<pre>タグの扱い」でちょっと書きましたが、HTMLをSigilでEPUB変換をすると、自分のいいように整形してしまう箇所があります。<pre>タグだけじゃくて、複数のファイルを読み込むと、参照しているCSSがひとつなのにもかかわらず、すべてのHTML分のCSSの分身を作ってしまいます。本来「base.css」しかないはずが、「base0014.css」などと追い番を付けられてしまうのでした。かこわるい。

 <link rel="stylesheet" href="../Styles/base0014.css" type="text/css" />

Nokogiriでパースして修正するようにしたら、あとあといろいろ使い回しできるかなあ、と思ってこんな感じで書いてみました。

#!/usr/bin/env ruby
# coding: utf-8

#Sigilが整形してしまうXHTMLを修正する
#1)ひとつのCSSしか参照していないのに、XHTMLの数だか増やしてしまう。→4桁の数字を削除
#2)preタグの前後に改行を入れてしまう。→preタグ内の最初と最後の改行を削除
#
require 'nokogiri'
require 'open-uri'

ARGV.each do |my_file|
	
	#XHTMLのパース
	doc = Nokogiri::XML.parse(open(my_file), nil, 'UTF-8')
	
	#ファイル名の変更(バックアプ用)
	File.rename(my_file, my_file + ".bac")
	
	#CSS名の変更
	doc.xpath("//xmlns:html/xmlns:head/xmlns:link").each do |my_css|
		tmp = my_css["href"].sub!(/\d{4}\.css$/,"\.css")
		if (tmp != nil) then
			my_css["href"] = tmp
		end
	end
	
	#preタグの改行削除
	doc.css('pre').each do |node|
		node.content = node.text.sub!(/^\n/,'')
		node.content = node.text.sub!(/\n$/,'')
	end
	
	#ファイル書き込み
	File.open(my_file, "w") {|f|
		f.puts(doc.to_xml)
	}
end

もちろん、CSS名にしたっていろいろな名付けルールがありますから(そもそも数字で管理されているとか)汎用的に使えるものではありません。ターミナル上からワイルドカード指定しても動作しますので、セクションHTMLがいくつあっても(2、300ファイルくらいなら)数秒で終わります。

これを延長して頑張れば、どこぞのアプリケーションが無責任に書き出したEPUB(腐)も修正できるかもしれません。しかしそういうHTMLをできれば見ないようにするのが賢明な人の考えることです。そもそも、ある一定のルールで書き出されたHTMLを処理する汎用的プログラムが(可能性として)書けるとしたら、それをまず先にやらなければならないのはAdobeさんでしょう。


ちなみに...

上のスクリプトはNokogiriをつかって、XMLでパースしています。HTMLでパースすると、ヘッダーとか書き換えられちゃいます。元のヘッダはDreamweaverが吐き出したものにちょっと手を加えてこんな感じ。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="ja">
<head>
  <meta content="市川せうぞー" name="Author" />

  <title>タイトルほげほげ</title>
  <link rel="stylesheet" href="../Styles/base0014.css" type="text/css" />
</head>

これをHTMLでパースするとどうなるかというと...

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<?xml version="1.0" encoding="utf-8"?><html xmlns="http://www.w3.org/1999/xhtml" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="市川せうぞー" name="Author">
<title>タイトルほげほげ</title>
<link rel="stylesheet" href="../Styles/base.css" type="text/css">
</head>

となってしまい、iBooks(やAdobe Digital Editions)では表示できません。

f:id:seuzo:20100914024015p:image