jlreq で hyperref の \nameref を使いたい

jlreq で hyperref の \nameref を使いたい

- M N の投稿
返信数: 3

hyperref パッケージ(というかその中での nameref )を使って、節の名前を \nameref で参照したいと思っています。 しかしドキュメントクラスによっては、節の名前の参照が空白になってしまいます。

  • ltjsarticle: 英文字は使える。名前に日本語が入っていても使える
  • bxjsarticle: 英文字は使える。名前に日本語が入っていても使える
  • jlreq: 英文字だけでも日本語が入っていても、参照は空白になる
  • article: 英文字は使える。しかしそもそも全般的に日本語はだめ

lualatex で、jlreq クラスで使用したいと思っているのですが、解決方法はあるでしょうか。

% \documentclass{ltjsarticle}                       % 英字はよし。日本語もよし
% \documentclass[lualatex,ja=standard]{bxjsarticle} % 英字はよし。日本語もよし
\documentclass[article]{jlreq}                      % 英字もだめ。日本語もだめ
% \documentclass{article}                           % 英字はよし。日本語はそもそも全体的にだめ

% \usepackage{hyperref}
\usepackage[luatex]{hyperref}

\begin{document}
\section{test1}
\label{sec:test1}

節の名前を参照しています。 \ref{sec:test2} の「\nameref{sec:test2}」と \ref{sec:test3} の「\nameref{sec:test3}」です。

節の名前を参照しています。 \ref{sec:日本語のラベル} の「\nameref{sec:日本語のラベル}」です。

\section{test2 は日本語を含む節の名前}
\label{sec:test2}

\section{test3}
\label{sec:test3}

節の名前を参照しています。 \ref{sec:test1} の「\nameref{sec:test1}」と \ref{sec:test2} の「\nameref{sec:test2}」です。

\section{test4}
\label{sec:日本語のラベル}

\end{document}
M N への返信

Re: jlreq で hyperref の \nameref を使いたい

- M N の投稿

自分で少しずつ調べてみました。

LaTeX 本体に、\label が実行される際にその時点での節番号やページや節の名前を aux ファイルに書き出す機能が組み込まれているようです。(LaTeX News Issue 37, 2023年6月)

節番号やページは自動的に取得されるようですが、節の名前 (\@currentlabelname) はセットされません。ドキュメントクラスに強く依存するのでそっちでやってくださいというスタンスなのだと推測します。ところがドキュメントクラスが \@currentlabelname に節の名前を入れてくれない(注)ので、aux に書き出される \newlabel で始まる行の、節の名前に相当する部分が空白になります。

根本的な解決は、jlreq が「見出しを組み立てる際に \@currentlabelname に見出しの名前をセットする」という処理をしてくれることなのだろうと思います。

(注) 現在の article や ltjsarticle や bxjsartile なども \@currentlabelname のセットはしないのですが、見出しの組み立ての部分は似通っているのでそれを見越した nameref パッケージがその箇所に引っ掛けて \@currentlabelname をセットするようになっています。しかし、jlreq はまったく独自な方法なので、nameref パッケージのやり方が空振りになっているようです。

M N への返信

Re: jlreq で hyperref の \nameref を使いたい

- 阿部 紀行 の投稿
単なる言い訳です.

hyperref関連のものはいろいろダメだといってもらいながら放置しています.場当たり的な対処はできるのですが,正しい方法での対処が不明なものが多く,したがってやる気も出ずという感じです.今回の件についてはnamerefのマニュアルをみるとそれなりに何をするべきか書いてあるように見えるので(それでもいまいち曖昧ですが)何とかなるかもしれませんので,自分のやる気が出ることに期待するかPRを送ってください.
(こういう事情もあるのでLaTeXのフックシステムに対応させておこうと思った記憶もあるのですが,これもやっていませんね.)

いずれにせよGitHubの方に残してもらった方が流れなくてよいかもしれません.
阿部 紀行 への返信

Re: jlreq で hyperref の \nameref を使いたい

- M N の投稿
https://github.com/abenori/jlreq/issues/139 を立てていただきました。
よろしくお願いします。