ページが実際のページでない場合にのみ、フロートオブジェクトのページを参照します。

ページが実際のページでない場合にのみ、フロートオブジェクトのページを参照します。

参照されたオブジェクトが実際のページ上にない場合にのみ \pageref を使用するように LaTeX に指示することは可能ですか?

if \pageref{fig:hello_world} != self.page then
  \pageref{fig:hello_world}
end

答え1

おそらくあなたはvariorefおよび/またはcleverefパッケージ

varioref

スクリーンショット

\documentclass{article}

\usepackage{varioref}

\begin{document}

\begin{itemize}
  \item Here is a reference to Table \vref{tab:thispage}. 
  \item Here's a reference to Table \vref{tab:nextpage}.
\end{itemize}

\begin{table}[!htb]
  \centering
  \begin{tabular}{cc}
    1 & 2
  \end{tabular}
  \caption{Table}
  \label{tab:thispage}
\end{table}

\clearpage
\setcounter{page}{20}

\begin{table}[!htb]
  \centering
  \begin{tabular}{cc}
    1 & 2
  \end{tabular}
  \caption{Table}
  \label{tab:nextpage}
\end{table}
\end{document}

cleveref

スクリーンショット

\documentclass{article}

\usepackage{varioref}
\usepackage{cleveref}

% each of the following has two versions
%   \crefname{environmentname}{singular}{plural}, to be used mid-sentence
%   \Crefname{environmentname}{singular}{plural}, to be used at the beginning of a sentence

% standard environments
\crefname{table}{Table}{Tables}
\Crefname{table}{Table}{Tables}

\begin{document}

\begin{itemize}
  \item Here is a reference to  \vref{tab:thispage}. 
  \item Here's a reference to \vref{tab:nextpage}.
\end{itemize}

\begin{table}[!htb]
  \centering
  \begin{tabular}{cc}
    1 & 2
  \end{tabular}
  \caption{Table}
  \label{tab:thispage}
\end{table}

\clearpage
\setcounter{page}{20}

\begin{table}[!htb]
  \centering
  \begin{tabular}{cc}
    1 & 2
  \end{tabular}
  \caption{Table}
  \label{tab:nextpage}
\end{table}
\end{document}

答え2

パッケージを使用してrefcount、参照のページ番号を取得できます。次に、パッケージを使用してxifthen整数値の比較を行うことができます。コマンドを使用して、現在のページの値を取得できます\value{page}。以下の MWE では、 をコメント化またはコメント解除して、\clearpage動作の違いを示すことができます。

\documentclass{article}
\usepackage{refcount}
\usepackage{xifthen}
\usepackage[demo]{graphicx}

\begin{document}
\begin{figure}
    \caption{Testing}\label{fig:test}
    \includegraphics[width=0.4\textwidth]{temp}
\end{figure}
%Uncomment the clearpage command to get the pageref to print
%\clearpage
\ifthenelse{\getpagerefnumber{fig:test}=\value{page}}{}{\pageref{fig:test}}

\end{document}

コマンドを変更することでpageref、pageref を通常どおり使用できるようになり、条件付きコードが実行されるようになります。

\documentclass{article}
\usepackage{refcount}
\usepackage{xifthen}
\usepackage[demo]{graphicx}

\let\originalPageref\pageref
\renewcommand{\pageref}[1]{\ifthenelse{\getpagerefnumber{#1}=\value{page}}{}{\originalPageref{#1}}}
\begin{document}
\begin{figure}
    \caption{Testing}\label{fig:test}
    \includegraphics[width=0.4\textwidth]{temp}
\end{figure}
%Uncomment the clearpage command to get the pageref to print
%\clearpage
\pageref{fig:test}

\end{document}

関連情報