2012-03-12

ReVIEWの外部ファイル取り込み(プリプロセッサ)

 ReVIEWではドキュメントの中に、外部のテキストファイルの内容やコマンドの結果を取り込む方法が用意されています。ReVIEWドキュメントの中を検索しながら編集しなくても、外部ファイルを差し替えればすべての参照箇所が書き換えられます。

特定の単語を差し込む

 まずは簡単な単語差し込みを試してみましょう。ReVIEWドキュメントと同じ階層に「name.txt」というテキストファイルを用意してください。「name.txt」の中身は自分の名前を書いておきます。
f:id:seuzo:20120309173744p:image
f:id:seuzo:20120309173759p:image
 ReVIEWドキュメントの方は「name.txt」を参照するためにインライン要素@<include>{pathname}を使います。たとえば、実際にはこうなります。

私が担当の@<include>{name.txt}です。

f:id:seuzo:20120309174456p:image
 このReVIEWドキュメントからHTMLを生成すると、「name.txt」の内容を差し込みしました。
f:id:seuzo:20120309174913p:image
 このname.txtにはReVIEW記法が使えます。テキストの差し込みが行われた後に、ReVIEW記法が評価されているようです。
f:id:seuzo:20120309175307p:image
f:id:seuzo:20120309175310p:image
 ちなみに、@<include>{pathname}はパスを理解するので、「name.txt」がimagesディレクトリの中にあれば、@<include>{images/name.txt}と書けるでしょう。

段落を含んだ文章を差し込む

 @<include>{pathname}はあくまでインライン要素として文中に差し込むためのコマンドです。別管理されたコードリストなどの外部ファイルの内容など、複数行の段落にわたるブロックとして取り込みたいときには、ちょっと手順を踏む必要があります。

(1)外部ファイルを用意する
 ここでは「script.rb」というテキストファイルを用意しました。
f:id:seuzo:20120309232059p:image
f:id:seuzo:20120309232008p:image

(2)オリジナルReVIEWドキュメントにファイル指定する
 オリジナルReVIEWドキュメント「ch02_org.re」の中の挿入位置に下記マーキングをします。

#@mapfile(script.rb)
#@end

f:id:seuzo:20120309232544p:image

(3)review-preprocコマンドで外部ファイルをマージする
 ターミナルから下記review-preprocコマンドをタイプします。

$ review-preproc ch02_org.re > ch02.re

 プリプロセッサで生成した「ch02.re」を見てみましょう。
f:id:seuzo:20120309233133p:image
 「script.rb」の内容が「ch02.re」の中に挿入されているのがわかります。あとで「script.rb」の中を修正したとしても、プリプロセッサで再マージすれば常に新しいReVIEWドキュメントが生成されます。「#@mapfile(script.rb)」と「#@end」の行は「ch02.re」内に残っていますが、「review-compile」コマンドで変換時、EPUBやXMLなどの最終生成物には残りません。
 一連の手順を図にするとこんな感じになります。
f:id:seuzo:20120309233811p:image
 「#@mapfile(pathname)」で展開されるテキスト中にあるタブ文字は、すべてスペースに変換されますから注意してください。もしタブ文字のままであったら、表組みのTSVなども差し込みできるのになあ... と思います。

外部ファイルの一部だけを利用する

 外部ファイルの一定の範囲だけを選択的に差し込むためには

#@maprange(filepath, rangename)
#@end

を使うらしいのですが、ちょっとよくわかっていません。MLでそれらしい議論もあるのですが...
外部ファイルを読み込む記法 - qwik.jp/review
 詳細が分かり次第、追記したいと思います。

コマンドの実行結果を取り込む

 「#@mapoutput(コマンド) 〜 #@end」を使えば、コマンドの実行結果を取り込むことができます。
 たとえば、今年の年号を表記する時などはこのように書くことができます。

#@mapoutput(date +"%Y")
#@end

f:id:seuzo:20120311220524p:image
 review-preprocコマンド後には展開されてこうなります。
f:id:seuzo:20120311220810p:image
 review-compileでHTMLを生成するとこうなります。
f:id:seuzo:20120311221012p:image

 コマンドで展開できるのは、既存のアプリケーションだけではありません。テキストを返すものならば、自作のスクリプトでもよいのです。たとえば、昨日こちらのアップした「特定のTweet引用時の正書法」をつかってみましょう。

#@mapoutput(ruby19 cite_a_tweet.rb "https://twitter.com/#!/never4get_jp/status/178718486745452544")
#@end

f:id:seuzo:20120311222418p:image
 review-preprocコマンド後には展開されてこうなります。
f:id:seuzo:20120311222850p:image
 review-compileでHTMLを生成するとこうなります。
f:id:seuzo:20120311223217p:image

2012-03-08

ReVIEWの自動採番やプレフィックス、番号参照を制御する

 以下の記事はReVIEW ML(要アカウント)でKADOさんにお教えいただいたことを、自分なりにメモしたものです。


 例えば、このようなReVIEWマーキングしたテキストを用意したとします。
f:id:seuzo:20120306165636p:plain
 これをまあ、スタイルシート以外のオプションをつけないで、review-compileしてHTML変換します。

$ review-compile --target html --stylesheet=main.css ch01.re > ch01.html

 HTMLだと変換後にすぐに確認できます*1
f:id:seuzo:20120307131111p:plain
 ReVIEWは当初、技術書を書くために設計されたので、下記の自動採番や番号参照などがデフォルトになっています。

  • 見出しのプレフィックスと採番
  • (図|表|リスト)のプレフィックスと採番
  • (図|表|リスト)の番号参照

見出しのプレフィックスを変更する

 章見出し(h1)のプレフィックスがデフォルトで「第n章 」になっています。これを「chapter n 」変更してみましょう。
 ReVIEWドキュメントと同じ階層に「locale.yaml」という名前のテキストファイルを用意します。このテキスト内容を下記の通りにしてみてください。

locale: ja
chapter: "chapter %d"
chapter_postfix: " "

f:id:seuzo:20120307135609p:plain
 このファイルを設置し終えたら、先ほどと同じコマンドでHTMLを生成してみます。
f:id:seuzo:20120307135728p:plain
 「第1章 」が「chapter 1 」になっていますね。.yaml上の「locale: ja」は日本語環境であるロケールを、「chapter: 」がh1要素のプレフィックス文字列を、「%d」が章番号の自動採番を、「chapter_postfix: 」がchapterプレフィックスと見出しとの間の文字列をそれぞれ表しています。
 YAMLのキーと値の初期値は「lib/review/i18n.yaml」にあります。GitHubでいうとこちら

 現在、定義されているキーの簡単な意味はこんな感じです。

キー 初期値 意味
image 図版(とその参照)の最初に置かれるプレフィックス
table 表(とその参照)の最初に置かれるプレフィックス
list リスト コードリスト(とその参照)の最初に置かれるプレフィックス
chapter 第%d章 章見出しのプレフィックス
chapter_postfix " " 章見出しのプレフィックスと見出しとの間にはさむ文字列"
numberless_image "図:" 自動採番をつけない「indepimage」マーキングを使った時の、図キャプションプレフィックス
format_number "%s.%d" 番号参照のフォーマット
format_number_header "%s.%d:" キャプションプレフィックスのフォーマット
format_number_without_chapter "%d" --level=0で章番号の自動採番をしなかった時、番号参照で使われるフォーマット
format_number_header_without_chapter "%d:" --level=0で章番号の自動採番をしなかった時、キャプションプレフィックスのフォーマット
caption_prefix " " キャプションプレフィックスとキャプションの間にはさむ文字列
caption_prefix_idgxml " " キャプションプレフィックスとキャプションの間にはさむ文字列(idgxmlを選んだ時)
ruby_prefix "(" rubyタグに非対応のデバイスでルビを開くとき、ルビ開始文字を表す文字列(rpタグに入る文字列)
ruby_postfix ")" rubyタグに非対応のデバイスでルビを開くとき、ルビ終了文字を表す文字列(rpタグに入る文字列)

見出しやキャプションのプレフィックスを抑制する

 技術書以外では見出しやキャプションのプレフィックスが不要な場合も多くあります。上の表を参考に、見出しやキャプションのプレフィックスをすべて生成しないようにしてみましょう。「locale.yaml」をこのように変更してみます。

locale: ja
image: ""
table: ""
list: ""
chapter: ""
chapter_postfix: ""
numberless_image: ""
format_number: ""
format_number_header: ""
format_number_without_chapter: ""
format_number_header_without_chapter: ""
caption_prefix: ""
caption_prefix_idgxml: ""

ruby_prefixとruby_postfix以外をすべて空文字列にしてみました。この時、生成したHTMLはこうなります。
f:id:seuzo:20120308001326p:plain
 自動採番をすべて空文字列にしているので、本文中の番号参照も空になるのを注意してください。
 ここで節見出しに「1.1 」という自動採番が残ってしまっているのにお気づきでしょうか。この部分を制御するには、review-compileコマンドに見出しレベルを追加するオプション「--level」が必要です。「--level=3」とすれば項見出しまでの自動採番を追加し、「--level=2」であれば節見出しまで、「--level=1」ならば章見出しのみ、「--level=0」では見出しの自動採番は追加されなくなります。つまり、この場合は「--level=1」以下を指定すればよいことになります。

$ review-compile --target html --level=0 --stylesheet=main.css ch01.re > ch01.html

f:id:seuzo:20120308003042p:plain

見出しの自動採番は追加しないが、図の参照番号やキャプションのプレフィックスは必要な場合

 先ほどのようにすべてを削除するのではなくて、図の参照番号やキャプションのプレフィックスは使いたいという場合もあります。この場合ですと、「--level=0」だけで目的は果たせそうです。「locale.yaml」ファイルを削除(またはリネーム)してください。生成したHTMLはこのようになるはずです。
f:id:seuzo:20120308005053p:plain

*1:xmlにしてInDesign流しても同じです

2012-02-21

miエディタ用のReVIEWモード作ってみた

ReVIEWのマーキングのために、テキストエディタmiで使えるReVIEWモードを作ってみました。説明書書くのはめんどいので、動画をご覧ください。


「.re」拡張子を持つテキストはドラッグ&ドロップでいきなりReVIEWモードで開きます。ツールメニューから、ReVIEWフォーマット一覧を呼び出したり、さまざまなマーキングした箇所がカラーリングで一目で確認できます。見出し関係へは右ウィンドウからジャンプできます。

コメントはトグルします。図版の挿入はファイル選択ダイアログから選び、現在開いているReVIEWドキュメントのフルパス名とマッチングして正しく挿入されます。*1

インライン要素は、選択している箇所に被せるようにしました。ルビやUnicode入力は入力ダイアログが開きます。マーキングが終了したら、htmlを生成して確認してください。


ダウンロードはこちらから:

このファイルをダウンロードしたら、伸長して
~/Library/Application\ Support/mi/mode/ ディレクトリへ保存してください。
おかしなところを見つけた方はお知らせいただければ幸いです。

2012-02-19

ReVIEWドキュメント中に使われている要素をカウントする

ReVIEWドキュメントの中にどんな要素が、どれくらい含まれているのか数えます。

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

#カウント用ハッシュの初期値0
my_count = Hash.new(0)

while line = ARGF.gets
  #多くのブロック要素
  if line =~ /^(\/\/.+?)[\[\{]/ then
  my_count[$1] += 1
  
  #見出し
  elsif line =~ /^(={1,5}) / then
    tmp_key = $1 + "h" + $1.length.to_s
    my_count[tmp_key] += 1
  
  #コラム
  elsif line =~ /^(===[column])/ then
    my_count[$1] += 1
  
  #箇条書き
  elsif line =~ /^ (\*+) / then
    tmp_key = $1 + " ul(" + $1.length.to_s + ")"
    my_count[tmp_key] += 1
  
  #箇条番号
  elsif line =~ /^[1-9][0-9]?\. / then
    my_count["ol"] += 1
  
  #用語リスト
  elsif line =~ /^: / then
    my_count[": dl"] += 1
  
  #コメントは出力する
  elsif line =~ /^(\#@\# |\#@warn).+/ then
    puts "comment(#{ARGF.filename}:#{ARGF.file.lineno}) : #{$&}"
  
  end
  
  #インライン要素
  line.scan(/@<.+?>/).each {|elem|
    my_count[elem] += 1
  }
end


#項目名でソートして出力
my_count.sort.each{|key,val|
  puts "#{key} : #{val}"
}

こんなかんじで出力されるはず。

comment(hoge.re:123) : #@# ------------------------------------------
* ul(1) : 16
//emlist : 76
//indepimage : 211
//table : 43
====h4 : 13
===h3 : 24
==h2 : 35
=h1 : 9
@<b> : 344
@<code> : 7
@<icon> : 2
@<kw> : 154
2012-02-10

CUI初心者のためのReVIEWインストール

 page2012のReVIEWセミナーに行ってきました。すでにスライドも公開されています。

 このセミナーをご覧になって、ReVIEWに興味を持たれた方も多いかもしれません。よし、お父さんインストールしちゃうぞ! と思っている方もいらっしゃるでしょう。
 実は、このセミナー終了後にバックヤードでインストール大会やりました。そして、CUI初心者にとっては、ターミナルでインストールするのは案外敷居が高いことに気がつかされました。自転車が乗れる人にとって、乗れなかった頃の難しさが実感できなくなっているなあ、と反省しました。
 ってことで、きょうは初めてCUIでインストールする人にも、できるだけわかりやすく解説したいと思います。
 環境としてはMac OS X 10.5〜10.7を念頭に置いています*1。また、インターネットに繋がっている環境で行ってください。

おおまかな流れ

 ReVIEWクイックスタートガイドにはいくつかのインストール方法が紹介されていますが、今回はSubversionを使った方法です。Subversionというのはソースコードなどの履歴管理システムです。(ユーザーとしてSubversionを使う利点は)アップデートがあった時、コマンドひとつでコード全体が最新のバージョンになります。
 Subversionを使えるようにXcode(開発環境)をインストールします。それを終えたらいよいよReVIEWをインストールし、さらにReVIEWがすぐに使えるように.bash_profileを書き換えます。ここまでが今日のゴールになります。
 CUIでの操作に慣れておくことは、将来の自分に対する投資です。あなたが職業的な開発者でなくてもXcodeを入れる利益は計り知れないほど大きなものです。

手順1)Subversionが使えるかどうかを確かめる

 さあ、おもむろに開くのだ、ターミナルを! ターミナルは「アプリケーション」フォルダの中の「ユーティリティ」フォルダの中にあります。
f:id:seuzo:20120209113247p:plain
 ダブルクリックで起動すると、こんな感じのウィンドウが開くはずです。
f:id:seuzo:20120209150408p:plain
たまにこのウィンドウが黒い画面の人とか見た目がずいぶん違う人がいると思いますが、それは個性というものなのであまり気にしないでください。打ち込んでいく内容には変わりありません。
Subversionが使えるかどうかを確かめるには、この画面上に入ってこのコマンドを入力しましょう。

which svn

このコマンドを入力して、リターンキーを押した時、

  • /usr/bin/svn とだけ出た人:すでにSubversionがインストール済みです。手順2をスキップして、手順3へ進んでください。

f:id:seuzo:20120209150914p:plain

  • no svn /bin /sbin /usr/bin /usr/sbin などと出た人:Subversionがインストールされていません。手順2へ進んでください。

f:id:seuzo:20120209151120p:plain

手順2)Xcodeをインストールする

 Subversionをインストールする方法も種々あろうかと思いますが、Mac OS X環境でもっとも手軽な方法はXcodeをインストールすることです。XcodeをインストールするとSubversionはもとより様々なコマンドが使えるようになります。

Mac OS X 10.7.x(Lion)を使っている人は:

 App Storeを起動させて、右上の検索窓に「Xcode」と入力し、Xcodeのページを開いたら、そのまま「インストール」ボタンをクリックします。
f:id:seuzo:20120209160043p:plain
 ダウンロードとインストールが自動に行われます。

Mac OS X 10.5.x〜10.6.xを使っている人は:

 OSのインストールディスクを挿入して、DVDの中の「オプションインストール」フォルダの中にXcodeのためのインストーラーを探してください。Mac OS X 10.4.xとかの人はディスクが別になっているかもしれません*2。下記のキャプチャはMac OS X 10.6 Leopardのものです。
f:id:seuzo:20120209162229p:plain

手順3)ReVIEWをインストールする

 手順1からここに来た人は、いままさにターミナルが開いているはずです。手順2から来た人はターミナルを再度立ち上げましょう。
 ターミナル上では、自分がいまどこのディレクトリにいるかを意識する必要があります。これをカレントディレクトリといいます。上の画面だと入力行の最初「xxxx:~ username $」の「~」部分がカレントディレクトリを表しています。「~」は特殊な記号でログインしているユーザーのホームディレクトリを表しています。念のため、カレントディレクトリをホームディレクトリに移動しておきましょう。

cd ~/

 このコマンドをタイプすれば、いつでもホームディレクトリに帰ってこられます。
 いろいろご意見があるかもしれませんが、ReVIEWはホームディレクトリのbinディレクトリにインストールすることにします。ホームディレクトリに「bin」というディレクトリはありますか? もしなければ作ってください。Finder上からホームディレクトリに「新規フォルダ」で作って名前を「bin」に変えてもかまいませんが、せっかくターミナルを立ち上げているんですから、ターミナルからbinディレクトリを作ってみましょう。既にbinディレクトリがある人は、この作業はしなくていいです。

mkdir bin

 ホームディレクトリにbinフォルダができました。Finderでも確認できますし、ターミナルから「ls -al」とタイプして確認することもできます。ホームディレクトリの内容は必ずしもこの通りではないと思いますが、binというディレクトリがあるのがわかります。

$ ls -al
total 232
drwxr-xr-x+  56 username  staff   1904  2  6 12:02 .
drwxr-xr-x    5 root  admin    170  8  3  2011 ..
-rw-------    1 username  staff  20726  2  7 15:35 .bash_history
-rw-r--r--@   1 username  staff    489  2  1 21:11 .bash_profile
drwxr-xr-x    2 username  staff     68  7 14  2010 Applications
drwx------+  31 username  staff   1054  2  9 16:43 Desktop
drwx------@  21 username  staff    714  1  5 20:14 Documents
drwx------+  14 username  staff    476  2  9 14:55 Downloads
drwx------+  61 username  staff   2074 10 13 15:36 Library
drwx------+   5 username  staff    170  8  3  2011 Movies
drwx------+   5 username  staff    170 11 23  2007 Music
drwx------+   9 username  staff    306  3 18  2011 Pictures
drwxr-xr-x+   6 username  staff    204  8  3  2011 Public
drwxr-xr-x   20 username  staff    680 11  4  2010 bin

 binディレクトリができているのを確認したら、カレントディレクトリをbinに移動します。元々binディレクトリが存在した人もここからは一緒にタイプしてください。

cd bin

 これでカレントディレクトリは~/bin になっているはずです。いよいよReVIEWのインストールをしましょう。下記のようにタイプしてください。

svn co https://kmuto.jp/svn/review/trunk review

 リターンキーを押すと、下記のようなメッセージが出るかもしれません。というか、出ます。

Error validating server certificate for 'https://kmuto.jp:443':
 - The certificate is not issued by a trusted authority. Use the
   fingerprint to validate the certificate manually!
 - The certificate hostname does not match.
Certificate information:
 - Hostname: svn.kmuto.jp
 - Valid: from Sun, 14 Nov 2010 03:01:25 GMT until Tue, 13 Nov 2012 03:01:25 GMT
 - Issuer: http://www.cacert.org, Root CA
 - Fingerprint: 13:8d:1e:cd:95:49:a6:f3:95:cc:d7:e3:29:27:6b:74:05:70:71:b0
(R)eject, accept (t)emporarily or accept (p)ermanently? 

 これはSSLサーバ証明書を信頼するかどうかという確認です。「p」(永続的に信頼)をタイプしてリターンキーを押してください。もしかすると、下記のような1行で終わってしまうかもしれません。

svn: OPTIONS of 'https://kmuto.jp/svn/review/trunk': Could not read status line: connection was closed by server (https://kmuto.jp)

 これも書いてあるとおりですが、「あなたの返事をまちくたびれて扉を閉めました」と言われています。気にせずに「svn co https://kmuto.jp/svn/review/trunk review」を再度タイプして、「p」をタイプしてください。
 インストールが始まると、経過ログがずらずらと画面上に表示されます。

A    review/test
A    review/test/test_helper.rb
A    review/test/test_i18n.rb
A    review/test/test.re
... (長いので中略)
A    review/bin/review-preproc
A    review/bin/review-epubmaker
A    review/bin/review-check
A    review/bin/review-epubmaker-ng
Checked out revision 169.

 最後の行はリビジョン「169」を表示して、入力プロンプトが帰ってきました。ここでもしエラーになるようなことがあれば、もう一度「svn co https://kmuto.jp/svn/review/trunk review」からやりなおしてください。
 これでインストールそのものは終わりました。ReVIEWの実行ファイル、ドキュメント類すべては「~/bin/review」ディレクトリの中に入っています。もし、アンインストールしたいなら、ディレクトリごと消去してしまってかまいません。

手順4)パスを通す

 CUIアプリケーションを導入した後に、「パスを通しておいてください」などと書かれていることがあります。これは、特定の専用ディレクトリ(/bin とか/local/bin とか)以外の場所にアプリケーションを置いた場合、シェルからすぐに実行できるようにパスを設定しておいてね、という意味です。具体的には、ターミナルがデフォルトで使うbash*3 というシェルの設定ファイルを書き換える作業を指します。設定ファイル「.bash_profile」はデフォルトでは作られていません。ファイル名の最初の文字が「.」(ドット)で始まるファイルをドットファイルといい、通常のFInderでは不過視ファイルになっています。

4-1 実行ファイルのパスを確認

 最初に用意するのは、 ReVIEWの実行ファイルディレクトリの正確なフルパス名です。 ReVIEWのあるディレクトリに移動してみましょう。

cd ~/bin/review/bin

 ちゃんと移動できているかどうか、ファイルを一覧させてみます。

$ ls -al
total 152
drwxr-xr-x  12 username  staff    408  2  1 21:07 .
drwxr-xr-x  15 username  staff    510  2  1 21:07 ..
-rwxr-xr-x   1 username  staff   4629  2  1 21:07 review-check
-rwxr-xr-x   1 username  staff   1299  2  1 21:07 review-checkdep
-rwxr-xr-x   1 username  staff   5626  2  1 21:07 review-compile
-rwxr-xr-x   1 username  staff  17255  2  1 21:07 review-epubmaker
-rwxr-xr-x   1 username  staff   5546  2  1 21:07 review-epubmaker-ng
-rwxr-xr-x   1 username  staff   2973  2  1 21:07 review-index
-rwxr-xr-x   1 username  staff  10068  2  1 21:07 review-pdfmaker
-rwxr-xr-x   1 username  staff   3303  2  1 21:07 review-preproc
-rwxr-xr-x   1 username  staff   1682  2  1 21:07 review-validate
-rwxr-xr-x   1 username  staff   2907  2  1 21:07 review-vol

 ここで、カレントディレクトリのフルパスを得る「pwd」コマンドを使います。

$ pwd
/Users/username/bin/review/bin

ここでは、「/Users/username/bin/review/bin」と出てきました。このフルパス名をコピーしておいてください。

4-2 .bash_profileを編集する

 .bash_profileファイルが存在するかどうか確認するには、ホームディレクトリ上で、先ほど使用した「ls -al」で確認してください。
 .bash_profileファイルはデフォルトでは存在しませんが、もしかしたら何かのセットアップスクリプトが作成してしまっているかもしれません。あるいは、システム管理者が必要上設置している場合があります。もし後者ならば、ここからの作業は管理者に任せたほうがよいかもしれません*4。もちろん、他のプロジェクトで.bash_profileの編集したことがある人は、(下記の方法ではなく)やりやすいやり方でやっていただいてかまいません。
 .bash_profileファイルが存在しない人は、ホームディレクトリに移動して、下記のコマンドを打ち込んでください。「/Users/username/bin/review/bin」の部分は、4-1でコピーしておいてフルパス名と差し替えるのを忘れずに。

echo "export PATH=$PATH:/Users/username/bin/review/bin" >> ~/.bash_profile

 .bash_profileファイルがきちんと書き込まれたかどうか、次のコマンドで確認してみましょう。

$ cat ~/.bash_profile 
export PATH=$PATH:/Users/username/bin/review/bin

 先ほどのもし、「cat: /Users/username/.bash_profil: No such file or directory」などと出てきてしまったら、4-1からやり直してください。

4-3 .bash_profileの変更を有効にする

 .bash_profileは編集したらすぐに有効になるわけではありません。次のコマンドをタイプして、.bash_profileの設定を有効にします。

source ~/.bash_profile

これでパスが通りました。

手順5)インストールが成功したかどうか確認する

 すべての手順がうまくできたかどうか確認します。ReVIEWの実行ファイルのあるディレクトリ(/Users/username/bin/review/bin)にいると、自動的にパスが通ってしまいテストになりませんので、ホームディレクトリかどこか任意のディレクトリに移動してから、下記のコマンドをタイプしてください。

review-compile --help

 下記のようにヘルプが出て来たら、すべてが成功しています。おつかれさまでした。

$ review-compile --help
Usage: review-compile [--target=FMT]
        --yaml=YAML                  Read configurations from YAML file.
        --inencoding=ENCODING        Set input encoding. (UTF-8, EUC, JIS, and SJIS)
        --outencoding=ENCODING       Set output encoding. (UTF-8[default], EUC, JIS, and SJIS)
    -c, --check                      Check manuscript
        --level=LVL                  Section level to append number.
        --nolfinxml                  Do not insert LF in XML. (idgxml)
        --table=WIDTH                Default table width. (idgxml)
        --listinfo                   Append listinfo tag to lists to indicate begin/end. (idgxml)
        --chapref="before,middle,after"
                                     Chapref decoration.
        --subdirmode                 Use chapter/id.ext path style to find images.
        --singledirmode              Use id.ext path style to find images.
        --chapterlink                make chapref hyperlink
        --stylesheet=file            Stylesheet file for HTML (comma separated)
        --mathml                     Use MathML for TeX equation in HTML
        --htmlversion=VERSION        HTML version.
        --hdnumberingmode            Output numbering headlines. (deprecated)
        --deprecated-blocklines      Disable paragrahs in block tags. Treat physical line as a paragraph. (deprecated)
        --target=FMT                 Target format.
        --footnotetext               Use footnotetext and footnotemark instead of footnote (latex)
        --draft                      use draft mode(inline comment)
    -a, --all                        Compile all chapters.
        --directory=DIR              Compile all chapters in DIR.
        --help                       Prints this message and quit.

(追記:2012-02-14T10:03:56+0900)@monokano さんから「 export $PATH 」で確認した方が確実なのでは? とご指摘いただきました。おっしゃる通りです!

これからどうするか...

 ReVIEWについて、いくつかのサンプルドキュメントを変換してみたり、実際に自分でReVIEWドキュメントを書いたりして試してみてください。

 ReVIEWフォーマット一覧をブックマークして、すぐに参照できるようにしましょう。

 ReVIEWメーリングリストに入ると、いろいろな情報を入手できます。

 ReVIEWは現在も更新されつづけています。バグフィックスや、新しい機能を取り込んでいます。自分のReVIEW実行ファイルを新しいものに置き換えたいと思ったら、~/bin/rebiewディレクトリに移動して、下記のコマンドをタイプしてください。最新版がすぐに使えるようになります。

svn up

 さて、今回のインストールいかがでしたでしょうか? パワーユーザーにとっては当たり前のことでも、初めてターミナルを触る人にとっては意外と大変だったかもしれません。しかし、CUIはその労力の何十倍もの仕事をしてくれるすばらしい操作方法です。今日はほんのちょっとしたコマンドしか紹介できませんでした。また、その意味も軽く触れるにとどめてあります。もし、興味を持った人は、いろいろ調べてみてください。ネット上にもいくつか有用な情報がありますが、手軽なリファレンス本が手元にあるといいでしょう。

2012-01-25

ReVIEWの生成したXMLをInDesignに取り込む時のXSL例

 そもそもReVIEWのXMLInDesignに取り込むことをひとつの前提にしていますが、そのままだとちょっと取り扱いにくい場面があるかもしれません。例えば見出し(title要素)やリード(p要素)は属性で階層化されていますし、図・表・リストでキャプションの順序やスタイルを少し変えたい時などもあります。おそらく、一旦流し終えた後にスタイル判定のためにスクリプト処理しなければならないでしょう。
 まあ、だったら要素分けの部分とかはXSLT使うといいんじゃないか、と。

 おうち使いなので、抜けてるブロック要素もあるかもしれません。あと「InDesign読み込みオプション」ダイアログでXSLTを有効にすると、いろいろエラーが出たりします(なのでxsltprocで変換しています)。全体的にもっといい書き方があったら教えてください^^

<?xml version="1.0" encoding="UTF-8"?>
<!-- ReVIEWのためのXSL例
2012-01-25	とりあえず
2012-03-02	修正
 -->


<xsl:transform
	version="1.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/"
	exclude-result-prefixes="aid"
>
	<xsl:output method="xml" media-type="text/xml"/>

	<!-- 改行のための変数 -->
	<xsl:variable name="myReturn">
		<xsl:text>
</xsl:text>
	</xsl:variable>


	<!-- ルート -->
	<xsl:template match="/">
		<xsl:element name="aid:doc">
			<xsl:apply-templates />
		</xsl:element>
	</xsl:template>

	<xsl:template match="doc">
		<xsl:apply-templates />
	</xsl:template>




	<!-- title見出しまわり。pstyleをそのまま要素名にする -->
	<xsl:template match="title">
		<xsl:for-each select=".">
		<xsl:element name="{@aid:pstyle}">
			<xsl:copy-of select="node()" />
		</xsl:element>
		</xsl:for-each>
	</xsl:template>


	<!-- lead内段落 -->
	<xsl:template match="lead">
		<xsl:for-each select="p">
			<xsl:element name="lead">
				<xsl:copy-of select="node()" />
			</xsl:element>
		<xsl:value-of select="$myReturn" />
		</xsl:for-each>
	</xsl:template>

	<!-- column -->
	<xsl:template match="column">
		<xsl:element name="column">
			<xsl:element name="column-title">
				<xsl:copy-of select="title/node()" />
			</xsl:element>
			<xsl:value-of select="$myReturn" />
			<xsl:for-each select="p">
				<xsl:element name="column-p">
					<xsl:copy-of select="node()" />
				</xsl:element>
			<xsl:value-of select="$myReturn" />
			</xsl:for-each>
		</xsl:element>
	</xsl:template>


	<!-- codelist(通常のlist) -->
	<xsl:template match="codelist">
		<xsl:element name="codelist-caption">
			<xsl:copy-of select="caption/node()" />
		</xsl:element>
		<xsl:value-of select="$myReturn" />
		<xsl:element name="codelist-pre">
			<xsl:copy-of select="pre/node()" />
		</xsl:element>
	</xsl:template>


	<!-- codelist (参照なしのemlist)-->
	<xsl:template match="list[@type='emlist']">
		<xsl:element name="codelist-caption">
			<xsl:copy-of select="caption/node()" />
		</xsl:element>
		<xsl:value-of select="$myReturn" />
		<xsl:element name="codelist-pre">
			<xsl:copy-of select="pre/node()" />
		</xsl:element>
	</xsl:template>


	<!-- 箇条リスト -->
	<xsl:template match="ul">
	<xsl:variable name="myCount_li" select="count(li)" /><!-- li要素の数を変数に -->
		<xsl:for-each select="li">
			<xsl:element name="list">
				<xsl:attribute name="current_no"><xsl:value-of select="position()" /></xsl:attribute>
				<xsl:attribute name="total_no"><xsl:value-of select="$myCount_li" /></xsl:attribute>
				<xsl:copy-of select="node()" />
			</xsl:element>
			<xsl:value-of select="$myReturn" />
		</xsl:for-each>
	</xsl:template>


	<!-- 画像とキャプション -->
	<xsl:template match="img">
		<xsl:copy-of select="Image" />
		<xsl:value-of select="$myReturn" />
		<xsl:if test="caption">
			<xsl:element name="img-caption">
				<xsl:copy-of select="caption/node()" />
			</xsl:element>
		</xsl:if>
	</xsl:template>




	<!-- 表組み(そのまま) -->
	<xsl:template match="table">
			<xsl:copy-of select="." />
	</xsl:template>


	<!-- 本文(そのまま) -->
	<xsl:template match="p">
			<xsl:copy-of select="." />
	</xsl:template>
	


</xsl:transform>

page2012の無料セミナーでReVIEWのデモを見られます

2012年2月8日の14:10〜15:05、page2012の無料セミナーゾーンで、ReVIEW開発者の武藤健志さんによるReVIEWデモを見られます。
http://study-room.info/id/page2012/#muto