査読に対する回答書を作成する場合,
ご指摘にしたがって p.5, l.10 に以下のように改訂しました。
のように記載することが良くありますが,このページ数と行番号を手動で入力することは大変です.
これを自動化するために lineno.sty と xr.sty が併用できないかと考えました.まず,論文原稿ファイル paper.tex 側では,
==== paper.tex ここから ====
\documentclass{jsarticle}
\usepackage{lineno}
\begin{document}
\linenumbers
もともとの原稿
\clearpage
査読者に対する反応部分\linelabel{response}
\end{document}
==== paper.tex ここまで ====
のように記載しておきます.これで paper.tex をタイプセットすると,paper.aux に以下のようなラベルが登録されます.
==== paper.aux 抜粋ここから ====
\newlabel{response}{{2}{2}}
==== paper.aux 抜粋ここまで ====
次に,回答書原稿ファイル answer.tex 側では,
==== answer.tex ここから ====
\documentclass{jsarticle}
\usepackage{xr}
\externaldocument{paper}
\begin{document}
査読者に対する反応は p.~\pageref{response}, l.~\ref{response} に記載されている.
\end{document}
==== answer.tex ここまで ====
というように記載します.すると,paper.aux に登録されていたラベルを参照して,
==== answer.tex 結果ここから ====
査読者に対する反応は p.2, l.2 に記載されている.
==== answer.tex 結果ここまで ====
というように処理されて,万々歳‥‥と思ったのですが.
ここからが,困っている本題です.まず,lineno.sty を上記のままで使うと,行番号がページをまたいで通し番号になってしまいます.本当なら,ページ毎に行番号をリセットして,
==== answer.tex 望ましい結果ここから ====
査読者に対する反応は p.2, l.1 に記載されている.
==== answer.tex 望ましい結果ここまで ====
と処理されてほしいわけです.なので,まず lineno.sty に pagewise オプションを加えます.
==== うまく動かない paper.tex ここから ====
\documentclass{jsarticle}
\usepackage[pagewise]{lineno}
\begin{document}
\linenumbers
もともとの原稿
\clearpage
査読者に対する反応部分\linelabel{response}
\end{document}
==== うまく動かない paper.tex ここまで ====
すると,paper.aux の内容が以下のように変化します.
==== うまく動かない paper.aux 抜粋ここから ====
\newlabel{response}{{\getpagewiselinenumber {1}}{2}}
==== うまく動かない paper.aux 抜粋ここまで ====
当然,これを answer.tex 側で読み込んでも \getpagewiselinenumber なんてマクロは定義されていないので,エラーになります.
つまり,paper.tex 側で \getpagewiselinenumber を展開しておいてから,aux ファイルに書き込むことができれば解決できそうなのですが…
該当箇所は lineno.sty の以下の部分で,
\def\WriteLineNo{%
\unvbox\@cclv
\expandafter \@LN@xnext \@LN@labellist \@@
\@LN@label \@LN@labellist
\protected@write\@auxout{}{\string\newlabel{\@LN@label}%
{{\theLineNumber}{\thepage}\@LN@ExtraLabelItems}}%
}
おそらく \theLineNumber の展開順序を変更すれば済むはず…と思いたいのですが,これがなかなかうまく行かずに困っています.
お知恵を拝借できないでしょうか.