【書籍制作ワークフロー】ReVIEW 入門 #07 – ReVIEW 記法 (その他)

2013.12.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

前回前々回と、ReVIEWの基本的な記法を学びました。今回はやや特殊な、しかし覚えておくといざというときに使える記法について学ぶとします。

ReVIEW 記法 - 生データ行

ReVIEW は予め定められた記法で書くことで対象となる HTML 要素に変換されるわけですが、この ReVIEW の範囲を超えた特別な要素を組みたい場合があります。その際は以下のように記述することで実現ができます。

ReVIEW
//raw[|html|<div class="wrapper">\n<div class="contents">\n<p class="comment">特別なコンテンツです。特別なコンテンツです。</p>\n</div>\n</div>]
HTML
<div class="wrapper">
<div class="contents">
<p class="comment">特別なコンテンツです。特別なコンテンツです。</p>
</div>
</div>

|html|と記述している箇所は、ビルダ名を指定する箇所です。上の例ではhtmlと指定していますが、他にもlatexidgxmltopを指定することが出来ます。またこれらはカンマ区切りで複数指定することも可能です。指定したビルダ名とそのコンテンツが適合しない場合は、何も出力されません。

その他の(拡張)文法 - ブロック型ReVIEW文法を追加

既存の ReVIEW 文法だけでは物足りない場合は、自分で拡張文法を定義することが出来ます。

拡張文法はプロジェクトディレクトリ直下にreciew-ext.rbというファイルを作成して、そこに定義します。簡単な例で試してみましょう。

review-ext.eb
ReVIEW::Compiler.defblock :foo, 0..1

class ReVIEW::HTMLBuilder
  def foo(lines, caption = nil)
    puts lines.join(",")
  end
end

ここではfooという拡張文法を定義しました。以下の様な文法として使うことが出来ます。

ReVIEW
//foo{
foo
bar
baz
//}
HTML
foo,bar,baz

ReVIEW 記法 - コメント

コメントアウトは以下のように記述します。一行コメントのみでブロックコメントは無い模様です

#@# コメント行です

HTMLのレイアウト機能

CHAPSファイルと同じディレクトリにlayouts/layout.erbを置くと、ReVIEW ファイルを ePUB (HTML) で出力する際にそのレイアウトファイルが使われます *1

ERB
<!DOCTYPE html>
<html class="no-js">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title><%= title %></title>
        <meta name="description" content="">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <link rel="stylesheet" href="../main.css">
    </head>
    <body>
       <div class="container">
           <%= body %>
       </div>
    </body>
</html>

ReVIEW は通常 XHTML で出力しますが、例えば上記のようなレイアウトを用意することで HTML5 で出力させることが可能です。各ページのコンテンツは15行目のbody変数部分に出力されますが、このようにdiv要素が囲ったりすることでスタイルを加える事も出来るというわけです。

コンパイルの際、定義したレイアウトを使用するかの判断は、コマンドの引数ではなくレイアウトファイルが存在するか否かで行われるようです。つまりレイアウトを用意してなお使用したくないという場合は、一時的にファイルを退避するなどの措置が必要になります。

参考文献の定義

参考文献を本文の段落から参照することができます。まず参考文献は同一ディレクトリのbib.reというファイルに以下のように定義します。

ReVIEW
//bibpaper[lins][Lins, 1991]{
Refael D. Lins. A shared memory architecture for parallel study of
algorithums for cyclic reference_counting. Technical Report 92,
Computing Laboratory, The University of Kent at Canterbury , August
1991
//}

そして上記の参考文献を本文から以下のように参照します。

…という研究が知られています(@<bib>{lins})
HTML
<div class="bibpaper">
  <a id="bib-lins">[1]</a> Lins, 1991
  <p>Refael D. Lins. A shared memory architecture for parallel study ofalgorithums for cyclic reference_counting. Technical Report 92,Computing Laboratory, The University of Kent at Canterbury , August1991</p>
</div>
<p>…という研究が知られています(<a href="./bib.html#bib-lins">[1]</a>)</p>

国際化 (i18n) について

ReVIEW は日本人プログラマによって開発・保守されていることから、『第○章』、『リスト』、『図』、『表』といったReVIEW自体が出力する文言は、日本語がデフォルトに設定されています。英語の書籍を作成したい場合は、この設定を上書きする必要があります。

CHAPSファイルと同じディレクトリにlocale.yamlというファイルを新規に作成し、以下のように記述することで設定を上書きすることが出来ます。

locale.yaml
locale: en

こうすることで第○章は『Chapter ○.』、リストは『List』、図は『Figure』として出力されます。これら文言の定義はvendor/bundle/ruby/2.0.0/gems/review-1.1.0/lib/review/i18n.yamlというファイルで成されています。従ってスペイン語やドイツ語といった他の言語にする場合は、ここに定義を記述することで実現できます。

i18n.yaml
ja:
  image: 図
  table: 表
  list: リスト
  part: 第%d部
  chapter: 第%d章
  chapter_postfix: " "
  appendix: 付録%d
  numberless_image: "図:"
  format_number: "%s.%d"
  format_number_header: "%s.%d:"
  format_number_without_chapter: "%d"
  format_number_header_without_chapter: "%d:"
  caption_prefix: " "
  caption_prefix_idgxml: " "
  ruby_prefix: "("
  ruby_postfix: ")"

en:
  image: "Figure "
  table: "Table "
  list: "List "
  chapter: Chapter %d
  chapter_postfix: ". "
  appendix: Appendix %s
  numberless_image: "Figure:"
  format_number: "%s.%d"
  format_number_header: "%s.%d:"
  format_number_without_chapter: "%d"
  format_number_header_without_chapter: "%d:"
  caption_prefix: " "
  caption_prefix_idgxml: " "
  ruby_prefix: "("
  ruby_postfix: ")"

脚注

  1. Haml で記述することは出来ないようです。