1

I have defined a \figref command so that it refers to a labeled figure and gives the page number where the figure is located, unless the figure is on the same page where it is referred to (in which case there is not much point in giving the page number). This is the context.

The command works, but in use I have found that \thepage counter is incorrect in the first paragraph of a page (unless the start of the paragraph coincides with the page break). In this case, my command no longer works.

Can I get \thepage counter to be "updated" when \figref is used?

Here is an illustration:

enter image description here

Here, the \figref command is used in the first paragraph of the page. While we are on page 3, \thepage indicates that we are on page 1. As a result, \figref does not work as it should, since it indicates the page number of the figure when it is on the same page (which it should not).

Example where \figref works normally:

enter image description here

Here is a 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}
4
  • 2
    never use \thepage in the body of the document. use \pageref{fig3} Apr 15 at 19:48
  • 2
    the package varioref implements a safe "on this page" test Apr 15 at 19:49
  • 2
    note it will be wrong in at least the first paragraph, but could be wrong in later paragraphs as well. Apr 15 at 19:57
  • Thank you @DavidCarlisle for your comments, they helped me find a solution.
    – Bastien
    Apr 30 at 11:32

1 Answer 1

2

Thanks to David Carlisle's comments and inspired by the source code of the varioref package, I think I have a solution:

enter image description here

\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}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.