以下是一段简单的代码,用于展示我在cleveref
包装方面的问题。使用多个标签时,第二个标签会断裂...
\documentclass[11pt]{article}
\usepackage{amssymb,amsmath,amsfonts}
\usepackage{amsthm}
\usepackage{cleveref}
\newtheorem{lemma}{Lemma}
\crefname{lemma}{lemma}{lemmas}
\begin{document}
\begin{lemma} \label{lem:fast}
a
\end{lemma}
\begin{lemma} \label{lem:slow}
b
\end{lemma}
\Cref{lem:fast} \\
\Cref{lem:slow} \\
\Cref{lem:fast, lem:slow} \\
\end{document}
答案1
省略逗号后的空格。
\documentclass[11pt]{article}
\usepackage{amssymb,amsmath,amsfonts}
\usepackage{amsthm}
\usepackage{cleveref}
\newtheorem{lemma}{Lemma}
\crefname{lemma}{lemma}{lemmas}
\begin{document}
\begin{lemma} \label{lem:fast}
a
\end{lemma}
\begin{lemma} \label{lem:slow}
b
\end{lemma}
\Cref{lem:fast} \\
\Cref{lem:slow} \\
\Cref{lem:fast,lem:slow} \\% <--- no space after the comma
\end{document}
答案2
解决这个问题的方法是删除 后面的空格,
,lockstep 已经建议这样做。
那么,为什么space
那里很重要?
定义标签时,空间很重要,因为最终\newlabel
会使用
\@namedef{}{}
实际上,space
在第一个参数中实际上是允许的,即在定义名称中包含空格字符的命令序列的意义上。
\cref
(或\Cref
)尝试将相关存储的标签内容作为以逗号分隔的列表进行拆分,其中空格字符被视为属于标签,因此\cref{foo,foobar}
和\cref{foo, foobar}
给出不同的结果。
\ref{ foo}
当调用标签foo
而不是时,也会出现同样的问题_foo
,其中_
这里代表空格,但是没有逗号分隔列表功能。