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

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

- 和田 勇 の投稿
返信数: 1

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

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

- 匿 名 の投稿

便利に使わせていただいておりましたが,右段と出力してほしい状況で左段と表示されるケースがあり,ChatGPT5.2に相談したところ解決したと思いますので,シェアします.
(修正内容(に限らず本スレッドで議論されている内容全般)を理解しておりませんので,不適切な修正となっているかもしれません)


修正前

\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}}%
}
\def\WriteColumnSideInfo#1{%
  \if@firstcolumn \def\left@right{左}%
  \else           \def\left@right{右}%
  \fi%
  % \immediate\write\@auxout{\string\newlabel{columnside:#1}{{\left@right}{\left@right}}}%
  \protected@write\@auxout{}{\string\newlabel{columnside:#1}{{\left@right}{\left@right}}}%
}
\newcommand{\LINELABEL}[1]{\linelabel{#1}\WriteColumnSideInfo{#1}}
\newcommand{\LABEL}    [1]{    \label{#1}\WriteColumnSideInfo{#1}}
\makeatother

修正後

\makeatletter
\def\WriteLineNo{%
  \ifx\theLineNumber\thePagewiseLineNumber
    \testNumberedPage
  \fi
  \unvbox\@cclv
  \expandafter \@LN@xnext \@LN@labellist \@@
  \@LN@label \@LN@labellist
  % 左右段の判定は,ここ(出力ルーチン内)でのみ信頼できる
  \if@firstcolumn \def\left@right{左}%
  \else           \def\left@right{右}%
  \fi
  \immediate\write\@auxout{%
    \string\newlabel{columnside:\@LN@label}{{\left@right}{\left@right}}%
  }%
  \immediate\write\@auxout{%
    \string\newlabel{\@LN@label}{{\the\c@linenumber}{\thepage}\@LN@ExtraLabelItems}%
  }%
}
\newcommand{\LINELABEL}[1]{\linelabel{#1}}
\newcommand{\LABEL}[1]{\label{#1}}
\makeatother


修正前後のコードを含むtex(修正後をコメントアウト)ファイル,これをコンパイルしたときのaux, pdfを添付しています.