のように記載することが良くありますが,このページ数と行番号を手動で入力することは大変です.ご指摘にしたがって p.5, l.10 に以下のように改訂しました。
質問1「行番号がページをまたいで通し番号」への回答
- 対処方法
- pagewise オプションを省き pagewiselinenumbers を使う
- cleaerpage 使うなら resetlinenumber した方が良いみたい(検証はあまりやっていないのですが)
- newpage した方が楽だった
- 対処方法
質問2「別ファイルでページ参照や行番号参照云々」への回答
- 別ファイルでも usepackage{lineno} する
- その際 pagewise オプションを使う
- 行番号情報を取り出すには lineref を使う(1行分多いので要補正)
参考ドキュメント .... texdoc lineno
- 検証したソース papaer.tex
\documentclass{jsarticle} \usepackage{lineno} %%% [pagewise] オプション削除 \begin{document} %\linenumbers \pagewiselinenumbers %%% linenumbers の代わり もともとの原稿 \newpage %%% clearpage しない場合 %%\resetlinenumber %%% clearpage する場合 %%\clearpage 査読者に対する反応部分\linelabel{response} \end{document}
- 検証したソース answer.tex
\documentclass{jsarticle} \usepackage{xr} \usepackage[pagewise]{lineno} %% getpagewiselinenumber を参照するため %% lineref を使う場合は pagewise 必要 \externaldocument{paper} \begin{document} \nolinenumbers 査読者に対する反応は p.~\pageref{response}, l.~\ref{response} に記載されている. linelabel で収録される行数は何故か 1 行多い値みたい texdoc lineno で表示される p.15 7.2 rlineno にちょっこっと書かれている のを参考に response の行番号を以下のようにして -1 してみた \lineref[-1]{response} \end{document}
ううむ査読対象の原文に \\ があるケースは考えていなかった。 :-(
以下のようにすると、ご希望に少し近づくようです。
@@ -3,6 +3,7 @@ \usepackage{lineno} \begin{document} \pagewiselinenumbers +\resetlinenumber%%%%%%%%%%%% これ入れないとダメみたい 象の卵A\\ 象の卵B\\ 象の卵C\\ @@ -10,5 +11,7 @@ 象の卵E\\ 象の卵F\\ 象の卵G\\ +\newpage%%%%%%%%%%%%%%%%%%%%% どちらでも良いみたい +%%\resetlinenumber\clearpage% どちらでも良いみたい 査読者に対する反応部分\linelabel{response} \end{document}
進捗は思わしくありません :-(
- lineref は aux のファイルから ページ情報をキーに行数を算出するみたいにしたいらしいが該当箇所見つからず。怪しいところはあるけど。
- lineref{kujira} などを中間ファイルに書き込もうと思ったけどうまくいっていない(技量不足 :-( )
インターネット検索すると全く同じ症状の質問を見つけました
- linelabel を label に変えたらという案があり、試してみましたが、行番号を正確には土地込めないようです。
typo 見つけて対処したら動いたというのがあるのですが修正方法は???
https://tex.stackexchange.com/questions/335523/cross-referencing-line-numbers-between-multiple-documents-with-the-pagewise-opti
Cross referencing line numbers between multiple documents with the pagewise option set
paper3.aux ファイルを見ると \@LN{10}{1}
のような行が書かれています。
これは通しの行番号とページ番号で、この情報をもとに \getpagewiselinenumber
がページ内の行番号を計算していると思われます。
answer3.tex ではこの \@LN
の情報がないのでページ内の行番号が計算できません。
一つの案としてかなり強引ですが answer3.tex で paper3.aux の \@LN
で始まる行を読み込んでしまうというのを考えてみました。
(ただし answer3.tex で \pagewiselinenumbers
を使うと壊れます)
\documentclass{jsarticle}
\usepackage{ascmac}
\usepackage{xr}
\usepackage[pagewise]{lineno}
%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
\makeatletter
\long\def\my@check@LN#1#2\my@check@LN@end{%
\ifx#1\@LN
\expandafter\@firstofone
\else
\expandafter\@gobble
\fi
}
\newread\my@aux@file
\openin\my@aux@file=paper3.aux
\ifeof\my@aux@file
\typeout{No paper3.aux file}%
\else
\loop\ifeof\my@aux@file\else
\read\my@aux@file to\my@aux@line
\expandafter\my@check@LN\my@aux@line\my@check@LN@end{%
\my@aux@line
}%
\repeat
\fi
\makeatother
%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
\externaldocument{paper3}
\begin{document}
\nolinenumbers
査読者の方へ:
このたびは,論文を査読していただき,ありがとうございます.
ご照会のあった点について以下のように回答させていただきます.
\begin{screen}
(1) 料理法として,卵かけご飯について検討しなかった理由を明記してください.
\end{screen}
\noindent
{\bfseries 回答}
ご指摘に従って,p.~\pageref{tamagokake}, l.~\lineref{tamagokake} に理由を明記しました.
\begin{screen}
(2) 鯨の卵の料理法について検討しなかった理由を明記してください.
\end{screen}
\noindent
{\bfseries 回答}
鯨の卵については将来的な課題であると思いますので,p.~\pageref{kujira}, l.~\lineref{kujira} にその旨を明記しました.
\end{document}
\getpagewiselinenumber
は中で代入等を行っているので edef では展開できませんね…。
定義を見ると、
\c@linenumber #1\relax\testNumberedPage
\thelinenumber
一行目は通しの行番号からページの行番号を求める処理で展開できませんが、 二行目の番号を出力する部分は展開できます。
一行目を実行して行番号を求めた後 \thelinenumber
を展開した結果を保存すればできそうです。
\makeatletter
\def\my@getpagewiselinenumber#1{{%
\c@linenumber #1\relax\testNumberedPage
\global\edef\my@pagewiselinenumber{\thelinenumber}%
}}
\def\WriteLineNo{%
\my@getpagewiselinenumber{\the\c@linenumber}%
\unvbox\@cclv
\expandafter \@LN@xnext \@LN@labellist \@@
\@LN@label \@LN@labellist
\protected@write\@auxout{}{\string\newlabel{\@LN@label}%
{{\my@pagewiselinenumber}{\thepage}\@LN@ExtraLabelItems}}%
}
\makeatother
ただ,私が投稿した論文誌では二段組みの左右でそれぞれ行番号を振る必要があり,かつ,図表の存在によって行番号がずれていることがよくあります(paper5.pdf参照).
また,回答には「p. 1, 左段 l. 10」や「p. 1, 右段 l. 4 」といったように左右どちらの段なのかを記入する必要があります(answer5.pdf参照).
とりあえずはanswer5.texのように手作業で左右を記入しましたが,追記した分量などによって,左右の位置がずれることがしばしばあります.
段の左右の記入も自動化できれば幸せだと考え,本スレッドを読みつつlinenoのマニュアルも眺めてみましたが,手も足も出ません.
皆様のお知恵を拝借出来ればと考えております.
添付ファイルはpaper5.texとanswer5.texおよびそれらをコンパイルしたPDFを固めたものです.
環境はiMac (Retina 5K, 27-inch, Late 2014),macOS Big Sur,MacTeX(TeX Live2020)です.
==== paper5.tex ここから ====
\documentclass[twocolumn,uplatex]{jsarticle}
\setlength{\textheight}{14cm}
% \usepackage{lineno}
\usepackage[columnwise,switch*]{lineno}
\makeatletter
\def\WriteLineNo{%
\ifx\theLineNumber\thePagewiseLineNumber
\testNumberedPage
\fi
\unvbox\@cclv
\expandafter \@LN@xnext \@LN@labellist \@@
\@LN@label \@LN@labellist
\protected@write\@auxout{}{\string\newlabel{\@LN@label}%
{{\the\c@linenumber}{\thepage}\@LN@ExtraLabelItems}}%
}
\makeatother
\title{象の卵の料理法}
\author{象卵 研究家}
\begin{document}
\maketitle
\switchlinenumbers
% \pagewiselinenumbers
\linenumbers
\section{序論}
本論文では,象の卵の最適な料理法について検討する.
\section{方法}
以下の3種類の料理法について検討し,筆者の試食により優劣をつける.
\begin{enumerate}
\item ゆで卵
\item 目玉焼き
\item スクランブルエッグ
\end{enumerate}
\linelabel{tamagokake}
なお,象の卵以外の材料による影響を避けるため,卵かけご飯については検討しなかった.
\begin{figure}[tb]
\centering
ゆで卵はおいしい象
\caption{ゆで卵}
\label{BoiledEgg}
\end{figure} % "figure*" refers multicolumn figure environment
\section{結論}
試食の結果,象の卵の最適な料理法は,ゆで卵だった.
\linelabel{kujira}
今後の課題としては,鯨の卵の最適な料理法について検討が必要である.
\end{document}
==== paper5.tex ここまで ====
==== answer5.tex ここから ====
\documentclass[uplatex]{jsarticle}
\usepackage{ascmac}
\usepackage{xr}
\externaldocument{paper5}
\begin{document}
査読者の方へ:
このたびは,論文を査読していただき,ありがとうございます.
ご照会のあった点について以下のように回答させていただきます.
\begin{screen}
(1) 料理法として,卵かけご飯について検討しなかった理由を明記してください.
\end{screen}
\noindent
{\bfseries 回答}
ご指摘に従って,p.~\pageref{tamagokake}, 左段l.~\ref{tamagokake} に理由を明記しました.
\begin{screen}
(2) 鯨の卵の料理法について検討しなかった理由を明記してください.
\end{screen}
\noindent
{\bfseries 回答}
ご指摘に従って,p.~\pageref{kujira},右段 l.~\ref{kujira} に理由を明記しました.
\begin{screen}
(3) 茹で具合はゆで卵の美味しさの重要な要素だと思いますので,試食で用いたゆで卵の画像を追加してください.
\end{screen}
\noindent
{\bfseries 回答}
ご指摘に従って,p.~\pageref{BoiledEgg},図~\ref{BoiledEgg} に画像を追加しました.
\end{document}
==== answer5.tex ここまで ====
段の左右の記入も自動化
これが今回の質問の趣旨かしら?
paper5.aux を観察すると「newlabel」の記録する前に「@LN@col」が以下のように記録されています。
\@LN@col{1} ←左段のようだ \newlabel{tamagokake}{{2}{1}} \@LN@col{2} ←右段のようだ \newlabel{BoiledEgg}{{1}{1}} \newlabel{kujira}{{15}{1}} 上記の推察根拠は、ラベルやページを増やしても2段組なので 1 か 2 しか出ないので。
これを取り出して answer5.tex に「左段」「右段」の部分を 「\左右段{rabrラベル名}」 のような aux ファイルの情報を取り込むマクロを書かなければならないと思います。ただいま、考え中です。
上記のような対応が NG であれば answer5.tex を書き換える perl スクリプトは提供できる準備はできています。
早速のご返信,ありがとうございます.
仰るとおり,段の左右の記入も自動化したいと考えております.
http://mirrors.ctan.org/macros/latex/contrib/lineno/lineno.pdf
内で「\@LN@col」を検索すると,
5.4 Twocolumn mode (New v3.06)
に「\string\@LN@col{\if@firstcolumn1\else2\fi}%」とありましたので,ご賢察通りと思います.
> これを取り出して answer5.tex に「左段」「右段」の部分を 「\左右段{rabrラベル名}」 のような aux ファイルの情報を取り込むマクロを書かなければならないと思います。ただいま、考え中です。
はい,このような機能が欲しいと思っております.
(修正の度に都度,perlを走らせてanswer5.texを書き替えるのは手間なので)
.aux ファイルに各ラベルの左段・右段を追加登録することにしました
以下のような情報が .aux ファイルに書き込まれます
\newlabel{columnside:tamagokake}{{左}{左}} \newlabel{columnside:BoiledEgg}{{左}{左}} \newlabel{columnside:kujira}{{右}{右}}
- 課題 figure 環境はフロートなので BoiledEgg は場所が特定できないようで間違ってる
paper5.tex で linelabel label の定義カスタマイズ
\def\WriteColumnSideInfo#1{% \if@firstcolumn \def\left@right{左}% \else \def\left@right{右}% \fi% \immediate\write\@auxout{\string\newlabel{columnside:#1}{{\left@right}{\left@right}}}% } \newcommand{\LINELABEL}[1]{\linelabel{#1}\WriteColumnSideInfo{#1}} \newcommand{\LABEL} [1]{ \label{#1}\WriteColumnSideInfo{#1}}
paper5.tex で linelabel label の利用方法を以下のように変更(大文字化しただけ)
-\linelabel{tamagokake} +\LINELABEL{tamagokake}
answer5.tex で以下のように pageref あるいは ref で columnside:ラベル で左段、右段情報を参照する
ご指摘に従って,p.~\pageref{tamagokake}, \pageref{columnside:tamagokake}段l.~\ref{tamagokake} に理由を明記しました. ご指摘に従って,p.~\pageref{tamagokake}, \ref{columnside:tamagokake}段l.~\ref{tamagokake} に理由を明記しました.
お節介ですが 「\改定理由参照情報{tamagokake}」のように使えるマクロです
\newcommand\改定理由参照情報[1]{% ご指摘に従って,p.~\pageref{#1}, \ref{columnside:#1}段l.~\ref{#1} に理由を明記しました. }
念の為、検証に使用したソースと paper5.aux を添付します
M1 Mac環境でしか確認しておりませんが,問題なく動作いたしました.
望み通りどころか,望外の素晴らしい方策をご検討いただき,誠にありがとうございます.
(正直に申し上げて「columnside:」付けるのはちょっと面倒そうだなと思ったのですが,それを見通されていたかのような使いやすいマクロまでご提示くださり,ありがとうございます)
> - 課題 figure 環境はフロートなので BoiledEgg は場所が特定できないようで間違ってる
(少なくとも私の)実用上,図表は段落の左右を書く必要がないので,特に問題にはならないように思っております.
これから大いに活用させていただきます!ありがとうございました.
(無条件採択に越したことはないのですが^^;)
気になっていたので、無理やり(かな?)課題を解消& .aux への書き込みが lineno とタイミングが合っていなかったので ....
>- 課題 figure 環境はフロートなので BoiledEgg は場所が特定できないようで間違ってる
対処案
- プリアンブルに \usepackage{needspace} を追加
- フロートなオブジェクトの直前で、そのオブジェクトがそのページに治るかおおよその高さをチェックし無ければ\newpage 発行しフロート状態を解消
具体例 ... 5行位の図の場合
+\needspace{5\baselineskip} % 5行分の余白がなければ改ページ(段) \begin{figure}[tb] .... \end{figure}
.aux に書き込むタイミングを lineno と同じにした方が良いと思うので \immediate でなく \protected@write にした方が見た目にも良い
- \immediate\@auxout{\string\newlabel{columnside:#1}{{\left@right}{\left@right}}}% + \protected@write\@auxout{}{\string\newlabel{columnside:#1}{{\left@right}{\left@right}}}%