![`\crefmultilabelformat` 命令允许为 `\crefstripprefix` 构造 `\cref`](https://linux22.com/image/370877/%60%5Ccrefmultilabelformat%60%20%E5%91%BD%E4%BB%A4%E5%85%81%E8%AE%B8%E4%B8%BA%20%60%5Ccrefstripprefix%60%20%E6%9E%84%E9%80%A0%20%60%5Ccref%60.png)
我的问题是一个更普遍(并且希望更清晰)的表述这个。
使用包时cleveref
,当同时引用多个标记对象时,可以使用多格式命令\cref
,例如参考文献 1、2 和 3或范围格式命令\crefrange
,产生参考文献 1–3。
如果标记对象是 1a、1b、1c,则可以调整范围格式以\crefstripprefix
删除公共前缀;
\crefrangelabelformat{<type>}{#3#1#4--#5\crefstripprefix{#1}{#2}#6}
屈服参考文献 1a–c代替参考文献 1a–1c。
我想用多格式实现类似的功能,即参考文献 1a、b 和 c#1
。不幸的是,与上面的代表范围的第一个标签和#2
代表最后一个标签的命令不同,该\creflabelformat
命令单独配置标签(仅占位符#1
可用,#2
和#3
调整超链接,就像上面一样#3
)#6
。
带有一系列标签的输出\cref
由命令调整\crefmultiformat
,其中出现在其参数中的占位符#1
代表该系列的每个标签,一次一个。有没有办法让每个标签首先经历一个转换,由命令“\crefmultilabelformat
”调整二占位符,#1
比如说,代表系列中第一个呈现的标签的位置,以及#2
代表其他每个标签的位置?
\documentclass{article}
\usepackage{floatrow}
\usepackage{subcaption}
\usepackage{cleveref}
\crefrangelabelformat{figure}{#3#1#4--#5\crefstripprefix{#1}{#2}#6}
\begin{document}
\begin{figure}
\ffigbox[\textwidth]{
\begin{subfloatrow}[3]
\ffigbox[\FBwidth]{\quad a \quad}{\caption{a}\label{sfig:a}}
\ffigbox[\FBwidth]{\quad b \quad}{\caption{b}\label{sfig:b}}
\ffigbox[\FBwidth]{\quad c \quad}{\caption{c}\label{sfig:c}}
\ffigbox[\FBwidth]{\quad d \quad}{\caption{d}\label{sfig:d}}
\end{subfloatrow}
}{\caption{cap}\label{fig:1}}
\end{figure}
%
\crefrange{sfig:a}{sfig:c} % renders 1a-c, juste like I want
\cref{sfig:a,sfig:b,sfig:d} % renders 1a, 1b and 1d, and I would like 1a, b, and d.
\end{document}
答案1
这不需要新命令,可以使用现有的\crefmultiformat
宏将前缀信息从第一个组件传递给其他组件来完成,如下所示:
\documentclass{article}
\usepackage{floatrow}
\usepackage{subcaption}
\usepackage{cleveref}
\crefrangelabelformat{figure}{#3#1#4--#5\crefstripprefix{#1}{#2}#6}
\crefmultiformat{figure}%
{\edef\mycrefprefixinfo{#1}figs.~#2#1#3}%
{ and~#2\crefstripprefix{\mycrefprefixinfo}{#1}#3}%
{, #2\crefstripprefix{\mycrefprefixinfo}{#1}#3}%
{, and~#2\crefstripprefix{\mycrefprefixinfo}{#1}#3}
\begin{document}
\begin{figure}
\ffigbox[\textwidth]{
\begin{subfloatrow}[3]
\ffigbox[\FBwidth]{\quad a \quad}{\caption{a}\label{sfig:a}}
\ffigbox[\FBwidth]{\quad b \quad}{\caption{b}\label{sfig:b}}
\ffigbox[\FBwidth]{\quad c \quad}{\caption{c}\label{sfig:c}}
\ffigbox[\FBwidth]{\quad d \quad}{\caption{d}\label{sfig:d}}
\end{subfloatrow}
}{\caption{cap}\label{fig:1}}
\end{figure}
\crefrange{sfig:a}{sfig:c} % renders "1a-c", just like I want.
\cref{sfig:a,sfig:b,sfig:d} % renders "1a, b, and d", just like you want.
\end{document}