#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の許可が必要です