.log または .aux ファイル内の \ref コマンドの「正確な」ページを取得します。

.log または .aux ファイル内の \ref コマンドの「正確な」ページを取得します。

elispフロートが最初に参照されるページの前にフロートが出現したときに警告するスクリプトを記述する必要があります。.auxファイルから、フロートのラベル、番号、ページ番号を抽出できます。ただし、各コマンドが配置されている正確なページを取得する必要があります\ref。試したのは次のとおりです。

\AtBeginDocument{\hypersetup{pageanchor=false}
\let\oldref\ref
\renewcommand{\ref}[1]{{\oldref{#1}\typeout{RefsPagesInLog --> {#1} \thepage}}}

たとえば、ファイル\ref{fig:2}では次のように.tex出力されます:

RefsPagesInLog --> {fig:2} 29

ログ ファイルに出力されます。ほとんど動作しますが、失敗することもあります。ごくまれに、ログ ファイルに間違ったページ番号が出力され、スクリプトが失敗します。

同じ目標を達成するためのコツはありますか?

必要なデータは、ラベル\refが参照するものと、参照が表示される「正確な」ページです。

答え1

これは書きます

\ref@page{<key>}{<page>}

ドキュメント内にある.aux各コマンドのファイル内。\ref{<key>}

この例では、

\ref@page{somefigure}{4}

外部スクリプトで読み取ることができます。

\documentclass{article}

\usepackage{blindtext}

\usepackage{etoolbox}    
\usepackage{hyperref}

\makeatletter
\AtBeginDocument{%
  \renewcommand{\NR@setref}[1]{%
    \ref@page@write{#1}%
    \begingroup\@safe@activestrue\expandafter\endgroup
    \expandafter\NR@@setref\csname r@#1\endcsname
  }%
}
\newcommand{\ref@page@write}[1]{%
  \protected@write\@auxout{}{\string\ref@page{#1}{\thepage}}%
}
\newcommand{\ref@page}[2]{}
\makeatother

\begin{document}

\blindtext[10]

\clearpage

\ref{somefigure}

\section{First section}\label{firstsec}

\blindtext[50]


\begin{figure}
  \caption{Some figure}\label{somefigure}
\end{figure}

\blindtext[50]

\section{Second section}\label{secondsec}

\end{document}

答え2

これは、 の使用を\refラベルでラベル付けし (!) refusage:\therefusage、これが発生するページを で抽出します\getpagerefnumber(refcountパッケージに含まれていますが、hyperrefとにかく によってロードされます!)

  • 相互参照を正しくするために、必ず 2 回コンパイルしてください。
  • カウンターを操作しないでくださいrefusage!

\documentclass{article}

\usepackage{etoolbox}    
\usepackage{hyperref}

\newcounter{refusage}

\AtBeginDocument{\hypersetup{pageanchor=false}
\let\oldref\ref
\renewcommand{\ref}[1]{{\refstepcounter{refusage}\label{refusage:\therefusage}\oldref{#1}\typeout{RefsPagesInLog --> {#1} \getpagerefnumber{refusage:\therefusage}}}}
\robustify\ref
}

\usepackage{blindtext}

\begin{document}

\blindtext[10]

\clearpage

\ref{somefigure}

\section{First section}\label{firstsec}

\blindtext[50]


\begin{figure}
  \caption{Some figure}\label{somefigure}
\end{figure}

\blindtext[50]


\section{Second section}\label{secondsec}




\end{document}

関連情報