折叠 \vref 中多个引用的“页面”

折叠 \vref 中多个引用的“页面”

底部的代码产生

请参阅第 6 页和第 11 页的公式 (1) 和 (2)。

我想要的是

请参阅第 6 页和第 11 页的公式 (1) 和 (2)。

否则,在我看来,它看起来很奇怪。有没有简单的方法可以做到这一点?

\documentclass{article}

\usepackage{lipsum}
\usepackage{varioref}
\usepackage[nameinlink,noabbrev]{cleveref}

\begin{document}

See \vref{eq:1,eq:2}.

\newpage
\lipsum
\newpage
\lipsum
\newpage

\begin{equation}
  \label{eq:1}
  e=mc^2
\end{equation}

\newpage
\lipsum
\newpage
\lipsum
\newpage

\begin{equation}
  \label{eq:2}
  e=mc^2
\end{equation}

\end{document}

答案1

对于“这是否容易”这个问题的答案可能是否定的,尽管只要付出足够的编程努力就可以做到(几乎所有事情都可以)。

原因:

  • 首先,如果参考文献在第 2 页,第一个等式在第 3 页,第二个等式在第 5 页,那么规范是怎样的:“参见下一页和第 5 页的等式 (1) 和 (2)”或“..在第 3 页和第 5 页”。
  • 或者,如果第一个等式在第一页,第二个在第三页,那么结果是“...在上一页和下一页”还是“...在上一页和下一页”?

假设这些规范已经定义,那么cleverref就需要获得完全不同的编程逻辑,因为它目前根本不处理这种复杂性。

此外,这在很大程度上涉及到语言结构问题和差异,即在某些情况下,我们最终会得到“页面”,有时又会得到“页面”。为此,没有为各种语言存储预定义的语言片段(需要添加)。

此外,人们需要的远不止可翻译的片段。在许多情况下,句子结构也在很大程度上取决于目标语言(因此,至少对于某些语言,您将需要不同的逻辑)。例如,如果等式在第 3 页和第 4 页,我更希望看到“... auf der nächsten und übernächsten Seite”或“... auf den Seiten 3 und 4”(page 的复数)或“... auf Seite 3 und 4”(该版本中没有复数)。因此,当 varioref 检测到它是“下一页”时,句子结构将发生变化,并将单词 page 移到末尾。

所以总而言之,我认为这是一个非常有趣的问题,但任何自动化尝试varioref都会cleverref在边界情况下显示出限制,并且为了克服它们,你最终会得到大量的编码,并且可能仍然会有一些没有得到照顾的奇怪情况。

相关内容