Cref 中的多个标签

Cref 中的多个标签

以下是一段简单的代码,用于展示我在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,其中_这里代表空格,但是没有逗号分隔列表功能。

相关内容