#64の2のためにちょっと手を入れた.これがよいのかは悩むのだがとりあえずということで.2d4eef4を使うと,Issueにあるソースで\footnote
のリンクが消える.きちんと動かすためには,プリアンブルに次のコードを入れればよい.
\makeatletter
\renewcommand{\footnote}{\jlreq@footnote{\footnote}{\myfootnotemark}{\myfootnotetext}}
\newcounter{mycounter}
\newcommand{\myfootnotemark}[1][]{%
\setcounter{mycounter}{\value{footnote}}%
\setcounter{footnote}{\numexpr #1 - 1\relax}%
\footnotemark
\let\mysavedHref\Hy@footnote@currentHref
\setcounter{footnote}{\value{mycounter}}%
}
\newcommand{\myfootnotetext}[2][]{%
\edef\jlreq@result{%
\unexpanded{\setcounter{mycounter}{\value{footnote}}}%
\unexpanded{\setcounter{footnote}{#1}}%
\unexpanded{\def\Hy@footnote@currentHref}{\expandonce{\mysavedHref}}%
\unexpanded{\footnotetext{#2}}%
\unexpanded{\setcounter{footnote}{\value{mycounter}}}%
}%
}
\makeatother
日本語組版処理の要件 4.2.6によれば,縦組みの傍注(pLaTeX等では\footnote
で出力される)は奇数ページに出力される.また,多段組では最下段に出力される.これを実現するために,\footnote
を\footnotemark
と\footnotetext
にわけて実行していた.つまり,ある偶数ページで\footnote
が実行されていて,その場所でのfootnote
カウンタの値が10だったとすると,\footnote
自身は\footnotemark
に置き換えられ,次ページの先頭にて\footnotetext[10]{傍注}
が実行される.
しかし,hyperrefパッケージはオプション付きの\footnotetext
等をサポートしない.そのため,\footnotemark
からのリンクは貼られるが(これはオプションなしなのでhyperrefが有効),リンク先の\footnotetext
へのリンクはなくなる.これが今まで失敗していた理由.
2d4eef4での変更点は以下の二つ.
\footnotemark
もオプション付きで呼び出すようにした.- 一連の処理をまとめた命令
\jlreq@footnote
を作り,\footnote
は原則としてこれを呼び出すだけとした.
前者の変更により,\footnotemark
でもhyperrefは無効になり,リンクそのものがはられなくなる.きちんとリンクをはらせるためにはユーザ自身が設定する必要があるが,これを可能にするための作りが二番目である.(内部)命令\jlreq@footnote
は次のように使う.
\jlreq@footnote{<commandA>}{<commandB>}{<commandC>}[<number>]{<text>}
最後二つの引数[<number>]{<text>}
は\footnote
の引数と同様である.\jlreq@footnote
は次のように動く.
- 横書きまたは縦書きで一段組かつ
twoside
オプション未指定の時(この場合上で述べたような傍注の遅延処理は行われない)は,{<commandA>}[<number>]{<text>}
の実行に置き換えられる. - そうでないときは,まずその場で
<commandB>[<number>]{<text>}
と<commandC>[<number>]{<text>}
がこの順に実行される.さらに,<commandC>
実行直後の\jlreq@result
マクロの中身を遅延実行(今まで\footnotetext
が実行されていた場所での実行)する.これら二つのマクロは必ずオプション付きで実行される.(必要ならばその場でのfootnoteカウンタの値がオプションとして渡される.) - これらの
<commandA>
,<commandB>
,<commandC>
および\jlreq@result
に入っている命令が実行される時は,\footnote
,\footnotemark
,\footnotetext
は(jlreqなどが改変したものではなく)LaTeXオリジナルのものとして実行される.
冒頭のマクロでは,<commandB>
で\footnotemark
の実行とその場でのリンク先(\Hy@footnote@currentHref
に入っている)の保存を行い,<commandC>
では,保存したリンク先の復帰と\footnotetext
の実行を\jlreq@result
に入れて終了する.なお,\jlreq@footnote
はfragile.
0 件のコメント:
コメントを投稿
コメントの追加にはサードパーティーCookieの許可が必要です