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}