我正在使用该cleveref
软件包,并且对它非常满意。但是,我遇到了一个无法解决的问题。我可能只是没有正确组合语法。这与已经提出的问题密切相关,如下所示:参考范围中的交叉引用 [(1a-1e) 至 (1a-e)]如果这个问题已经得到解答,我很抱歉。
上面的帖子解释了如何引用子方程(或浮点数)的范围,如 1a 到 e,而不是默认的 1a 到 1e。我希望对由“and”组合的一对引用使用相同的功能,即:1a 和 b,而不是默认的 1a 和 1b。
以下是 MWE:
\documentclass{book}
\usepackage{cleveref}
\usepackage{subfig}
\crefrangelabelformat{figure}{#3#1#4--#5\crefstripprefix{#1}{#2}#6}
\crefmultiformat{figure}{figs.~#2#1#3}{ and~#2#1#3}{, #2#1#3}{ and~#2#1#3}
\begin{document}
\begin{figure}
\centering
\subfloat[][]{\rule{2.cm}{2.cm}\label{subfig:1a}}
\subfloat[][]{\rule{2.cm}{2.cm}\label{subfig:1b}}\\
\subfloat[][]{\rule{2.cm}{2.cm}\label{subfig:1c}}
\subfloat[][]{\rule{2.cm}{2.cm}\label{subfig:1d}}\\
\caption{\label{fig:1}my figures}
\end{figure}
Referencing a range works as wanted and gives figs. 1a-b: \cref{subfig:1a,subfig:1b,subfig:1c,subfig:1d}.\\
But, referencing a pair gives \cref{subfig:1a,subfig:1b}, rather than the desired figs. 1a and b.\\
\end{document}
我认为将\crefstripprefix
with 组合在一起\crefmultiformat{figure}
(我在 MWE 中使用它来删除“()”)可以得到我想要的结果。但是我无法获得正确的语法来实现这一点,因为我对深层的 latex 语法非常不熟悉。
答案1
在您的定义中,\crefmultiformat
您希望\crefrefstripprefix
在第二个参数中使用第一个参数的值。这可以按如下方式实现:
\crefmultiformat{figure}{figs.~#2#1\xdef\mycreffirstarg{#1}#3}%
{ and~#2{\crefstripprefix{\mycreffirstarg}{#1}}#3}{, #2#1#3}{ and~#2#1#3}
您还需要\crefrangelabelformat
以类似的方式进行定义(更新以下评论)。
\documentclass{book}
\usepackage{cleveref}
\usepackage{subfig}
\crefrangelabelformat{figure}{#3#1\xdef\mycreffirstarg{#1}#4--%
#5\crefstripprefix{#1}{#2}#6}
\crefmultiformat{figure}{figs.~#2#1\xdef\mycreffirstarg{#1}#3}%
{ and~#2{\crefstripprefix{\mycreffirstarg}{#1}}#3}%
{, #2{\crefstripprefix{\mycreffirstarg}{#1}}#3}%
{ and~#2{\crefstripprefix{\mycreffirstarg}{#1}}#3}
\crefrangemultiformat{figure}{figs.~#3#1#4--#5\crefstripprefix{#1}{#2}#6}%
{ and~#3#1#4--#5\crefstripprefix{#1}{#2}#6}%
{, #3#1#4--#5\crefstripprefix{#1}{#2}#6}%
{ and~#3#1#4--#5\crefstripprefix{#1}{#2}#6}
\begin{document}
\begin{figure}
\centering
\subfloat[][]{\rule{2.cm}{2.cm}\label{subfig:1a}}
\subfloat[][]{\rule{2.cm}{2.cm}\label{subfig:1b}}\\
\subfloat[][]{\rule{2.cm}{2.cm}\label{subfig:1c}}
\subfloat[][]{\rule{2.cm}{2.cm}\label{subfig:1d}}\\
\subfloat[][]{\rule{2.cm}{2.cm}\label{subfig:1e}}
\caption{\label{fig:1}my figures}
\end{figure}
\tracingmacros=1
Referencing a range works as wanted and gives figs.~1a--d:
\cref{subfig:1a,subfig:1b,subfig:1c,subfig:1d}.
Gives figs.~1a--c and e: \cref{subfig:1a,subfig:1b,subfig:1c,subfig:1e}.
Gives figs.~1a, b, d and e: \cref{subfig:1a,subfig:1b,subfig:1d,subfig:1e}.
Also referencing a pair gives \cref{subfig:1a,subfig:1b}, which is
then the desired figs.~1a and~b.
\end{document}
答案2
使用subcaption
包而不是subfig
将使您获得大部分方法。subcaption
提供一个\subref
命令,它只提供子图索引而不提供图形编号。
\documentclass{article}
\usepackage{graphicx}
\usepackage{cleveref}
\usepackage{subcaption}
\begin{document}
\begin{figure}
\centering
\begin{subfigure}{0.2\textwidth}
\includegraphics[width=\linewidth]{example-image-a}
\caption{Image a}
\label{subfig:foo}
\end{subfigure}
\begin{subfigure}{0.2\textwidth}
\includegraphics[width=\linewidth]{example-image-b}
\caption{Image b}
\label{subfig:bar}
\end{subfigure}\\
\begin{subfigure}{0.2\textwidth}
\includegraphics[width=\linewidth]{example-image-c}
\caption{Image c}
\label{subfig:baz}
\end{subfigure}
\begin{subfigure}{0.2\textwidth}
\includegraphics[width=\linewidth]{example-image}
\caption{Image d}
\label{subfig:qux}
\end{subfigure}
\caption{\label{fig:1}my figures}
\end{figure}
Referencing a range works as wanted and gives figs.~\ref{subfig:foo}--\subref{subfig:bar}. There is also \cref{subfig:foo,subfig:bar,subfig:baz,subfig:qux}.
A pair can be referenced like figs.~\ref{subfig:foo} to \subref{subfig:baz}.
\end{document}