2021/6/29 by @kmuto

Re:VIEW 5.2 での変更点

Re:VIEW 5.2 において 5.1 から変更した点について解説します。


2021年6月29日に、Re:VIEW 5 系のマイナーバージョンアップである「Re:VIEW 5.2.0」をリリースしました。

今回のバージョン 5.2 は、5.1 で発見された不具合の修正と、新機能を数点導入しています。


既知の問題

現時点ではありません。


インストール

新規インストールの場合

$ gem install review

更新の場合

$ gem update review

既存プロジェクトのバージョンアップ追従

既存のプロジェクトを 5.2 に更新するには、Re:VIEW 5.2 をインストール後、プロジェクトフォルダ内で review-update コマンドを実行してください。

$ review-update
** review-update はプロジェクトを 5.2.0 に更新します **
config.yml: 'review_version' を '5.0' に更新しますか? [y]/n 
プロジェクト/sty/review-base.sty は Re:VIEW バージョンのもの (/var/lib/gems/2.5.0/gems/review-5.2.0/templates/latex/review-jsbook/review-base.sty) で置き換えら
れます。本当に進めますか? [y]/n 
プロジェクト/sty/review-jsbook.cls は Re:VIEW バージョンのもの (/var/lib/gems/2.5.0/gems/review-5.2.0/templates/latex/review-jsbook/review-jsbook.cls) で置き換えられます。本当に進めますか? [y]/n 
完了しました。

続いて、リリースノートをベースに、新規に導入した機能や変更点について理由を挙げながら解説します。

新機能

EPUBMaker: CSS 組版向けに、見出しの存在に応じて <section> で階層化する機能を追加しました

5.1 で Vivliostyle CLI の呼び出し機能を追加しましたが、Vivliostyle の CSS スタイルテーマを適用しやすいよう、見出しに応じて <section> HTML タグ構造を付けるオプションを用意しました。config.yml で以下のように epubmaker セクションの use_sectiontrue に指定します。

…
epubmaker:
  use_section: true
 …

Vivliostyle の考える HTML 構造と Re:VIEW の書き出す HTML 構造は完全には一致しないので、必ずしもすべてのテーマが完全流用できるとは限らないのですが、移植しやすいようにはなったはずです。Re:VIEW CSS 組版でも活用してみてください。

バグ修正

PDFMaker: Ruby 2.6 以上でテンプレートの引数についての警告が出る問題を修正しました

Ruby 2.6 以上の ERB ライブラリで obsolete 化したメソッドがある影響で、警告が出ていました。

次の Re:VIEW 6 の頃にはすでに EOL となっている Ruby 2.5 についてのサポートを停止することも考えるべきか…ただ、今の Debian stable (Ruby 2.5 利用) が Debian oldstable になってそれもしばらくしてからでないとなかなか勇気が出ないところではあります。

EPUBMaker: Docker 環境においてファイルがコピーされず空になる問題を修正しました

Linux の Docker 環境固有で、FileUtils.cp でコピーする際、preserve: true を付けないと0バイトファイルになるというちょっとよくわからない現象があります。おまじない的なのが気に入りませんが、Re:VIEW 側ではあまりどうにもならなそうなので、ひとまず安全側に倒しました。

縦中横を正しく表示する CSS 設定を追加しました

デフォルトの CSS ファイルで、縦中横の定義が不十分でした。

PDFMaker: 新しい TeXLive との組み合わせで pxjahyper のオプション競合エラーが発生するのを修正しました

新しい TeXLive + pxjahyper + plautopatch の組み合わせにおいて、ドライバ (dvipdfmx など) 定義が競合してエラーになるという問題がありました。ドライバは初回 class 定義か自動で見るのが今どきということで、もう不要となる定義を削除しています。

PDFMaker: 画像が見つからないときにコンパイルエラーになるのを修正しました

画像が見つからないときに missing なんとか という文字列を書き出していたのですが、エスケープをしていなかったので、ファイル名にアンダースコアがあったりするとエラーになっていました。

擬似プログラムコード化もやめたので、見つからないときの見た目はちょっと変わります。

機能強化

警告とエラーを出力する際の処理を改善しました

内部コードの話ですが、error! (すぐに終了) および app_error (ApplicationError 例外を上げる) メソッドを導入しました。IDGXMLMaker などで今までは途中でエラーがあったのに Maker がエラー終了しないということがあったことも対策しています。

PDFMaker: ビルドのために画像ファイルをコピーする際、実コピーではなくシンボリックリンクを利用して処理を高速化するオプションを追加しました

十数程度の画像ファイルだと気にならないことですが、これが数GBオーダーで百を超えるファイルみたいな制作物が相手だと、ビルド時のファイルのコピー、ビルド後の削除という処理だけでかなりの時間を費してしまうという問題がありました。Unix 系 OS において実コピーの代わりにシンボリックリンクを使うことで、この時間を大幅に短縮できます。以下で有効化します。

 …
pdfmaker:
  use_symlink: true
  …

PDFMaker: review-jlreq で serial_pagination=true, openany を指定したときには前付の後の空ページが入らないようにしました

serial_pagination=true は前付大扉からのアラビア数字通し、openany は奇数偶数どちらのページからでも章などを開始できるようにする、という TeX クラスファイルのドキュメントオプションですが、前付が奇数で終わったときに openany を付けていても必ず白ページが入るという現象がありました。

これはもともとの jlreq、およびそれがさらに元にしている TeX の標準ドキュメントクラスの挙動です。前付のノンブル (ページ番号) はローマ数字を前提としていて、それが奇数で終わり、本章のノンブルアラビア数字1から始まるというときには、間に1つ白ページを入れないとページの左右とノンブルの意図する左右がずれてしまうからです。

しかし、serial_pagination が有効な場合は前付からずっとアラビア数字で通しているので、白ページを入れる意味はありません。ということで、2つのオプションが指定されたときには白ページを入れないようにしました。

なお、review-jlreq は TeXLive 2018 ではいくつかの問題 (隠しノンブルが壊れた状態になるなど) があるため、最低でも TeXLive 2019 との組み合わせ、できれば TeXLive 2020 や TeXLive 2021 で使うことを推奨します。

その他

GitHub Actions まわりを修正しました

PR トリガまわりなどを調整しました。

review-preproc: リファクタリングを行いました

ごちゃごちゃしていたコードをリファクタリングし、綺麗にしてもらいました。

入れ子の箇条書きの処理をリファクタリングしました

Builder で持たせていた処理を、Compiler 側に寄せました。既存の review-ext.rb は修正が必要になるかもしれません。

Rubocop 1.12 に対応しました

恒例の Rubocop 先生対応です。

各ビルダの builder_init_file メソッドで最初に super で基底 builder の builder_init_file を実行するようにしました

何か全ビルダで初期実行をさせたいときには、Builderbuilder_init_file を上書きするようにするとよいでしょう。

PDFMaker: FileUtils ライブラリを内部で使う際に、明示記法の FileUtils.foobar を使うようにしました

なぜか1箇所だけ include FileUtils で省略していたけど、関係性がわかりにくくなるだけなのと、review-ext.rb でエラーになりそうなので、普通に FileUtils.foobar 記法にしました。

終わりに

今回の Re:VIEW 5.2 では主に 5.1 からのリファクタリング、安定化を進めました。

次のバージョン予定としてはそろそろ Re:VIEW 6 もよさそうかなという感じもしますし、TeX や CSS のテーマなんかも募って入れてみるのもよいかなと考えたりはしています。

Enjoy!