如何检查图形是否位于标注/文本的同一页上?

如何检查图形是否位于标注/文本的同一页上?

如果文本中提到了一个图形,比如第 10 页,但相应的图形出现在第 11 页,我该如何在文本中提到的图形旁边自动引入一些额外的文本(例如:在第 11 页)。

不要这样做: Figure \ref{fig:test} on page \pageref{fig:test} shows bla bla.

自动检查: Figure \\ref{fig:test} \check shows bla bla.

哪里\check是一个宏,用于检查图形引用和图形(浮动)是否共存,以及它们是否在同一页面上。如果为真,则返回 Null,否则返回on page \pageref{fig:test}

答案1

考虑使用varioref包裹及其\vpageref命令来引用与另一个相关联的页面\label。它会检查引用是否在同一页上。如果是,则on this page打印默认文本 ()。您可以通过提供可选参数全局或本地覆盖此设置。您最有可能\vpageref[]{<label>}使用空的可选参数(以便不打印任何内容)。

在此处输入图片描述

\documentclass{article}

\usepackage{graphicx,lipsum}
\usepackage[nospace]{varioref}

\begin{document}

\lipsum[1]

\begin{figure}
  \centering
  \includegraphics[width=.3\linewidth]{example-image}
  \caption{A figure}
  \label{fig:figure}
\end{figure}

\lipsum[2]

See Figure~\ref{fig:figure} on page~\pageref{fig:figure}.

See Figure~\ref{fig:figure} \vpageref{fig:figure}.

See Figure~\ref{fig:figure} \vpageref[]{fig:figure}.% Note the empty optional argument

\lipsum[3]

\end{document}

由于\vpageref它本身设置了\label以便比较其引用的页码,因此每次更改位置时都需要编译两次\vpageref

答案2

OpTeX 用户可以创建以下宏定义\check

\def\check{\label[x/\_lastreflabel]\wlabel{}%
   \space
   \ea\ifx\csname _pgref:x/\_lastreflabel\ea\endcsname 
          \csname _pgref:\_lastreflabel\endcsname
   \else on page \pgref[\_lastreflabel] \fi
}

% Test:

Figure \ref[fig:label]\check shows bla bla.

%\vfil\break   %% <-- you can comment out this to show the effect

... a figure ...
\cskip
\caption/f [fig:label] Figure blba bla

\bye

当然,完成更改后您必须运行两次 TeX。

该宏\check创建自己的标签,并使用x/label将其位置写入文件。以下检查参考宏和是否相同。如果为真,则它不执行任何其他操作,而是写入文本。.ref\wlabel{}\ifx\_pgref:x/label\_pgref:labelon page \pgref[label]

相关内容