kakakakakku blog

Weekly Tech Blog: Keep on Learning!

Re:VIEW で「節単位」に分割したファイルをビルドする

Re:VIEWcatalog.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 も出ている.

github.com

解決案💡

Re:VIEW「節単位」に分割したファイルをビルドするために,一時的に .re ファイルを「章単位」にまとめてからビルドをする解決案を考えた.変更点は大きく以下の3点ある.

1. config.yml

まず,config.ymlcontentdir を設定して,ビルド対象ディレクトリをデフォルトの . から ./build に変更する../build ディレクトリはビルド専用になるため .gitignore にも追加してコミット対象外にしておく.

contentdir: ./build

2. catalog.yml

次に catalog.yml を変更する.実際に 1.re2.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!詳しくは以下の記事を見てもらえれば!

kakakakakku.hatenablog.com