varioref.styが提供する\vrefや\vpagerefは、参照先の位置によって出力を適当 に変えてくれるので、参照先が分かりやすくなる。

\vref:

  • 参照先が同じページにあれば”figure x.y”とだけ出力

  • 参照先が同じページになければ、加えてページ番号を表す文字列を出力

    • 1ページ前にあれば”on the previous page”
    • 2ページ以上離れていれば”on page XX”

\vpageref:

  • ページ番号を表す追加部分だけを出力

出力文字列はカスタマイズできるようになっていて、設定すれば日本語の文書で も使える(詳しくはvarioref.pdf参照)。

まずpreambleでパッケージをロードする。

\usepackage{varioref}
%% \vrefwarning% ページをまたいだときのloop errorを無視したければ有効に

englishオプション選択時のデフォルト設定:

\DeclareOption{english}
  {\vref@addto\extrasenglish{\relax%
    \def\reftextfaceafter {on the \reftextvario{facing}{next} page}%
    \def\reftextfacebefore{on the \reftextvario{facing}{preceding}
                           page}%
    \def\reftextafter     {on the \reftextvario{following}{next} page}%
    \def\reftextbefore    {on the \reftextvario{preceding}{previous} page}%
    \def\reftextcurrent   {on \reftextvario{this}{the current} page}%
    \def\reftextfaraway#1 {on page~\pageref{#1}}%
    \def\reftextpagerange#1#2{on pages~\pageref{#1}--\pageref{#2}}%
    \def\reftextlabelrange#1#2{\ref{#1} to~\ref{#2}}%
  }\relax}

これを参考に、適当に設定する:

\def\reftextfaceafter {(次ページ)}% 見開き対抗
\def\reftextfacebefore{(前ページ)}% 見開き対抗
\def\reftextafter     {(次ページ)}
\def\reftextbefore    {(前ページ)}
\def\reftextcurrent   {}
\def\reftextfaraway#1{\relax{(p.~\pageref{#1})}
\def\reftextpagerange#1#2{(pp.~\pageref{#1}--\pageref{#2})}
\def\reftextlabelrange#1#2{(\ref{#1}--\ref{#2})}

または:

\def\reftextfaceafter {\relax{\scriptsize\inhibitglue(\reftextvario{次}{次}ページ)\inhibitglue}}
\def\reftextfacebefore{\relax{\scriptsize\inhibitglue(\reftextvario{前}{前}ページ)\inhibitglue}}
\def\reftextafter     {\relax{\scriptsize\inhibitglue(\reftextvario{次}{次}ページ)\inhibitglue}}
\def\reftextbefore    {\relax{\scriptsize\inhibitglue(\reftextvario{前}{前}ページ)\inhibitglue}}
\def\reftextcurrent   {}
\def\reftextfaraway#1{\relax{\scriptsize\inhibitglue(p.~\pageref{#1})\inhibitglue}}
\def\reftextpagerange#1#2{\relax{\scriptsize\inhibitglue(pp.~\pageref{#1}--\pageref{#2})\inhibitglue}}
\def\reftextlabelrange#1#2{\relax{\scriptsize\inhibitglue(\ref{#1}--\ref{#2})\inhibitglue}}

本文はこんな感じで:

図\vref{foo}
図\vref{bar}
図\vref{baz}

出力はこんな感じになるはず(図1.2があるページに書いた場合):

図1.1(前ページ)
図1.2
図9.1(p.99)

(「図1.1『地図A』」のように参照先の番号に加えてタイトルやキャプションも 出力したい場合は、hyperref.styの\nameref http://www.tex.ac.uk/cgi-bin/texfaq2html?label=nameref を使うという手があるらしい。)