我正在尝试使用该包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 为您完成这项工作。(如果您的文档中有例外情况,需要没有文本的标签,请使用\labelcref
et al.)
\Cref<x>
此外,除了句子开头外,您不应该使用(请注意大写)。如果您想要大写名称,请使用capitalise
package 选项。(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
等等)。chapter
section
交叉引用类型环境的equation
是equation
,而不是eq
。因此,\Crefrangeformat{eq}{#3(#1)#4-#5(#2)#6}
对方程式交叉引用的排版方式没有影响,并且当cleveref
遇到 时\Crefrange{eq:eq_first}{eq:eq_last}
,仍将使用方程式范围交叉引用的默认格式。这就是为什么你会得到
方程式(1)-(5)。
你应该做什么
我请您参考 Toby Cubitt(该软件包的作者)和 karkoeller 的回答cleveref
。