在这种情况下,当使用多个图形引用时,如何定制 cleveref 包宏以保持一致?

在这种情况下,当使用多个图形引用时,如何定制 cleveref 包宏以保持一致?

cleveref软件包可以很好地按自然顺序为您排序许多参考文献的标签(无论它们是什么)。
然而,当我想引用部分已经包含字母(如 A、B、C、D 等)的图形,这些字母由外部程序(例如Photoshop或类似软件)生成。
我想要引用图形的这些部分(未标记为LaTeX子图或子浮点数),并且仍然与我的 latex 文档的其余部分保持一致,使用cleveref包对图形的多个引用。

LaTeX为了说明这一点,当您通常想要使用该cleveref包 引用多个子图时,可以输入以下代码:

\cref{fig:lab1:1, fig:lab1:3, fig:lab1:2}  

这将产生所需的排版结果(正常行为):

figs. 1.1a, 1.1b and 1.1c

请注意,cleveref对子图的顺序进行了排序,另外还添加了参考类型,fig.在本例中,更重要的是添加了s它们,因为它们不止一个参考。还请注意,参考编号(1.1在本例中)与不同的子图字母重复。
现在回到特殊场合,该图已经使用外部程序用(A、B、C、D)进行了注释。显然,我不能以通常的方式使用多个引用,因为我没有为图的每个部分设置单独的标签,我只有一个标签用于整个图,而没有为其各个部分设置。
因此,作为一种解决方法,我倾向于使用以下代码来模拟包的输出,并cleveref为图的各个部分设置单独的标签:

\cref{fig:lab1}a, \ref{fig:lab1}b and \ref{fig:lab1}c  

此代码的输出不够理想,无法重现s应有的表示许多数字的功能。更重要的是,输出与文档的其余部分不一致:

fig. 1.1a, 1.1b and 1.1c

需要什么:

  1. s一个替代方案是从整个文档中删除该故事,即自定义cleveref包,这样就不会在s调用多个引用的地方添加。如果您能向我展示如何在代码中执行此操作,我将不胜感激。
  2. 使用一些我不知道的其他更优越的解决方案来解决这个不一致的问题(像往常一样)。

答案1

这里有一个解决方案,它使您可以使用该包为没有子标题的子图添加标签subcaption。这实际上是我处理子图的方式,因为我不喜欢显式的子标题,而更喜欢引用主标题中的单个图片。

\documentclass{article}

\usepackage{mwe} % only needed for the images
\usepackage{subcaption}

\usepackage{cleveref}

% Capitals for the subfigures
\DeclareCaptionSubType[Alph]{figure}

\begin{document}
\begin{figure}
    \centering
    {\includegraphics[width=.48\linewidth]{example-image-a}
        \phantomsubcaption\label{fig:a}}
    \hfil
    {\includegraphics[width=.48\linewidth]{example-image-b}
        \phantomsubcaption\label{fig:b}}
    \caption{Some illustrative examples: (\subref{fig:a}) an image with an \emph{A}
                and (\subref{fig:b}) an image with a \emph{B}}
\end{figure}

\Cref{fig:b} is next to \cref{fig:a} and we can see \cref{fig:b,fig:a}.
\end{document}

不会\phantomsubcaption创建子标题,但会创建您可以为其创建标签的点。因此,您可以轻松地引用所有子图,而无需真正的子标题。

在此处输入图片描述

编辑:您也可以\phantomsubcaption只使用一个图像,甚至不使用任何图像:

\begin{figure}
    \centering
    \includegraphics[width=.48\linewidth]{example-image-16x9}
    {\phantomsubcaption\label{fig:a}}
    {\phantomsubcaption\label{fig:b}}
    \caption{Some illustrative examples: (\subref{fig:a}) an image with an \emph{A}
                and (\subref{fig:b}) an image with a \emph{B}}
\end{figure}

在此处输入图片描述

答案2

您需要一种方法来在\cref宏输出多个交叉引用图形时隐藏复数“s”。一种方法涉及\crefname宏。例如,您可以发出指令

\crefname{figure}{fig.}{fig.}

因此,无论是通过 生成单个交叉引用还是多个交叉引用,“图。”都会显示出来\cref

相关内容