jsbookでpartごとにchapterを初期化するときにリンクを正しく動かす対処法¶
問題の説明¶
まず問題が何かを説明すると, 次のような現象が起きていた.
- tex で複数部構成にした
\setcounter{chapter}{0}
で部ごとに章番号を振り直している- このとき目次のリンクで 2.5 章 (2 部の 5 章) をクリックすると 1.5 章 (1 部の 5 章) に飛ぶといった挙動になる
具体的には次のようなコマンドを使っていた.
\newcommand*\initChapCounter{\setcounter{chapter}{0} \renewcommand\theHchapter{back.\arabic{chapter}}}
メモによるとここを参考にしたようだ.
解決法¶
次のツイートで教えて頂いた.
\setcounter{chapter}{0}というのをやめて, プリアンプルに
— Hiromu USHIHARA (@H_USHIHARA) December 3, 2020
\makeatletter
\@addtoreset{chapter}{part}
\makeatother
と書けばリンクも正しくなったはずです.
これをプリアンブルに設定した上で, 上で定義していた initChapCounter を削除したら各種リンクが正しく動くようになった. 以前もはまって今回また 2 週間くらいはまっていたので非常に助かった. ありがたいことこの上ない. これでコンテンツ制作・参照が本当にはかどる.
戒め¶
次のようなコメントを頂いた.
「LaTeXからみた章番号が一意でない」問題を解消するために、わざわざ \theHchapter(hyperrefからみた章番号)を設定しているはずなのに、その定義の中に部番号を*入れていない*のは何故だろう……??#TeX https://t.co/25JZ4Yn2CP
— 某ZR(ざんねん??) (@zr_tex8r) December 6, 2020
ちなみに、
— 某ZR(ざんねん??) (@zr_tex8r) December 6, 2020
\@?addtoreset{part}{chapter}
を実行すると「そういう意図である」ことがLaTeXに伝わるので、その時点で \theHchapter の値も
\theHpart .\the\value{chapter}
のように部番号が入った形に更新される。#TeX
指摘を頂いたのは次の箇所だろう.
\renewcommand\theHchapter{back.\arabic{chapter}}}
ここで (謎の back.
はさておき) \arabic{part}
のような記述が必要なのだとかそういう意味だろう. よく調べもしないでコピペするのは駄目という太古からの教えを守らないとこういう悲劇が起きる. 人, これを知的怠惰という. ここに戒めとして記録しておく.
もっといえば「だろう」ではなくきちんと調べて検証するべきところだが, 再び知的怠惰さを発揮して調査をさぼる.