更改子图的引用格式

更改子图的引用格式

在我当前的文档中,我正在处理许多子图。通常,我喜欢使用类似这样的样式来引用它们,Figure 1 b)其中空格应该是半空格,因此\,在代码中。这不仅对引用子图很有用,而且与我对示例的一部分的引用一致。我想使用类似的东西\ref{subfig:p1}来获得刚刚描述的输出。但这样数字和字母之间就没有空格了。

这是 MWE

\documentclass[4apaper]{scrartcl}
\usepackage{caption,subcaption,graphicx}
\captionsetup{format=hang,labelsep=space,indention=-2cm,labelfont=bf,width=.9\textwidth,skip=.5\baselineskip}
\captionsetup[sub]{labelfont=bf, labelsep=period,labelformat=simple, subrefformat=brace}

\begin{document}
\begin{figure}[t]
    \begin{subfigure}[b]{.49\textwidth}\centering
 %      \includegraphics[width=.9\textwidth]{myPicture}
        \rule{2cm}{2cm}.
        \caption{SubText 1}\label{subfig:p1}
    \end{subfigure}
    \begin{subfigure}[b]{.49\textwidth}\centering
        \rule{2cm}{2cm}.
        \caption{SubText 2}\label{subfig:p2}
    \end{subfigure}
    \caption{Description referencing to \subref{subfig:p1} and
  \subref{subfig:p2}}\label{fig:1}
  \end{figure}
  I usually refer to example 1\,c) somewhere else in a certain way leaving some space,
  but that's not possible just using \ref{subfig:p1}; I don't want to use
  \ref{fig:1}\,\subref{subfig:p1}, but that's quite longish.
\end{document}

在此处输入图片描述

我如何更改\refin以在和引用\ref{subfig:p1)之间添加空格?如果可用的话,我最喜欢的是使用某些东西。figuresubfigure\captionsetup

答案1

\,在图形和子图形参考部分之间进行操作非常容易,可以重新定义\p@subfigure,通常只添加图形部分,即通常定义为

\newcommand\p@subfigure{\thefigure}

并可以改为

\renewcommand\p@subfigure{\thefigure\,}

(另请参阅包文档中的“参考”部分subcaption。)

但是如何在参考文献中获取单个右括号,而不是在子标题标签中获取单个右括号?一种可能性是将右括号添加到定义中\thesubfigure,如“参考文献”部分所示:

\renewcommand\thesubfigure{\alph{subfigure})}

但是这也会将结束括号添加到子图标签中。所以现在是巧妙的部分,删除子图标签中的括号。虽然文档subcaption仅显示了如何将内容添加到打印的标签中,但实际上并没有显示如何删除内容。好吧,可以尝试使用宏来构建棘手的代码,\@gobble但我认为最直接的方法是定义一种新的标签格式,它根本不使用给定的参数(#1 和 #2),而是从拉伸开始构建标签:

\DeclareCaptionLabelFormat{mysublabelfmt}{\alph{sub\@captype}}

(这里我们使用了实际主浮动环境名称存储在中的事实\@captype,例如figure在图形环境内。)

总共有:

\documentclass[4apaper]{scrartcl}
\usepackage{caption,subcaption,graphicx}
\captionsetup{format=hang,labelsep=space,indention=-2cm,labelfont=bf,width=.9\textwidth,skip=.5\baselineskip}
\captionsetup[sub]{labelfont=bf,labelsep=period,labelformat=mysublabelfmt}

\makeatletter
\renewcommand\p@subfigure{\thefigure\,}
\renewcommand\thesubfigure{\alph{subfigure})}
% If desired for table as well:
% \renewcommand\p@subtable{\thetable\,}
% \renewcommand\thesubtable{\alph{subtable})}
\DeclareCaptionLabelFormat{mysublabelfmt}{\alph{sub\@captype}}
\makeatother

\begin{document}
\begin{figure}[t]
    \begin{subfigure}[b]{.49\textwidth}\centering
 %      \includegraphics[width=.9\textwidth]{myPicture}
        \rule{2cm}{2cm}.
        \caption{SubText 1}\label{subfig:p1}
    \end{subfigure}
    \begin{subfigure}[b]{.49\textwidth}\centering
        \rule{2cm}{2cm}.
        \caption{SubText 2}\label{subfig:p2}
    \end{subfigure}
    \caption{Description referencing to \subref{subfig:p1} and
  \subref{subfig:p2}}\label{fig:1}
  \end{figure}
  I usually refer to example 1\,c) somewhere else in a certain way leaving some space,
  but that's not possible just using \ref{subfig:p1}; I don't want to use
  \ref{fig:1}\,\subref{subfig:p1}, but that's quite longish.
\end{document}

(请注意,我subrefformat另外删除了该设置,因为在使用时没有得到两个右括号\subref

结果

相关内容