2021/10/29 by @kmuto

Re:VIEW 5.3 での変更点

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


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

今回のバージョン 5.3 は、5.2 で発見された不具合の修正と、縦書き周りの強化などを施しています。


既知の問題

現時点ではありません。


インストール

新規インストールの場合

$ gem install review

更新の場合

$ gem update review

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

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

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

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

新機能

後注のサポートを追加しました

脚注に類似したものとして、後注(文末注)の機能を追加しました。

//endnote 命令で後注内容を記述し、@<endnote> 命令で後注を参照します。実際に後注一覧を配置する箇所には、//printendnotes 命令を使います。

 …
ビルダはRe:VIEW形式の原稿ファイルを「HTML」や「LaTeX」などに変換する変換器のことです@<endnote>{builder}。

//endnote[builder][HTML, LaTeX, TOP, IDGXMLを主要なビルダとしています。]

==== 注
//printendnotes

//printendnotes は同一 re ファイル内に記述する必要があります。つまり、章単位で後注を出力することはできますが、書籍全体で最後に1つの後注を出力する、ということはできません。

また、後注は一覧を出力するのみで見出しは付けないので、上記の例のように必要に応じて見出し、あるいは //blankline などで空行を入れる、といった表現をとることになります。

バグ修正

新しい jlreq において ifthen パッケージに非依存になったことによるエラーを修正しました

review-jlreq.cls の基底クラスとしている jlreq.cls は実装がどんどん変わるので、わりと追従が大変です…。jlreq.cls で ifthen パッケージを読み込んでいる前提にしていたのが読み込まなくなったので、review-jlreq.cls で自前で読み込むようにしました。

review-jsbook と新しい TeXLive 2020 以降の組み合わせにおいて、隠しノンブルがすべて1になってしまう問題を修正しました

かなりの人が「古い(古臭い?)変わらないもの」だと思っている TeX カーネルですが、これも実はわりとどんどん変わっています。日本語 TeX や日本語クラスファイルではそれを必死に追従してくれているわずかなボランティアが支えている、というわりと危機的な状況だったりしますね。

で、最近の TeX カーネルでフック周りが変更されて review-jsbook が隠しノンブル打ちの前提にしていた everypage パッケージが動作しなくなりました。ひとまず everypage-1x という後方互換パッケージが提供されているので、このパッケージが入っていればそれを使うようにしました。

TeX カーネルのさらなる変更であまり未来はない対処の可能性があり、review-jsbook をいつか諦めて review-jlreq 1本にしていったほうがいい、という判断になるかもしれません(とはいえ review-jlreq も jlreq の変化についていくのが厳しいところがありますが…)。

coverimage パラメータに実際に存在しないファイルを指定したときに例外エラーが発生するのを修正しました

titlefile・creditfile・profile パラメータに存在しないファイルを指定したときに警告を表示するようにしました

どちらもファイル指定をミスしたときに、妥当なメッセージではなくバックトレース例外を出してしまっていました。トレースの最初のほうを見ればファイル指定が間違ったんだな、とわかりはするのですが、捕捉できることなのにバックトレースを出すのは気持ちが悪いので、そのあたりのケアを入れました。

なお、coverimage は存在しなかった場合にエラーにしますが、titlefile・creditfile・profile について警告までとしているのは、昔の名残りで PDFMaker 利用時には拡張子を .tex に書き換えて探してみる、というロジックを入れていたために、見つからないときのエラーが妙なことになってしまうのでした。今は固有に分けたいなら pdfmaker セクションの下に記述する、別ファイルにして inherit を使うといった手法もあるので、ちょっと負債化しています。

review-jlreq で @<tcy> 命令がエラーになるのを修正しました。縦中横の TeX 表現側での抽象名に \reviewtcy マクロを使うようにしました

jlreq には縦中横について固有の命令があったので、いったん抽象化を挟むことにしました。

review-vol および review-index の例外エラーを修正しました

無効な yaml ファイル名を指定したり、catalog.yml 内に無効なファイル名の指定があったときにバックトレース例外を出していたのを捕捉して妥当なエラーを出すようにしました。

数式ビルドエラーが出たときに __IMGMATH_BODY__.tex のコピーを忘れているのを修正しました

EPUBMaker において数式の画像化でエラーが出たときに __IMGMATH__.tex をエラー解析用に images/_review_math フォルダにコピーしていたのですが、この TeX ファイルから参照している実体 __IMGMATH_BODY__.tex をコピーしていなかったので、解析できない……というしょうもない状態になっていました。

//beginchild//endchild 命令でエラーが起きたときにエラー位置の表示がされていなかったのを修正しました

箇条書き内入れ子を表現するための //beginchild//endchild 命令で構造のエラー(ネスト化されていないなど)があったとき、エラーがあった、というのを報告してもどの箇所かという行番号を示していませんでした。

エラーが発覚した時点の re ファイル内行番号を出力するよう修正しました。

//graph 命令を使うとビルドエラーになるのを修正しました

ユーザーからのご報告ではじめて発覚したのですが、IndexBuilder 導入以来 //graph はちゃんと動いていなかった模様です。業務で画像の動的生成は数式以外ではまずしないので、私のほうでは気付きにくいのでした。

epubmaker.rb で未定義の変数を参照している箇所を修正しました

以前のリファクタリングの影響で漏れがありました。あまり到達しない箇所なので気付かなかった模様。

review-catalog-converter がエラーになるのを修正しました

Re:VIEW 2 より前に作った書籍案件の EPUB 付き増刷、という作業でカタログファイルの持ち方をさすがに変えたい…と思って実行したら気付きました。

機能強化

脚注 (//footnote)・後注(//endnote) を定義したけれども参照(@<fn>@<endnote>)していないときに警告するようにしました

脚注や後注については、定義をしても @<fn>@<endnote> で参照しないと出力から抜けることになるのですが、単純に編集者側の参照漏れでした!ということが何件か立て続けに発生したこともあり、未参照のものについて警告を出すようにしてみました。

紙面全体に画像を貼り込む \includefullpagegraphics マクロを縦書きにも対応するようにしました

tate オプションで縦書き表現可能な review-jlreq ですが、表紙配置にも使っている \includefullpagegprahics が縦配置の計算に対応していなかったので、@munepi さんに修正していただきました(いつもありがとうございます!)。

plantuml の jar ファイル探索先を作業フォルダのほか、/usr/share/plantuml/usr/share/java からも探すようにしました

UML 図を描く plantuml が Debian 11 bullseye でパッケージ化されていたので、作業フォルダになくても、システムにインストールされていたらそれを使うようにしてみました。Homebrew でもできないかなと思ったんですが、/usr/local/Cellar/バージョン になっていて同定できないので今回は諦め。plantuml コマンドを呼ぶようにしたほうがよいかもという気はしていますが、そうすると今度は Windows でにっちもさっちもとなりそうです。

ドキュメント

format.ja.md, format.md: SVG数式を作成するコマンドラインの間違いを修正しました

pdftocairo で SVG を作るときには -singlefile は必要ないし、-svg より -%t でタイプを取り込むようにしたほうがいいよね、ということで修正しました。pdftocairo、PNG と SVG でだいぶ挙動が違う感じです。

mac OS と Linux で共通に使えて品質の良い PDF→SVG 変換器がほしいですねぇ(mac だと sips、Linux だと pdftocairo が現状安定)。

その他

Windows 版 Ruby 2.7 のテストを追加しました

パッチをいただいたので Windows 版 Ruby 2.7 もビルドテスト対象になりました。

Rubocop 1.22.1 に対応しました

恒例の Rubocop 先生対応です。

終わりに

今回の Re:VIEW 5.3 では新機能はほぼなく、5.2 以前にあった縦書き周りの不具合や、理由がユーザーにはよくわからない予想外のエラーへの対処といった使い勝手の向上が中心となりました。

縦書きはほかにも要望をいくつか頂いていて issue にもあるんですが、EPUB はともかくとして TeX においてはニッチで非日本語圏開発者にとってなじみも動機もないので、tcolorbox の座標系が変なのとかはちょっとどうにもならない感じがあります。基本が縦になっている中に横方向のを置く、みたいなこともかなり手間がかかる印象で、1ページ全体になるものなら \includefullpagegraphics、それを超える複雑なものについては InDesign か、Vivliostyle.js や AHFormatter などによる CSS 組版、といった使い分けが必要になるかなと思っています。

コロナ禍の見通しはまだ手探りといった状況で、対面での開発ミーティングをしづらいため、がっつりした開発駆動をかけにくい状況にあります。来年には何かできるといいんですけどね。

Enjoy!