如果文章跨越 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}