lineno.sty の pagewise オプションと xr.sty の併用について

lineno.sty の pagewise オプションと xr.sty の併用について

- Masatoshi TSUCHIYA の投稿
返信数: 18
査読に対する回答書を作成する場合,

ご指摘にしたがって 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 の展開順序を変更すれば済むはず…と思いたいのですが,これがなかなかうまく行かずに困っています.

お知恵を拝借できないでしょうか.

Masatoshi TSUCHIYA への返信

Re: lineno.sty の pagewise オプションと xr.sty の併用について

- 和田 勇 の投稿
  • 質問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}
     
和田 勇 への返信

Re: lineno.sty の pagewise オプションと xr.sty の併用について

- Masatoshi TSUCHIYA の投稿
コメントありがとうございます.ただ,教えていただいたようにしても,pagewise に行数をカウントしてくれないようです.

==== paper2.tex ここから ====
\documentclass{jsarticle}
\setlength{\textheight}{2cm}
\usepackage{lineno}
\begin{document}
\pagewiselinenumbers
象の卵A\\
象の卵B\\
象の卵C\\
象の卵D\\
象の卵E\\
象の卵F\\
象の卵G\\
査読者に対する反応部分\linelabel{response}
\end{document}
==== paper2.tex ここまで ====

を処理すると,査読者に対する反応部分は p.3 の2行目になるはずです.しかし,

==== answer2.tex ここから ====
\documentclass{jsarticle}
\usepackage{xr}
\usepackage[pagewise]{lineno}
\externaldocument{paper2}
\begin{document}
\nolinenumbers
査読者に対する反応は p.~\pageref{response}, l.~\lineref{response} に記載されている.
\end{document}
==== answer2.tex ここまで ====

を処理すると「p.3, l.8 に記載されている」という結果になり,行番号は相変わらず,runninglinenumber mode(ページまたぎで行番号付与)でカウントされているように見えます.
Masatoshi TSUCHIYA への返信

Re: lineno.sty の pagewise オプションと xr.sty の併用について

- 和田 勇 の投稿

ううむ査読対象の原文に \\ があるケースは考えていなかった。 :-(

以下のようにすると、ご希望に少し近づくようです。

         @@ -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}
和田 勇 への返信

Re: lineno.sty の pagewise オプションと xr.sty の併用について

- Masatoshi TSUCHIYA の投稿
原文に \\ があることは本質的ではないと思います.あと,原文に \newpage を入れて原文を改変することは,今回の目的(査読回答の作成)から不可能です.

もう少し長いサンプル文書を用意しました.\lineref が2回出現していますが,どちらも running line number mode になってしまっています.

== paper3.tex ここから ==
\documentclass{jsarticle}
\setlength{\textheight}{8cm}
\setlength{\textwidth}{8cm}
\usepackage{lineno}
\title{象の卵の料理法}
\author{象卵 研究家}
\begin{document}
\maketitle
\pagewiselinenumbers

\section{序論}
本論文では,象の卵の最適な料理法について検討する.

\section{方法}
以下の3種類の料理法について検討し,筆者の試食により優劣をつける.
\begin{enumerate}
\item ゆで卵
\item 目玉焼き
\item スクランブルエッグ
\end{enumerate}
なお,象の卵以外の材料による影響を避けるため,卵かけご飯については検討しなかった.\linelabel{tamagokake}

\section{結論}
試食の結果,象の卵の最適な料理法は,ゆで卵だった.

今後の課題としては,鯨の卵の最適な料理法について検討が必要である.\linelabel{kujira}

\end{document}
== paper3.tex ここまで ==

== answer3.tex ここから ==
\documentclass{jsarticle}
\usepackage{ascmac}
\usepackage{xr}
\usepackage[pagewise]{lineno}
\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}
== answer3.tex ここまで ==
Masatoshi TSUCHIYA への返信

Re: lineno.sty の pagewise オプションと xr.sty の併用について

- 和田 勇 の投稿
  • 進捗は思わしくありません :-(

    • 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

和田 勇 への返信

Re: lineno.sty の pagewise オプションと xr.sty の併用について

- Masatoshi TSUCHIYA の投稿
以下のように \WriteLineNo を上書きしてやると,

==== paper4.tex ここから ====
\documentclass{jsarticle}
\setlength{\textheight}{8cm}
\setlength{\textwidth}{8cm}
\usepackage{lineno}
\makeatletter
\def\WriteLineNo{%
\edef\@LN@current{\the\c@pagewiselinenumber}
\unvbox\@cclv
\expandafter \@LN@xnext \@LN@labellist \@@
\@LN@label \@LN@labellist
\protected@write\@auxout{}{\string\newlabel{\@LN@label}%
{{\@LN@current}{\thepage}\@LN@ExtraLabelItems}}%
}
\makeatother
\title{象の卵の料理法}
\author{象卵 研究家}
\begin{document}
\maketitle
\pagewiselinenumbers

\section{序論}
本論文では,象の卵の最適な料理法について検討する.

\section{方法}
以下の3種類の料理法について検討し,筆者の試食により優劣をつける.
\begin{enumerate}
\item ゆで卵
\item 目玉焼き
\item スクランブルエッグ
\end{enumerate}
なお,象の卵以外の材料による影響を避けるため,卵かけご飯については検討しなかった.\linelabel{tamagokake}

\section{結論}
試食の結果,象の卵の最適な料理法は,ゆで卵だった.

今後の課題としては,鯨の卵の最適な料理法について検討が必要である.\linelabel{kujira}

\end{document}
==== paper4.tex ここまで ====

==== paper4.aux 抜粋ここから ====
\newlabel{tamagokake}{{10}{2}}
==== paper4.aux 抜粋ここまで ====

というように,従来は

\newlabel{tamagokake}{{\getpagewiselinenumber {10}}{2}}

と \getpagewiselinenumber を使っていたものが,その場で展開された値で出力できそうなのですが.

ただ問題なのは \c@pagewiselinenumber を使っている(\c@runnninglinenumber ではなく!)にも関わらず,なぜかページまたぎの値が出力されてしまうところなんですよね…

Masatoshi TSUCHIYA への返信

Re: lineno.sty の pagewise オプションと xr.sty の併用について

- はやて (h20y6m) の投稿

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}
はやて (h20y6m) への返信

Re: lineno.sty の pagewise オプションと xr.sty の併用について

- 和田 勇 の投稿
  • papar.tex 内であれば \lineref{...} は希望通りの値を算出してくれるので 代替案

    1. paper.tex answer.tex を併合
    2. xr (externaldocument) でなく docmute (input) を利用(こちらで検証済み)
  • paper.tex で \lineref{..} が希望通りになるので、はやて さんの方法をどこで実現しているかもうしばらく検討してみます

和田 勇 への返信

Re: lineno.sty の pagewise オプションと xr.sty の併用について

- Masatoshi TSUCHIYA の投稿
> paper.tex answer.tex を併合

これ,当方も一瞬検討したのですが,本物の論文は two-column で回答書は single-column であること,必要なパッケージ類がかなり異なっているので,もともとの paper.tex に悪影響を与えずに同一ファイルに収められるか確信が持てなかったこと,の2点から断念しました.

> paper.tex で \lineref{..} が希望通りになるので、はやて さんの方法をどこで実現しているかもうしばらく検討してみます

そうなんですよね… lineno.sty の実現方法がいまいちわからなくて,\@LN{} マクロが内部的に何をやっているのか,うまく追跡できないんですよねえ…

最後の手段と思って,linelabel マクロの中で一旦行番号を退避しておいて,WriteLineNo マクロの中で呼び出すという実装を試してみたのですが,なぜかこれでもエラーになる‥‥なんでだ.

==== ここから ====
\makeatletter
\let\my@linelabel\linelabel
\renewcommand\linelabel{%
\edef\my@currentlinenumber{\getpagewiselinenumber{\the\c@pagewiselinenumber}}
\my@linelabel
}
\def\WriteLineNo{%
\unvbox\@cclv
\expandafter \@LN@xnext \@LN@labellist \@@
\@LN@label \@LN@labellist
\protected@write\@auxout{}{\string\newlabel{\@LN@label}%
{{\my@currentlinenumber}{\thepage}\@LN@ExtraLabelItems}}%
}
\makeatother
==== ここまで ====
Masatoshi TSUCHIYA への返信

Re: lineno.sty の pagewise オプションと xr.sty の併用について

- はやて (h20y6m) の投稿

\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
はやて (h20y6m) への返信

Re: lineno.sty の pagewise オプションと xr.sty の併用について

- Masatoshi TSUCHIYA の投稿
あー,なるほど.\testNumberedPage がキモなんだ.

pagewise line number mode の場合は,\c@linenumber を参照する前に \testNumberedPage を呼び出しておく必要があるということなんですね.

以下のようにすると,pagewise line number mode の場合も running line number mode の場合も正常に動くようです.

==== paper4.tex ここから ====
\documentclass[twocolumn]{jsarticle}
\setlength{\textheight}{9cm}
\usepackage{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}
なお,象の卵以外の材料による影響を避けるため,卵かけご飯については検討しなかった.

\section{結論}
試食の結果,象の卵の最適な料理法は,ゆで卵だった.

\linelabel{kujira}
今後の課題としては,鯨の卵の最適な料理法について検討が必要である.

\end{document}
==== paper4.tex ここまで ====

==== answer4.tex ここから ====
\documentclass{jsarticle}
\usepackage{ascmac}
\usepackage{xr}
\externaldocument{paper4}
\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} に理由を明記しました.

\end{document}
==== answer4.tex ここまで ====

皆様,ご助力ありがとうございました.
Masatoshi TSUCHIYA への返信

Re: lineno.sty の pagewise オプションと xr.sty の併用について

- 匿 名 の投稿
こちらのスレッドを拝見して,便利に使わせていただきました.ありがとうございました.

ただ,私が投稿した論文誌では二段組みの左右でそれぞれ行番号を振る必要があり,かつ,図表の存在によって行番号がずれていることがよくあります(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 ここまで ====

匿 名 への返信

Re: lineno.sty の pagewise オプションと xr.sty の併用について

- 和田 勇 の投稿

段の左右の記入も自動化

これが今回の質問の趣旨かしら?

  • 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 スクリプトは提供できる準備はできています。

和田 勇 への返信

Re: lineno.sty の pagewise オプションと xr.sty の併用について

- 匿 名 の投稿
和田様

早速のご返信,ありがとうございます.
仰るとおり,段の左右の記入も自動化したいと考えております.

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を書き替えるのは手間なので)
匿 名 への返信

Re: lineno.sty の pagewise オプションと xr.sty の併用について

- 和田 勇 の投稿

.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 を添付します

和田 勇 への返信

Re: lineno.sty の pagewise オプションと xr.sty の併用について

- 匿 名 の投稿
和田様

M1 Mac環境でしか確認しておりませんが,問題なく動作いたしました.
望み通りどころか,望外の素晴らしい方策をご検討いただき,誠にありがとうございます.
(正直に申し上げて「columnside:」付けるのはちょっと面倒そうだなと思ったのですが,それを見通されていたかのような使いやすいマクロまでご提示くださり,ありがとうございます)

> - 課題 figure 環境はフロートなので BoiledEgg は場所が特定できないようで間違ってる
(少なくとも私の)実用上,図表は段落の左右を書く必要がないので,特に問題にはならないように思っております.


これから大いに活用させていただきます!ありがとうございました.
(無条件採択に越したことはないのですが^^;)
匿 名 への返信

Re: lineno.sty の pagewise オプションと xr.sty の併用について

- 和田 勇 の投稿

気になっていたので、無理やり(かな?)課題を解消& .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}}}%