.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!)

  • 올바른 상호 참조를 얻으려면 두 번 컴파일하는 것을 잊지 마세요!
  • 카운터 를 조작하지 마세요 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}

관련 정보