Re:VIEW で catalog.yml
に設定するファイルの分割粒度は「章単位 (Chapter)」になっている.しかし,文章量が増えてくると運用面で「節単位 (Section)」にファイルを分割したくなってくることもある.例えば,以下のように「1章(1節)」と「2章(2節)」と「3章(3節)」でファイルを分割して catalog.yml
に設定できる(できるにはできる...).
PREDEF: CHAPS: - chapter1.re - section1-1.re - chapter2.re - section2-1.re - section2-2.re - chapter3.re - section3-1.re - section3-2.re - section3-3.re APPENDIX: POSTDEF:
でも実際にビルドをして PDF を確認すると,@<chap>
や @<img>
を使った参照があると採番がズレてしまう.例えば @<chap>{chapter3}
で参照すると catalog.yml
で6番目なので 第6章
と表示されてしまう.また,2018年に関連する issue も出ている.
解決案💡
Re:VIEW で「節単位」に分割したファイルをビルドするために,一時的に .re
ファイルを「章単位」にまとめてからビルドをする解決案を考えた.変更点は大きく以下の3点ある.
1. config.yml
まず,config.yml
に contentdir
を設定して,ビルド対象ディレクトリをデフォルトの .
から ./build
に変更する../build
ディレクトリはビルド専用になるため .gitignore
にも追加してコミット対象外にしておく.
contentdir: ./build
2. catalog.yml
次に catalog.yml
を変更する.実際に 1.re
や 2.re
はなく,「章単位」にまとめたファイル名を指定している.まとめる作業は次に紹介する Makefile
を使って実行する.
PREDEF: CHAPS: - 1.re - 2.re - 3.re APPENDIX: POSTDEF:
3. Makefile
最後は Makefile
を作る.正確に言えば Makefile
である必要性はなく build.sh
など適当にスクリプトを実装しても OK!簡単に言うと「章単位」にまとめたファイルを ./build
ディレクトリにリダイレクトしている.<(echo)
を使っているのは .re
ファイル同士をまとめるときに空行を含めないと @<chap>
や @<img>
を使った参照ができなかったという理由がある.あくまで実装例として!
SHELL := $(shell which bash) build: mkdir -p build cat chapter1.re <(echo) \ section1-1.re > build/1.re cat chapter2.re <(echo) \ section2-1.re <(echo) \ section2-2.re > build/2.re cat chapter3.re <(echo) \ section3-1.re <(echo) \ section3-2.re <(echo) \ section3-3.re > build/3.re rake pdf
準備ができたら make build
を実行すればビルドできる.注意点は「章単位」でまとめるため @<chap>{3}
などビルド後の ID
を使うところ!確認すると @<chap>
や @<img>
を使った参照も期待した通りに動いている.やったー👏
$ make build
ビルド確認まで終われば,後は GitHub Actions などで make build
を実行すれば OK!詳しくは以下の記事を見てもらえれば!