脚注や後注へのリンク

脚注や後注へのリンク

- Toshio Otaguro の投稿
返信数: 7
後注を含む文章を書いているのですが,hyperref を使ったリンクが正しく張れなくて困っています.ちょっと長いのですが再現ソースを示すと同時に,dvipdfmx で作った PDF ファイルを添付します.解決策はあるでしょうか?

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

\usepackage{enotez}
\newcommand\myendnotesize{\small\baselineskip=12pt}
\DeclareInstance{enotez-list}{myendnote}{paragraph}{heading=\section*{#1},notes-sep=3pt,format=\myendnotesize}
\setenotez{list-style=myendnote,list-name={後注},reset=false,backref=true}

\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}

\begin{document}
\chapter{脚注と後注}
\section{脚注と後注の使い分け}
一般に脚注はできるだけ避けるべきだが,読んでいるページの下部にちょっとした注\footnote{ちょっとした注とは,単語の別称などの短く形式的な内容が望ましい.\label{fn:Simple footnote}}があるのはページをめくる必要がないので便利だ.

しかしときに本文とは別に長い注を書きたくなる場合がある.翻訳本で訳者が著者と異なる見解を持っていて,訳者なりの論旨を展開したい場合%
\endnote{これは訳者の役割を逸脱した越権行為だと言われるかもしれないが,学術本ではときどき見かける.著者から拒否される場合があるだろうが,それは翻訳出版の契約次第だ.\label{enote:Translator's role}}%
や,数式の導出の補足%
\endnote{空気密度,対気速度,揚力係数,抗力係数,代表面積をそれぞれ$\rho$, $v$, $C_\mathrm{L}$, $C_\mathrm{D}$, $S$とすると,揚力$L$と抗力$D$はそれぞれ,
\begin{align}
L &= (1/2)\rho v^2 S C_\mathrm{L}, \\
D &= (1/2)\rho v^2 S C_\mathrm{D},
\end{align}
と書ける.}\label{enote:Lift and drag}%
を行いたい場合などだ.ただし脚注と後注の併用は避けるべきだ.番号や記号の付け方をどう区別したとしても読者を混乱させてしまう可能性があるからだ.

\section{脚注や後注へのリンク}
ところで脚注自体を本文や他の注の中から参照したい場合は\verb|footnote{}|\,のカッコ内に\verb|label|を書いておくことで脚注番号が正しく得られ,\verb|hyperref|パッケージを使ってリンクも張れる\footnote{実は\texttt{hyperref}のマニュアルには\texttt{footnote}も\texttt{endnote}も\emph{サポートしない}と明記してある.}.さきほど挿入した第1の脚注の番号とリンクは\ref{fn:Simple footnote}だ.

ところが後注の場合,最近開発中のパッケージである\verb|enotez|を使うと,同じやり方では第1の後注の番号が\ref{enote:Translator's role}となって正しく得られない,がリンク先は正しい.\verb|endnote{}|\,のカッコ外側直後に\verb|label|を置けば第2の後注番号は正しく\ref{enote:Lift and drag}と得られる.しかし張られたリンクが指すのは後注自体ではなく本文中の注番号なのだ.これでは不便だ.脚注と同じように後注本文を指すようにするにはどうすればよいのだろうか?

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

Re: 脚注や後注へのリンク

- 和田 勇 の投稿

Table of Contents

誰も回答しないので試行錯誤している情報を提供します。

  • texdoc enotez の p3の以下の例を参考にしてみた

    1 The next endnote\endnote{This endnote gets a label.}\label{en:test} has
    2 the number~\ref{en:test}. Let's now test
    3 \cs{endnotemark}\endnotemark[\ref{en:test}].
    ----------------------------------------------------------------------
    The next endnote4 has the number 3.1. Let’s now test \endnotemark5 3.1.
    
  • \endnote{}\label{ラベル} のラベル参照を \endnotemark[\ref{ラベル}] としてみた

    • \ref{enote:Lift and drag}\endnotemark[\ref{enote:Lift and drag}]
  • .aux 情報で確認

    • 変更前

      11:\newlabel{enote:Lift and drag}{{2}{1}{脚注と後注の使い分け}{endnote.2}{}}
      14:\newlabel{enote:Translator's role}{{1.2}{2}{\l__enotez_list_name_tl }{section*.1}{}}
      
    • 変更後 1.2\ref {enote:Lift and drag} に変化している

      11:\newlabel{enote:Lift and drag}{{2}{1}{脚注と後注の使い分け}{endnote.2}{}}
      14:\newlabel{enote:Translator's role}{{\ref {enote:Lift and drag}}{2}{\l__enotez_list_name_tl }{section*.1}{}}
      

 

 

和田 勇 への返信

Re: 脚注や後注へのリンク

- Toshio Otaguro の投稿
和田様,
ご返信多謝です.深夜にご回答頂き恐縮です.
ドキュメントのこの部分は読んでいたのですが,\cs の意味がわからなかったのでそのままになっていました.

ご教示の方法を試してみました.つまり,
(1) \label{} は \endnote{} の外側直後に置く.
(2) 参照するときは \endnotemark[\ref{ラベル}] とする.
実行してみると,後注の番号は正しく得られ,本文中に上付き文字で表示されますが,リンクが張られていない状態です.

実はその後 postnote というパッケージを見つけて,それを使おうかと思っています.とりあえず当方の希望通りの動作をすることは確認できていますが,出力の書式をどう調整すればよいのか試行錯誤中です.ある程度目処がついたらこの場で紹介したいと思います.
Toshio Otaguro への返信

Re: 脚注や後注へのリンク

- Toshio Otaguro の投稿
前コメントに書いたとおり,enotez の使用は諦めて postnote に乗り換えました.今のところ当方の希望はほとんど満たされています.サンプルのソースも書き換えましたので,ご参考になさってください.生成した PDF も添付します.

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

\usepackage{postnotes}
\newcommand\mynotesize{\small\baselineskip=12pt}
\postnotesetup{heading=\section*{後注},format=\mynotesize,listenv=postnoteslisthang,
postprintnote=\vspace{3pt},makemark={#2\hbox{\textsuperscript{\normalfont$\dagger$#1}}#3},maketextmark={#2#1.#3}}

\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}

\begin{document}
\chapter{脚注と後注}
\section{脚注と後注の使い分け}
一般に脚注はできるだけ避けるべきだが,読んでいるページの下部にちょっとした注\footnote{\label{fn:Simple footnote} ちょっとした注とは,単語の別称などの短く形式的な内容が望ましい.}があるのはページをめくる必要がないので便利だ.

しかしときに本文とは別に長い注を書きたくなる場合がある.翻訳本で訳者が著者と異なる見解を持っていて,訳者なりの論旨を展開したい場合%
\postnote{\label{pnote:Translator's role} これは訳者の役割を逸脱した越権行為だと言われるかもしれないが,学術本ではときどき見かける.著者から拒否される場合があるだろうが,それは翻訳出版の契約次第だ.}%
や,数式の導出の補足%
\postnote{\label{pnote:Lift and drag} 空気密度,対気速度,揚力係数,抗力係数,代表面積をそれぞれ$\rho$, $v$, $C_\mathrm{L}$, $C_\mathrm{D}$, $S$とすると,揚力$L$と抗力$D$はそれぞれ,
\begin{align}
L &= (1/2)\rho v^2 S C_\mathrm{L}, \\
D &= (1/2)\rho v^2 S C_\mathrm{D},
\end{align}
と書ける.}%
を行いたい場合などだ.ただし脚注と後注の併用は避けるべきだ.番号や記号の付け方をどう区別したとしても読者を混乱させる可能性があるからだ.この文書はその悪い見本だ.

\section{脚注や後注\postnote{セクションヘッダーへの後注も簡単に付けられる.}へのリンク}
ところで脚注自体を本文や他の注の中から参照したい場合は\,\verb|\footnote{}|\,のカッコ内に\,\verb|\label{}|\,を書いておくことで脚注番号が正しく得られ,\texttt{hyperref}パッケージを使ってリンクも張れる\footnote{実は\texttt{hyperref}のドキュメントには\texttt{footnote}も\texttt{endnote}も\emph{サポートしない}と明記してある.}.さきほど挿入した第1の脚注の番号とリンクは\ref{fn:Simple footnote}だ.

後注の場合,最近開発中のパッケージである\texttt{postnote}を使ってみる.考え方は同じだが参照するとき\,\verb|\ref{}|\,の代わりに\,\verb|\postnoteref{}|\,を使うと,第1の後注の番号が\postnoteref{pnote:Translator's role},第2の後注の番号が\postnoteref{pnote:Lift and drag}と正しく得られ,リンクも後注本体へ正しく張られる.

当初期待して試用していたパッケージ\texttt{enotez}では,後注の番号は正しく得られるもののリンクが本文の注番号に張られてしまうので,\texttt{postnote}に乗り換えた.

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

Re: 脚注や後注へのリンク

- 本田 知亮 の投稿
すでに解決したようですが,
enotezの仕様自体がそもそもhyperrefとうまく噛み合ってないように思います.
そもそもhyperrefもちょくちょく変わるし,
label/refも最近結構大きく変わりましたしね.
そのあたりを考慮してもちょっと噛み合ってない印象があります
(\@currentHrefの扱いがないのでなんとなく後注へのジャンプは考えてない気もします).

私的には,\@currentlabelをglobalに定義しているというのが恐ろしい.
globalに定義しているから,\endnote{ ... }\label{A}でAでendnoteの番号をとれるのですが,
これはとても怖い上に,外側だからこそリンクが後注本体ではなく,
本文中の使用箇所になってしまいます.

だからといって,\endnote{... \label{A} ... }と中に入れると,
後注が出力される場所からみて最後の\refstepcounterによる番号が\ref{A}で参照されます.

あと,\footnoteや\endnoteでそれ自身の番号を相互参照したい場合は
\footenote{\label{A}...},\endnote{\label{B} ... } のように
参照したい番号のなるべく直後に\labelを置く方がまちがいないと思います.

ということで,enotezへのちょろっとしたパッチと
\endnoteへの\labelを動かしたTeXソースを添付してみます.
たぶん,ご希望の形になっているんじゃないかと思います.


本田 知亮 への返信

Re: 脚注や後注へのリンク

- Toshio Otaguro の投稿
本田様,
素晴らしいご教示をいただき大変ありがとうございました.ご提示のソースから PDF を生成し,当方の希望通りになっていることを確認できました.やはりここで訊いて良かったと思います.

ご指摘の通り,\endnote{} の中に label を置く場合は \endnote{ の直後に置くのが良いことは気づいておりました.Acrobat Reader だと気づかないかもしれませんが,私は Ubuntu 上で Evince を使って PDF を読んでおり,その場合はリンク上にマウスをホヴァーするだけでリンク先の画像がポップアップするので便利です.するとリンク先がおかしいことにすぐに気づきます.長い注を書く場合は label を置く場所には注意を払いたいと思います.

私は TeX 歴は長い(1983年にTeX78から使い始めた)のですが,TeXのプログラミングには全く疎く,自分で改造することはできません.今回は良いパッチをいただき大変感謝しております.ただ,すでに postnote に乗り換えてしまいましたので,別の機会に活用したいと思います.この postnote は新しい書き方でマクロが書かれており,私には呪文にしか見えませんが.
Toshio Otaguro への返信

Re: 脚注や後注へのリンク

- 本田 知亮 の投稿
お役に立てたようでよかったです.
最近hyperrefによく悩まされるので,
hyperref関係があるとつい考え込んでしまいます
#PDFの仕様書までみないとtexdoc hyperreでfのマニュアルの意味がわからないのは私だけ?

>これはとても怖い上に,外側だからこそリンクが後注本体ではなく,

語弊というか,ほぼ間違えです.
内部の\refstepcounterのところがリンクのターゲットなんですが,
それが\endnoteの記述箇所に設定されてしまい,
注の出力箇所ではないんです.
#書いててややこしい・・・orz

まじめに手を入れるなら,注の出力の際に\refstepcounterでカウントアップして
リンク関係はまるっとhyperrefとLaTeX kernelに丸投げするのがよいのかなと思います.
今回みたいに自前でhyperrefからコードをとってくるのは
hyperrefやkernelが大改造されたら破綻しますし,
破綻の経験ないわけではないです(苦笑)
本田 知亮 への返信

Re: 脚注や後注へのリンク

- Toshio Otaguro の投稿
本田様,
TeX の標準出力が PDF になって早や月日は流れ,GhostScript で喜んでいた時代は遠く過ぎ去ってしまいました.これからも hyperref の重要性が増すことはあっても減ることは無いでしょう.そういう意味では hyperref とその周辺にはこれからも振り回される気がします.

もう20年ほど前ですが,ビル・クリントンの不倫報告書がリンク張りまくりのハイパーテキストで公開されたときは驚愕しました.アメリカ政府の公式文書ですよ!当時ブラウザはまだ Netscape でした.しかしハイパーリンクの威力を知ってしまうと,それに付き合わざるを得ないのは自明の理だと感じました.いえ,これは年寄りの昔話です.