トップ «前の日記(2018年08月31日) 最新 次の日記(2018年09月04日)» 編集

KeN's GNU/Linux Diary


2018年09月03日

_ [cooking] 塩豚ステーキとダールスープ

_ [reviewml] Re:VIEW 3.0.0preview2リリース

Re:VIEW 3.0.0preview2 を本日9月3日にリリースしました。

前回のpreview1のときと同様に、preview2 の新機能や注意点について解説してみます。

インストールについては、名前のとおり正式リリースではなく preview 版のため「gem install review --pre」を使います。

CSS 組版向けに EPUB ファイルを単一 HTML ファイルに変換する review-epub2html コマンドを追加しました

Vivliostyle.js などを使った CSS 組版をやりたいという方が増えてきましたが、Vivliostyle.js は単一ファイルから構築する仕組みのため、これまでは Re:VIEW の各章でバラバラになった HTML ファイルをひとまとめにするために手間をかける必要がありました。

新たに加わった review-epub2html を使うと、review-epubmaker で作成した EPUB ファイルを変換し、EPUB で定義されている順序で単一の HTML ファイルとして吐き出すことができます(review-epub2html EPUBファイル > HTMLファイル)。images フォルダなどは展開しないので、普通にプロジェクトフォルダに置いて同じものを使うようにすればよいでしょう。

Re:VIEW の HTML の ID 振りは章単位で固有としており、そのままだと単一化したときに競合の可能性があるので、章情報も使った固有 ID に変えるようにしています。

PDFMaker: texcommand、dvicommmand、makeindex_command に空白文字入りのパスを指定できるようにしました。これに伴い、これらのパラメータはコマンドオプションを取ることはできなくなりました。コマンドオプションは本来の texoptions、dvioptions、makeindex_options のパラメータに指定してください

Windows のように空白パスがわりと普通に登場する OS 向けに、system("コマンド 引数1 引数2 …") といった箇所を system("コマンド", "引数1", "引数2", …) という実装に変えています。たとえば

 texcommand: "uplatex --shell-escape"

のように定義していると、preview2 以降では「uplatex --shell-escape」という1つのコマンド名を実行しようとし、当然ながら見つからないのでエラーになります。

 texcommand: "uplatex"
 texoptions: "-interaction=nonstopmode -file-line-error --shell-escape"

のように定義し直す必要があります(「-interaction=nonstopmode -file-line-error」はデフォルトで Re:VIEW で使うようにしているオプションです)。

PDFMaker: book.re というファイルで生じるビルドの失敗を修正しました。これまではベースファイルとして book.tex という名前のファイルを内部で作成していましたが、__REVIEW_BOOK__.tex という名前に変更しました

PDFMaker は実行時に一時フォルダに layout.tex.erb をもとにしたマスター TeX ファイルを作り、これをコンパイルします(各章ファイルはこのマスター TeX ファイルから \input されています)。

これまでは book.tex というファイル名にしていたのですが、「review-init book で book プロジェクトを作ると TeX コンパイルに失敗する」「というか book.re というファイル名だとまずい」ということがわかり、まず衝突しないであろう名前にマスター TeX ファイルを変更することにしました。

当然 __REVIEW_BOOK__.re というファイル名をぶつけられると同じ問題が再発しますが、そんなファイル名をやめればという答えしか浮かびませんし、仕様で押し切りたいと思います。

通常の用途範囲では問題にならないはずですが、固有のフックで book.tex を書き換えていた場合は、__REVIEW_BOOK__.tex に書き換える必要があります。

PDFMaker: jsbook ベーススタイルにおいて、geometry を読み込まないようにしました

jsbook でベースの pt 値を変えると geometry.sty の計算がおかしくなるという報告があり、ひとまず geometry.sty を止めています。副作用として、サイズ指定のロジックもなくなったため、現状では紙の左上に配置される状態になります。

個人的には、jsbook 等におけるベース pt 値変更が実際には「全体を拡縮する」という手段で実現されていること自体に拒否感があり、pt 値変更オプションを使うことを非推奨にしたほうほうがよいのではと考えます(ただ、jsbook で文字まわりの調整をするのはいろいろと大変そうではありますが)。

\calculatePageLayout というセンター合わせ実装が高橋さんから提案されていますが、もう少し良いやり方がないだろうかと考えるところです。ただ、なるべく早く jsbook 系からjlreq 系へ移行するというのは既定方針なので、jsbook にリソースをかけて拘泥するよりはさっさと入れてしまって先を見据えていったほうがよいのかもしれません。プロジェクトフォルダの sty フォルダにコピーされるのでユーザーが好きなように加工はできますし。

PDFMaker: jsbook ベーススタイルにおいて、ページ番号を見開きの左右に振るようにしました

要するに jsbook の twoside オプションを付けるのを texdocumentclass のデフォルト値にしました(デフォルト値全体は ["jsbook", "uplatex,twoside"] となります)。

@<chapref>、@<hd>、@<column> 命令の展開文字列をビルダ間で統一するとともに、locale.yml ファイルで変更できるようにしました。@<chapref> はデフォルトでは 第1章「FOO」 のようになります(chapter_quote、chapter_quote_without_number で変更可)。chapter_quote メッセージは2つの %s を取るようになりました。@<hd> は 「2.1 BAR」 のようになります(hd_quote、hd_quote_without_number で変更可)。@<column> は コラム「BAZ」 のようになります(column で変更可)

えらく長いですが、hd、column の展開文字列がビルダごとに微妙にバラバラなのと、chaprefの結果が常に "第n章「見出し」" となって "「第n章 見出し」" とできず、いちいち review-ext.rb やフィルタで対処するのにうんざりしてきたので、breaking change となりますがこの機会に整理することにしました。

デフォルト状態を locale.yml で表すとこんな感じになっています。

 locale: ja
 column: "コラム「%s」"
 chapter_quote: "%s「%s」"
 chapter_quote_without_number: "「%s」"
 hd_quote: "「%s %s」"
 hd_quote_without_number: "「%s」"

chapref を "「第n章 見出し」" にするなら、次のようにすればよいわけです。

 locale: ja
 chapter_quote: "「%s %s」"

EPUBMaker: OPF ファイルの modified の時刻の表記を正しい UTC 値にしました

日本のサマータイム導入可否で盛り上がっていたときに Re:VIEW はどうだっけ、と探していたら見つけたバグです。時刻表記の Z って時差 Zero = UTC という意味なのに、Time.now のローカル時刻を入れてしまっていました(akr さんの調査によるとわりとよくあるミスらしい)。タイムゾーンを見て時差情報を入れるのはだいぶダルいので、普通に正しい UTC 時刻を入れるようにしました。

contentdir パラメータでサブフォルダを使用しているときに、参考文献ファイルがそのフォルダから読まれない問題を修正しました

preview1 で入れた contentdir 機能ですが、この手の漏れがまだあるかもしれません。見つけたらご報告ください。

PDFMaker: 索引辞書の読み込みなど、パラメータで指定したファイルのパスが解決されない問題を修正しました

PDFMaker では一時フォルダを作って移動し、そこでコンパイルをかけるのですが、移動によって config.yml で指定したファイルパスが見えなくなってしまう、ということへの対処が抜けていました。正確には抜けていたというか、以前にそうしようとしたら図版のパスが今度はおかしくなる、という問題があったのでした。両方大丈夫なようにパスをちゃんと解決しておくようにして対処しました。

が、このロジックで空白パスがあるとまずそうだなーという箇所がありますね……

preview 1 でのフェンス記法内のエスケープの不具合を修正しました

preview1 では @<m>$$ や @<m>|| 内の \\ の処理を改善したのですが、出力ギリギリまでエスケープのための代替制御文字コードに置換しているロジックにしていました。普通の使い方ならよいけれども review-ext.rb などのカスタムな状態の中で触ろうとすると期待する文字列と違って困ったことになります。

エスケープの用件が終わったらすぐに制御文字から元の文字に戻すようにして、review-ext.rb などでの使い勝手を良くしました。

サンプル CSS 内の不要なタブ文字を除去しました

たまにこういうことがありますね。

PDFMaker: tableとfigureでのフロート設定をマクロ \floatplacement で定義できるようにしました (#1095)

せっかく float パッケージを昔から使っていたので、review-jsbook の review-style.sty に \floatplacement の設定項目を入れるようにして、reviewimage などに明示的に入っていたフロート設定は削除しました。

デフォルトは旧来互換性のために以下にしています。

 \floatplacement{figure}{H}
 \floatplacement{table}{htp}

表も必ずそこに置くというのであれば table の htp を H に、図は必ず紙面上部なら figure の H を t に変えればよいということになります。

なお、互換性保持のため、review_version: 2 の場合は \floatplacement の値によらず表の位置設定は明示的に h(htpに同じ)になってしまいます。

EPUBMaker: エラーと警告の出力に logger 機能を利用するようにしました

普通の利用範囲ではさしたる違いはありません。

PDFMaker: dvicommand パラメータが null の場合は、dvipdfmx などの変換コマンドを呼び出さないようにしました

LuaLaTeX のように直接 PDF を生成できるコンパイラの場合、dvipdfmx を呼び出すのは望む作業ではありません。

 dvicommand: null

とすると、dvi 変換作業をスキップするようになります。単にコメントアウトするのではデフォルトの dvipdfmx 設定が有効になってしまうので注意してください。

サンプルドキュメントを samples フォルダに移動しました

gem だと関係がありませんが……。GitHub のコード管理で test フォルダ以下にあるのは居心地が悪いということで移動しました。

config.yml.sample に索引関連のフックおよびパラメータのコメントを追加しました

わりと昔からあったのにドキュメント化していなかったので入れておきました。

quickstart.md のタイプミスを修正しました

ご指摘ありがとうございます。

以上、preview2 のリリースノートの解説でした。今後 preview3 をリリースし、それから正式に 3.0 としてメジャーアップデートのリリースとしたいと考えています。

また、Re:VIEW ナレッジベース では、Re:VIEW のカスタマイズなどについてまとめていますので、ご参照ください。