페이지의 첫 번째 단락에서 올바른 페이지 번호를 얻는 방법은 무엇입니까?

페이지의 첫 번째 단락에서 올바른 페이지 번호를 얻는 방법은 무엇입니까?

\figref나는 레이블이 있는 그림을 참조하고 그림이 참조되는 동일한 페이지에 있지 않는 한 그림이 있는 페이지 번호를 제공하도록 명령을 정의했습니다 (이 경우 페이지를 제공하는 데 큰 의미가 없습니다). 숫자). 이것이 맥락입니다.

명령은 작동하지만 사용 중에 페이지의 첫 번째 단락에서 카운터가 올바르지 않다는 것을 발견했습니다 \thepage(단락의 시작이 페이지 나누기와 일치하지 않는 한). 이 경우 내 명령은 더 이상 작동하지 않습니다.

사용 \thepage시 카운터를 "업데이트" 할 수 있나요 ?\figref

다음은 예시입니다.

여기에 이미지 설명을 입력하세요

여기서는 \figref페이지의 첫 번째 단락에서 명령이 사용됩니다. 3페이지에 있는 동안 은 \thepage1페이지에 있음을 나타냅니다. 결과적으로 는 그림이 \figref같은 페이지에 있을 때 그림의 페이지 번호를 나타내기 때문에(그렇지 않아야 함) 제대로 작동하지 않습니다.

정상적으로 작동 하는 예 \figref:

여기에 이미지 설명을 입력하세요

MWE는 다음과 같습니다.

\documentclass{article}
\usepackage{refcount, graphicx, mwe, xcolor}

\newcommand{\figref}[1]{\ifnum\getpagerefnumber{#1}=\thepage%
        \textcolor{red}{(Fig.~\ref{#1})}%
    \else%
        \textcolor{red}{(Fig.~\ref{#1}, p.~\pageref{#1})}%
    \fi}

\begin{document}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sit amet eleifend quam, id tincidunt ex. Maecenas lacinia varius dignissim. Phasellus et tortor turpis. Morbi leo nibh, pharetra sit amet tempor non, tristique vel nisi. Duis efficitur at massa sagittis auctor. Morbi consequat ultrices sapien eget luctus. Nam mauris quam, pharetra eget lacus et, ullamcorper maximus elit. Sed ullamcorper, justo sed blandit finibus, turpis est pretium metus, eget luctus dui lectus sit amet nulla. Integer ac ante a enim varius congue sit amet id risus. Nunc non ante arcu. Nam consequat, odio faucibus pharetra fringilla, arcu mauris finibus quam, id tristique neque lacus vitae justo. Duis molestie, mi eu pellentesque consectetur, odio quam consequat tortor, id pulvinar dui urna ac eros. Donec ut mattis urna, in faucibus sapien. Pellentesque placerat ex nec sapien venenatis, non mattis dolor porttitor. Phasellus in eros non ligula pulvinar malesuada non ut nibh. Etiam sed ex et nibh dapibus luctus. Nullam pharetra ligula eu finibus dictum. Praesent dapibus auctor egestas. Aenean sed laoreet leo, in posuere justo. Ut congue porta quam et finibus. Fusce pharetra mattis nunc at ultricies. Sed hendrerit, orci eget ultrices eleifend, nisl quam eleifend mauris, at varius est elit nec libero. Phasellus iaculis, magna aliquam lobortis porttitor, sapien libero convallis purus, sed fermentum neque risus id sem. Vivamus et vulputate magna. Donec maximus nibh nec rhoncus feugiat. Sed id justo orci. Sed nibh nulla, euismod sit amet maximus in, facilisis id quam. Pellentesque non ex porta, consectetur erat sed, iaculis tellus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Sed et ipsum nunc. Aliquam aliquet sit amet tellus venenatis volutpat. Nam ullamcorper justo vel lectus sodales porttitor. Suspendisse sed tellus suscipit, lacinia quam ut, efficitur diam. Duis congue tellus ante, et mattis urna hendrerit et. Phasellus ullamcorper eros ultrices ullamcorper condimentum. Nam non dui felis. Sed faucibus mi vitae sollicitudin fringilla. Nullam pulvinar venenatis neque, vitae faucibus odio cursus et. Duis commodo a felis eget efficitur.

\begin{figure}[p]
\includegraphics[height=0.9\textheight]{example-image-10x16}
\caption{Blablabla}\label{fig1}
\end{figure}

Proin leo lectus, porta ut accumsan eu, sollicitudin sit amet elit. Suspendisse pharetra pretium sapien, sit amet faucibus enim molestie ac. Aliquam at mi vestibulum, placerat neque quis, bibendum nunc. Proin libero orci, ullamcorper at dapibus at, varius vitae dolor. In congue ullamcorper consequat. Mauris tincidunt risus vel felis finibus consequat. Interdum et malesuada fames ac ante ipsum primis in faucibus. Phasellus at eros dictum, euismod lacus at, sodales metus. Integer vitae erat libero. Sed ultrices cursus risus ut maximus. Mauris placerat maximus elit, ut volutpat tellus sagittis sed. Cras in faucibus velit, eget venenatis tortor. Integer malesuada ligula vestibulum, placerat ex ut, sollicitudin nibh. Ut euismod orci molestie egestas eleifend. Ut justo libero, dignissim eu urna a, tempus auctor ligula. Duis cursus, tellus quis hendrerit dictum, enim nibh congue risus, vel dictum quam nisl vitae ante. In tempor nibh eleifend eros sodales, ac luctus ligula gravida. Aenean rutrum ante massa, sed euismod augue rutrum eget. Duis odio sapien, commodo eget ullamcorper quis, suscipit quis felis. Aliquam commodo tincidunt ante. Vivamus id lectus mauris. In vulputate libero ac est auctor convallis vel sit amet lectus.

Etiam urna nulla, porta quis convallis ac, malesuada eu ex. Donec tincidunt blandit lacus, non volutpat mi congue ut. Praesent aliquam orci vel velit tincidunt sodales. Morbi vel feugiat massa. Praesent orci lorem, fermentum vitae odio eu, elementum consequat quam. Donec gravida, magna nec bibendum auctor, nibh ipsum imperdiet mi 
\figref{fig2}, \verb!\thepage! = \thepage.

\begin{figure}[h]
\includegraphics{example-image}
\caption{Blablabla}\label{fig2}
\end{figure}

Nullam consectetur aliquam tincidunt. Ut bibendum pellentesque efficitur. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi euismod eu ligula vel tempor. Morbi quis gravida quam, quis aliquet eros. Duis pellentesque suscipit eros, vitae consectetur erat porta id. Suspendisse potenti. In placerat leo quis mattis finibus. Curabitur tincidunt magna non lorem viverra, id tempus turpis pellentesque. Etiam euismod rhoncus justo ac tincidunt. Vestibulum quis felis vitae massa finibus venenatis. Aenean sed dolor ullamcorper, ullamcorper lorem vitae, condimentum felis. Proin pharetra neque vel arcu pharetra dapibus. Vivamus suscipit tincidunt ligula at gravida. Nullam faucibus arcu sit amet arcu volutpat volutpat. Ut velit velit, elementum egestas commodo eu, molestie tempus erat. Donec vitae massa eros. Ut aliquam ante nec iaculis aliquam. Morbi dignissim ligula nec convallis elementum. Aenean eget metus leo. Ut velit velit, elementum egestas commodo eu, molestie tempus erat. Donec vitae massa eros. Ut aliquam ante nec iaculis aliquam. Morbi dignissim ligula nec convallis elementum. Aenean eget metus leo.

In eget interdum ligula. Ut ornare at nibh vel laoreet. Fusce eu enim at diam posuere tempus sit amet eget nulla. Nam varius blandit velit, quis scelerisque augue facilisis hendrerit. Duis aliquam sit amet nunc ac posuere. Vivamus tempus tincidunt leo at efficitur. Morbi vel nunc id lacus condimentum molestie non vitae elit. Etiam maximus, quam sed finibus dignissim, lectus metus molestie nisl, quis dapibus turpis dui ac dolor. Ut nec rhoncus nisl.

Etiam urna nulla, porta quis convallis ac, malesuada eu ex. Donec tincidunt blandit lacus, non volutpat mi congue ut. Praesent aliquam orci vel velit tincidunt sodales. Morbi vel feugiat massa. Praesent orci lorem, fermentum vitae odio eu, elementum consequat quam. Donec gravida, magna nec bibendum auctor, nibh ipsum imperdiet mi
\figref{fig3}, \verb!\thepage! = \thepage.

\begin{figure}[h]
\includegraphics{example-image}
\caption{Blablabla}\label{fig3}
\end{figure}

Vestibulum accumsan metus lorem, semper blandit justo lobortis eu. Suspendisse vulputate tincidunt purus at vehicula. Pellentesque ut tempus leo. Praesent sagittis ornare justo ac hendrerit. Praesent eget neque non mauris finibus accumsan. Mauris feugiat tincidunt volutpat. Proin vitae magna vitae est vehicula feugiat id at arcu. Ut libero magna, semper vitae semper in, maximus quis diam. Sed tristique arcu tempus turpis facilisis, non pellentesque justo viverra. Suspendisse mauris felis, lobortis at suscipit malesuada, blandit ac arcu. Nulla id quam tincidunt, posuere velit et, efficitur nibh.
\end{document}

답변1

David Carlisle의 의견과 패키지의 소스 코드에서 영감을 얻은 덕분에 varioref해결책이 있다고 생각합니다.

여기에 이미지 설명을 입력하세요

\documentclass{article}
\usepackage{refcount, graphicx, mwe, xcolor, varioref}

\newcounter{figrefcnt}

\makeatletter
\newcommand{\figref}[1]{%
    \global\advance\c@figrefcnt\@ne%
    \vref@label{\the\c@figrefcnt @pref}%
    \ifnum\getpagerefnumber{#1}=\getpagerefnumber{\the\c@figrefcnt @pref}%
        \textcolor{red}{(Fig.~\ref{#1})}%
    \else%
        \textcolor{red}{(Fig.~\ref{#1}, p.~\pageref{#1})}%
    \fi
}
\makeatother

\begin{document}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sit amet eleifend quam, id tincidunt ex. Maecenas lacinia varius dignissim. Phasellus et tortor turpis. Morbi leo nibh, pharetra sit amet tempor non, tristique vel nisi. Duis efficitur at massa sagittis auctor. Morbi consequat ultrices sapien eget luctus. Nam mauris quam, pharetra eget lacus et, ullamcorper maximus elit. Sed ullamcorper, justo sed blandit finibus, turpis est pretium metus, eget luctus dui lectus sit amet nulla. Integer ac ante a enim varius congue sit amet id risus. Nunc non ante arcu. Nam consequat, odio faucibus pharetra fringilla, arcu mauris finibus quam, id tristique neque lacus vitae justo. Duis molestie, mi eu pellentesque consectetur, odio quam consequat tortor, id pulvinar dui urna ac eros. Donec ut mattis urna, in faucibus sapien. Pellentesque placerat ex nec sapien venenatis, non mattis dolor porttitor. Phasellus in eros non ligula pulvinar malesuada non ut nibh. Etiam sed ex et nibh dapibus luctus. Nullam pharetra ligula eu finibus dictum. Praesent dapibus auctor egestas. Aenean sed laoreet leo, in posuere justo. Ut congue porta quam et finibus. Fusce pharetra mattis nunc at ultricies. Sed hendrerit, orci eget ultrices eleifend, nisl quam eleifend mauris, at varius est elit nec libero. Phasellus iaculis, magna aliquam lobortis porttitor, sapien libero convallis purus, sed fermentum neque risus id sem. Vivamus et vulputate magna. Donec maximus nibh nec rhoncus feugiat. Sed id justo orci. Sed nibh nulla, euismod sit amet maximus in, facilisis id quam. Pellentesque non ex porta, consectetur erat sed, iaculis tellus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Sed et ipsum nunc. Aliquam aliquet sit amet tellus venenatis volutpat. Nam ullamcorper justo vel lectus sodales porttitor. Suspendisse sed tellus suscipit, lacinia quam ut, efficitur diam. Duis congue tellus ante, et mattis urna hendrerit et. Phasellus ullamcorper eros ultrices ullamcorper condimentum. Nam non dui felis. Sed faucibus mi vitae sollicitudin fringilla. Nullam pulvinar venenatis neque, vitae faucibus odio cursus et. Duis commodo a felis eget efficitur.

\begin{figure}[p]
\includegraphics[height=0.9\textheight]{example-image-10x16}
\caption{Blablabla}\label{fig1}
\end{figure}

Proin leo lectus, porta ut accumsan eu, sollicitudin sit amet elit. Suspendisse pharetra pretium sapien, sit amet faucibus enim molestie ac. Aliquam at mi vestibulum, placerat neque quis, bibendum nunc. Proin libero orci, ullamcorper at dapibus at, varius vitae dolor. In congue ullamcorper consequat. Mauris tincidunt risus vel felis finibus consequat. Interdum et malesuada fames ac ante ipsum primis in faucibus. Phasellus at eros dictum, euismod lacus at, sodales metus. Integer vitae erat libero. Sed ultrices cursus risus ut maximus. Mauris placerat maximus elit, ut volutpat tellus sagittis sed. Cras in faucibus velit, eget venenatis tortor. Integer malesuada ligula vestibulum, placerat ex ut, sollicitudin nibh. Ut euismod orci molestie egestas eleifend. Ut justo libero, dignissim eu urna a, tempus auctor ligula. Duis cursus, tellus quis hendrerit dictum, enim nibh congue risus, vel dictum quam nisl vitae ante. In tempor nibh eleifend eros sodales, ac luctus ligula gravida. Aenean rutrum ante massa, sed euismod augue rutrum eget. Duis odio sapien, commodo eget ullamcorper quis, suscipit quis felis. Aliquam commodo tincidunt ante. Vivamus id lectus mauris. In vulputate libero ac est auctor convallis vel sit amet lectus.

Etiam urna nulla, porta quis convallis ac, malesuada eu ex. Donec tincidunt blandit lacus, non volutpat mi congue ut. Praesent aliquam orci vel velit tincidunt sodales. Morbi vel feugiat massa. Praesent orci lorem, fermentum vitae odio eu, elementum consequat quam. Donec gravida, magna nec bibendum auctor, nibh ipsum imperdiet mi \figref{fig2}.

\begin{figure}[h]
\includegraphics{example-image}
\caption{Blablabla}\label{fig2}
\end{figure}

Nullam consectetur aliquam tincidunt. Ut bibendum pellentesque efficitur. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi euismod eu ligula vel tempor. Morbi quis gravida quam, quis aliquet eros. Duis pellentesque suscipit eros, vitae consectetur erat porta id. Suspendisse potenti. In placerat leo quis mattis finibus. Curabitur tincidunt magna non lorem viverra, id tempus turpis pellentesque. Etiam euismod rhoncus justo ac tincidunt. Vestibulum quis felis vitae massa finibus venenatis. Aenean sed dolor ullamcorper, ullamcorper lorem vitae, condimentum felis. Proin pharetra neque vel arcu pharetra dapibus. Vivamus suscipit tincidunt ligula at gravida. Nullam faucibus arcu sit amet arcu volutpat volutpat. Ut velit velit, elementum egestas commodo eu, molestie tempus erat. Donec vitae massa eros. Ut aliquam ante nec iaculis aliquam. Morbi dignissim ligula nec convallis elementum. Aenean eget metus leo. Ut velit velit, elementum egestas commodo eu, molestie tempus erat. Donec vitae massa eros. Ut aliquam ante nec iaculis aliquam. Morbi dignissim ligula nec convallis elementum. Aenean eget metus leo \figref{fig1}.

In eget interdum ligula. Ut ornare at nibh vel laoreet. Fusce eu enim at diam posuere tempus sit amet eget nulla. Nam varius blandit velit, quis scelerisque augue facilisis hendrerit. Duis aliquam sit amet nunc ac posuere. Vivamus tempus tincidunt leo at efficitur. Morbi vel nunc id lacus condimentum molestie non vitae elit. Etiam maximus, quam sed finibus dignissim, lectus metus molestie nisl, quis dapibus turpis dui ac dolor. Ut nec rhoncus nisl.

Etiam urna nulla, porta quis convallis ac, malesuada eu ex. Donec tincidunt blandit lacus, non volutpat mi congue ut. Praesent aliquam orci vel velit tincidunt sodales. Morbi vel feugiat massa. Praesent orci lorem, fermentum vitae odio eu, elementum consequat quam. Donec gravida, magna nec bibendum auctor, nibh ipsum imperdiet mi \figref{fig3}.

\begin{figure}[h]
\includegraphics{example-image}
\caption{Blablabla}\label{fig3}
\end{figure}

Vestibulum accumsan metus lorem, semper blandit justo lobortis eu. Suspendisse vulputate tincidunt purus at vehicula. Pellentesque ut tempus leo. Praesent sagittis ornare justo ac hendrerit. Praesent eget neque non mauris finibus accumsan. Mauris feugiat tincidunt volutpat. Proin vitae magna vitae est vehicula feugiat id at arcu. Ut libero magna, semper vitae semper in, maximus quis diam. Sed tristique arcu tempus turpis facilisis, non pellentesque justo viverra. Suspendisse mauris felis, lobortis at suscipit malesuada, blandit ac arcu. Nulla id quam tincidunt, posuere velit et, efficitur nibh.
\end{document}

관련 정보