索引へのリンクが正しくない

索引へのリンクが正しくない

- Toshio Otaguro の投稿
返信数: 4
立て続けに質問して恐縮です.
現在 jsbook や bxjsbook を使って参考文献と索引を含む文章を書いているのですが,つい最近奇妙なことに気づきました.目次や PDF のしおりから索引のページへジャンプしようとすると,索引ではなく参考文献にジャンプしてしまいます.以前はこのようなこと無かったと思います.どの時点でどのパッケージに不具合が入り込んだのかわからずに困っています.以下再現ソースと生成した PDF を添付します.怪しいのは hyperref でしょうか?

uplatex, upmendex, dvipdfmx を使ってコンパイルしています.

% ----------
\RequirePackage{plautopatch}
\documentclass[uplatex,dvipdfmx,ja=standard,b5paper,11pt,openany]{bxjsbook}
%\documentclass[uplatex,dvipdfmx,b5paper,11pt,openany]{jsbook}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{makeidx}

\usepackage[dvipdfmx, colorlinks=true, bookmarks=true, bookmarksnumbered=true,%
  bookmarkstype=toc, filecolor=blue, urlcolor=blue, linkcolor=blue,%
  linktocpage=true, citecolor=red, menucolor=black,%
  pdfnewwindow=true, breaklinks=false]{hyperref}
%\usepackage{pxjahyper}

\title{本の題名}
\author{著者名}
\date{\today}
\makeindex

\begin{document}
\maketitle
\tableofcontents

\chapter{序論}
\section{各種変数,定数の定義}
本書では以下の規則に従って変数名\index{へんすうめい@変数名}や定数名\index{ていすうめい@定数名}を使用する.なお,この規則はガイドライン\cite{foo:Guideline of naming convention}に従ったものである.

\begin{thebibliography}{99}
\bibitem{foo:Guideline of naming convention} Bar, F.\ (2024). \emph{Naming Convention of Variables and Constants}. South Pacific Publishing, Nouméa
\end{thebibliography}
\clearpage

\printindex
\end{document}
% ----------
Toshio Otaguro への返信

Re: 索引へのリンクが正しくない

- はやて (h20y6m) の投稿
これと同じ問題ですかね?

https://okumuralab.org/tex/mod/forum/discuss.php?d=3100

ut さんの回答でうまくいくようです。
はやて (h20y6m) への返信

Re: 索引へのリンクが正しくない

- Toshio Otaguro の投稿
はやてさん,
あれれ?
これって私が3年ほど前に質問したときのスレッドです.あちゃー,同じ地雷を踏んでいたのか?
その時に教えていただいたパッチを当てると,確かに望みどおりになります.

ご指摘大変ありがとうございました.もっとよく調べてから質問すべきでした.
それにしても hyperref は私にとっては鬼門の方角です.
Toshio Otaguro への返信

Re: 索引へのリンクが正しくない

- Yamamoto Munehiro "munepi" の投稿
以下では、場当たり的に、\printindexの直前に \phantomsection を入れました。
本件の場合にかぎり、なぜこれでうまくいくかは、目次のためのtocファイルと別に吐き出されている、PDF栞のためのoutファイルを眺めていただくことになります。

\RequirePackage{plautopatch}
\documentclass[uplatex,dvipdfmx,ja=standard,b5paper,11pt,openany]{bxjsbook}
%\documentclass[uplatex,dvipdfmx,b5paper,11pt,openany]{jsbook}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{makeidx}

\usepackage[dvipdfmx, colorlinks=true, bookmarks=true,
bookmarksnumbered=true,%
bookmarkstype=toc, filecolor=blue, urlcolor=blue, linkcolor=blue,%
linktocpage=true, citecolor=red, menucolor=black,%
pdfnewwindow=true, breaklinks=false]{hyperref}
\usepackage{pxjahyper}

\title{本の題名}
\author{著者名}
\date{\today}
\makeindex

\begin{document}
\frontmatter
\maketitle
\tableofcontents

\mainmatter
\chapter{序論}
\section{各種変数,定数の定義}
本書では以下の規則に従って変数名\index{へんすうめい@変数名}や定数名\index{ていすうめい@定数名}を使用する.なお,この規則はガイドライン\cite{foo:Guideline
of naming convention}に従ったものである.

\backmatter
\begin{thebibliography}{99}
%%\chapter*{参考文献} => \BOOKMARK [0][-]{chapter*.2}{\376\377\123\302\200\003\145\207\163\056}{}% 3
\bibitem{foo:Guideline of naming convention} Bar, F.\ (2024). \emph{Naming
Convention of Variables and Constants}. South Pacific Publishing, Nouméa
\end{thebibliography}

\clearpage\phantomsection%%<= [ad-hoc]
\printindex
%%\chapter*{索引}
%% \phantomsection を入れない => \BOOKMARK [0][-]{chapter*.2}{\376\377\175\042\137\025}{}% 4 ←参考文献のIDと衝突する
%% \phantomsection を入れる => \BOOKMARK [0][-]{section*.3}{\376\377\175\042\137\025}{}% 4
\end{document}


%%  ☡
%% そもそも、jclassesやjsclassesは、hyperrefに対応していないクラスファイルです。
%% ここで、「hyperrefに対応していない」とは、hyperrefを組み込んでhyperrefを前提として実装されていないということです。
%% したがって、jclassesやjsclassesを使ってhyperrefしたい場合、期待するoutファイルを吐くように、各種見出しならびに、それらの目次まわりを部分的に書き換えたりする必要があると思います。
Yamamoto Munehiro "munepi" への返信

Re: 索引へのリンクが正しくない

- Toshio Otaguro の投稿
Yamamoto Munehiro "munepi" 様,
ご教示ありがとうございました.私は out ファイルの読み方をよく理解していませんが,\phantomsection の有る無しで ID が衝突したりしなかったりする,ということはわかりました.それにしても,正しくリンクを張るには細かい配慮が必要だという点は理解しました.ただ,どのように書き換えればよいのかは相変わらずわかりません.症状別に Tips のようなものがまとまっていればありがたいです.