如何检查两个标签是否落在同一个页面上?

如何检查两个标签是否落在同一个页面上?

如果文章跨越 5-10 页,我希望5--10在文章标题中添加类似内容(我的文档是期刊),如果文章很短且适合一页5(而不是)。在包含插入类似和之类的内容的个别文章时,我在某些钩子中使用 s 。现在的问题是:如何检查两个标签是否位于同一页?目前,我使用类似5--5\label\label{\articlename:beginning}\label{\articlename:ending}

\pageref{\articlename:beginning}%
\expandafter\ifx\csname r@\articlename:beginning\expandafter\endcsname
  \csname r@\articlename:ending\endcsname\else
  --\pageref{\subjobname:end}%
\fi

(很明显,这可以使用etoolbox's来简化\ifcsequal- 我正在搬迁的过程中etoolbox,这就是我之前没有使用它的原因。)

我的问题是:有没有比使用\csname r@ something\endcsname(或与 等价的方法etoolbox) 更好的方法,在我看来,这种方法有点肮脏、不科学?也许有现成的包? (varioref我想到,它做了类似的事情,但据我所知,它没有任何像 这样的公共接口\iflabelsonthesamepage{label1}{label2}{true}{false}。)

答案1

以下是基于refcount和 的解决方案etoolbox。我创建了一个名为 的新命令pagespan,它可以打印放置在任何地方的输出:

\documentclass{article}

\usepackage{lipsum}
\usepackage{etoolbox}
\usepackage{refcount}

\newcommand{\pagespan}[2]{%
    \ifnumequal{\getpagerefnumber{#1}}{\getpagerefnumber{#2}}{%
        \pageref{#1}%
    }%
    {%
        \pageref{#1}--\pageref{#2}%
    }%
}

\begin{document}
\label{start}
\lipsum
\lipsum
\label{end}

Should be different (dash-dash expected): \pagespan{start}{end}

\newpage
\label{start2}
\lipsum[1]
\label{end2}

Should be the same (one number expected): \pagespan{start2}{end2}
\end{document}

相关内容