jlreq icon indicating copy to clipboard operation
jlreq copied to clipboard

\backmatter以降はhyperref packageによる章の参照が効かない

Open fenril058 opened this issue 1 year ago • 2 comments

状況

Option bookをtureにして、hyperrefをつかい、LuaLaTeXでコンパイルすると、 \backmatte以降の章の参照先が目次、しおりともにずれる。

環境

LuaHBTeX, Version 1.16.0 (TeX Live 2023) jlreq 2023-03-05 2023-04-20 v7.00w

再現用コード

\documentclass[book]{jlreq}
\usepackage[
unicode=ture,
pdfusetitle=ture,
bookmarks=true,
]{hyperref}

\title{タイトル}
\author{著者}

\begin{document}

\frontmatter
\maketitle
\tableofcontents
\chapter{はじめに}

\mainmatter
\chapter{テストA}
\chapter{テストB}
\chapter{テストC}


\appendix
\chapter{テストD}

\backmatter
\chapter{おわりに}
この章へのリンクが機能しないようです。
目次やしおりで「おわりに」をクリックすると、
テストDへとんでしまいます。

\end{document}

fenril058 avatar Jun 10 '23 17:06 fenril058

ありがとうございます.hyperrefはchapterカウンタの値をリンク先にしているようなのですが,

  • jlreqのデフォルトでは\backmatterで採番するのをやめるようにしているので,この値が増加しない(\refstepcounterが呼び出されない)

というのが原因のようです.では採番するようにすればよいのかというとそうでもなく,\frontmatterchapterカウンタをリセットしているので結局\fontmatter前後の\chapterではchapterカウンタはどちらも1となっていて,結局かぶってしまうのでやぱり失敗します.

ちょっと困ってしまいました.hyperrefパッケージは\@chapterの方経由でもリンクを挟み込むということもしているように見えるのでそちらでどうにかならないか考えてみます.

(個人的メモ:\@makechapterheadを内部で呼び出していないということに起因してパッケージが機能しないということもあった.)

abenori avatar Jun 12 '23 14:06 abenori

ありがとうございます。

jlreqのデフォルトでは\backmatterで採番するのをやめるようにしているので,この値が増加しない(\refstepcounterが呼び出されない)

なるほどそういうことだったのですね。

なお、美しくないwork aroundですが、pandocでmarkdown-auto_identifiers拡張をONにしたときのように、

\hypertarget{おわりに}{%
\chapter{おわりに}\label{おわりに}}

とすればとりあえず目次としおりが正しく機能することは確認しました。

どうやら調べてみるとhyperref packageはあんまりお行儀がよくないようですね。 TeX wikiでも

「書籍の原稿」といった、「最終的な組版を書き手自身がやるのではない」文書の場合には、hyperref パッケージをはじめとする、お行儀の悪い(=LaTeX の内部処理をあちこち書き換える)パッケージは決して使用しないでください

どまでいわれていて驚きました。

また、\refstepcounterを上書きしたときのアンカーがテキスト要素とみなされてしまい、ページ先頭であってもページ先頭だとはみなされなくなり、\vspace によるマージンが入ってしまうというQiitaの記事を見つけました。

https://qiita.com/kauplan/items/2b404d770a905c38082e

(この記事ではほかにも、ものすごく苦言を呈されていますが……。)

fenril058 avatar Jun 13 '23 13:06 fenril058

こんにちは。

TeX Live 2024では、状況が少し変わっているようです。

  • LuaHBTex 1.18.0 (TeX Live 2024)
  • jlreq 2024/02/16 ( \listfiles コマンドの実行結果 )

Issueでのやりとりを参考にワークアラウンドを使ってみましたが、「はじめに」「おわりに」へは正しくジャンプしません。念のため英語も使ってみましたが同じ状況です。

\documentclass[book]{jlreq}
\usepackage[
unicode=ture,
pdfusetitle=ture,
bookmarks=true,
]{hyperref}

\listfiles


\title{タイトル}
\author{著者}

\begin{document}

\frontmatter
\maketitle
\tableofcontents
\hypertarget{はじめに}{
  \chapter{はじめに}\label{はじめに}}

\hypertarget{Preface}{
  \chapter{Preface}\label{Preface}}

\mainmatter
\chapter{テストA}
\chapter{テストB}
\chapter{テストC}


\appendix
\chapter{テストD}

\backmatter
\hypertarget{おわりに}{%
  \chapter{おわりに}\label{おわりに}}
この章へのリンクが機能しないようです。
目次やしおりで「おわりに」をクリックすると、
テストDへとんでしまいます。

\hypertarget{Authornote}{
  \chapter{Authornote}\label{Authornote}}
英語の章題にしてもリンクは機能していません。

\end{document}

suikan4github avatar Apr 18 '24 23:04 suikan4github