关于 cleveref 的 \Crefrangeformat 的使用问题

关于 cleveref 的 \Crefrangeformat 的使用问题

我正在尝试使用该包cleveref来引用一系列方程式。我希望在文本中得到以下结果:

等式(1)-(5)

我希望能够使用命令定义一次格式\Crefrangeformat,因此,在我的文档的开头我有以下两行:

\usepackage{cleveref}
\Crefrangeformat{eq}{#3(#1)#4-#5(#2)#6}

并在文本中输入:

Eqs. \Crefrange{eq:eq_first}{eq:eq_last}

我期望的结果是:

方程(1)-(5),

而我得到的却是:

方程式(1)–(5)

现在我的问题是:为什么尽管我没有在格式声明中包含“方程式”一词,但还是会出现这个词?我是不是遗漏了什么微妙之处?

答案1

\Crefrangeformat必须引用一个有效的计数器,在您的情况下equation则不是eq

另外,您可以在其中插入“eqs.”,而不必每次都指定它。

此外,最好定义\crefrangeformat并保留\Crefrangeformat未定义,因此当您使用时\crefrange您会得到非大写版本,而当您使用时\Crefrange您会得到大写版本。

换句话说,你可以按如下方式定义它

\crefrangeformat{equation}{eqs. #3(#1)#4--#5(#2)#6}

因此以下 MWE

\documentclass{article}
\usepackage{amsmath}
\usepackage{cleveref}

\crefrangeformat{equation}{eqs. #3(#1)#4--#5(#2)#6}

\begin{document}
\Crefrange{eq:eq_first}{eq:eq_last} and \crefrange{eq:eq_first}{eq:eq_last}

\begin{equation}
\label{eq:eq_first}
a=b.
\end{equation}

\begin{equation}
\label{eq:two}
b=c.
\end{equation}

\begin{equation}
\label{eq:three}
c=d.
\end{equation}

\begin{equation}
\label{eq:four}
d=e.
\end{equation}

\begin{equation}
\label{eq:eq_last}
e=f.
\end{equation}

\end{document} 

产量

在此处输入图片描述

答案2

@karlkoeller 和 @Jubobs 已经回答了您的问题。@Jubobs 说得完全正确,您不应该手动输入“eqs.”,而应该让 cleveref 为您完成这项工作。(如果您的文档中有例外情况,需要没有文本的标签,请使用\labelcrefet al.)

\Cref<x>此外,除了句子开头外,您不应该使用(请注意大写)。如果您想要大写名称,请使用capitalisepackage 选项。(capitalize也是可以接受的,因为我的美国朋友似乎总是拼错 ;-)\Cref<x>不仅要将文本大写,还要使用全名而不是缩写,因为在书面英语中,您不应该在句子开头缩写单词。

但是,如果您只想更改文本和标签格式,而不想做其他花哨的事情,那么最好使用高级格式自定义命令:

\crefname{equation}{eq.}{eqs.}
\creflabelformat{equation}{#3\textup{(#1)}#4--#5\textup{(#2)}#6}

(事实上​​,第一个是不需要的,因为它已经是默认定义,除非您使用noabbrev包选项。还请注意定义中的双破折号“--” \creflabelformat:数字范围应该用书面英语中的破折号分隔,而不是连字符。确保\textup标签始终设置为直立字体,据我所知这是正确的样式。)

避免使用低级格式化命令的原因\crefrangeformat是,除非您非常小心(请参阅手册),否则您将破坏对babel自动定理命名等的支持。您应该尽可能使用高级命令(\crefname\creflabelformat等)。您很少真正需要低级命令(\crefformat\crefrangeformat等)。

答案3

请记住:如果您发布最小工作示例(MWE)

硬编码是邪恶的

的优点cleveref在于它消除了硬编码的需要,并且允许您在任何阶段轻松更改交叉引用格式。想象一下,如果您Eqs在输入文件的每个地方都进行了硬编码,然后改变了对方程式的交叉引用应该如何排版的想法;假设你知道想要

等式(1)-(5)

代替

等式(1)-(5)

嗯,这需要在您的输入文件中进行大量的搜索和替换,这很繁琐而且容易出错。cleveref允许您对交叉引用格式的定义进行局部更改,然后会影响整个文档。总之:让我们cleveref完成工作,不要硬编码任何东西。

对问题原因的解释

参见cleveref手册(第 7.1.2 节):

交叉引用类型通常是环境计数器的名称(、、equation等等)。chaptersection

交叉引用类型环境的equationequation,而不是eq。因此,\Crefrangeformat{eq}{#3(#1)#4-#5(#2)#6}对方程式交叉引用的排版方式没有影响,并且当cleveref遇到 时\Crefrange{eq:eq_first}{eq:eq_last},仍将使用方程式范围交叉引用的默认格式。这就是为什么你会得到

方程式(1)-(5)。

你应该做什么

我请您参考 Toby Cubitt(该软件包的作者)和 karkoeller 的回答cleveref

相关内容