子图的自定义子标题和参考格式

子图的自定义子标题和参考格式

我刚刚读过问题:

但我还是没有找到答案。

最小示例:

\documentclass{article}
\usepackage{caption}
\usepackage{subfig}
\usepackage{hyperref}

\begin{document}
\begin{figure}
 \centering
  \subfloat[subfigure A]{\rule{100pt}{50pt}
   \label{fig:subfig-a}
  }
  \subfloat[subfigure B]{\rule{100pt}{50pt}
   \label{fig:subfig-b}
  }
  \subfloat[subfigure C]{\rule{100pt}{50pt}
   \label{fig:subfig-c}
  }
 \caption{Subfigures:}
 \label{fig:figures}
\end{figure}

See Figures~\ref{fig:subfig-a}, \ref{fig:subfig-b} and~\ref{fig:subfig-c}.
\end{document}

输出如下: 默认字幕

我需要的:

  1. 子标题应为a)b)c)不带标题文字,而不是(a)(b)以及 ,(c)带标题文字。
  2. 对子图的引用应1,\,a改为1a
  3. Fig.~1.图题应由前缀( )、分隔符、总题名(Subfigures:)和子图的子题名(例如)组成(a) --- subfigure A; (b) --- subfigure B; (c) --- subfigure C

我尝试过的:

设置标题

\captionsetup[figure]{labelsep=period,justification=centering,singlelinecheck=off}

设置参考格式

\makeatletter
\def\thesubfigure{\textit{\alph{subfigure}}}
\providecommand\thefigsubsep{,\,}
\def\p@subfigure{\@nameuse{thefigure}\thefigsubsep}
\makeatother

所以我得到了:

\documentclass{article}
\usepackage{caption}
\usepackage{subfig}
\usepackage{hyperref}

\captionsetup[figure]{labelsep=period,justification=centering,singlelinecheck=off}

\makeatletter
\def\thesubfigure{\textit{\alph{subfigure}}}
\providecommand\thefigsubsep{,\,}
\def\p@subfigure{\@nameuse{thefigure}\thefigsubsep}
\makeatother

\begin{document}
\begin{figure}
 \centering
  \subfloat[subfigure A]{\rule{100pt}{50pt}
   \label{fig:subfig-a}
  }
  \subfloat[subfigure B]{\rule{100pt}{50pt}
   \label{fig:subfig-b}
  }
  \subfloat[subfigure C]{\rule{100pt}{50pt}
   \label{fig:subfig-c}
  }
 \caption{Subfigures:}
 \label{fig:figures}
\end{figure}

See Figures~\ref{fig:subfig-a}, \ref{fig:subfig-b} and~\ref{fig:subfig-c}.
\end{document}

它看起来像这样: 自定义字幕

仍需要纠正子字幕和主字幕的格式。

另外,为什么子图之间的间距不同?

答案1

我认为使用三种不同的格式对子图进行编号并不好。无论如何,它如下:

\documentclass{article}
\usepackage{caption}
\captionsetup[figure]{labelsep=period,justification=centering,singlelinecheck=off}
\DeclareCaptionLabelFormat{rightparen}{#2)}
\usepackage{subfig}
\captionsetup[subfloat]{labelformat=rightparen}
\showcaptionsetup[uniq]{subfloat}
\usepackage{xparse}

\ExplSyntaxOn
\seq_new:N \g_akj_subfloat_seq
\NewDocumentCommand{\xsubfloat}{ m m }
 {
  \akj_subfloat:nn { #1 } { #2 }
 }
\NewDocumentCommand{\makexcaption}{o}
 {
  \caption{\IfNoValueF{#1}{#1~}Subfigures:~%
  \seq_use:Nnnn \g_akj_subfloat_seq {;~} {;~} {;~}}
 }
\cs_new_protected:Npn \akj_subfloat:nn #1 #2
 {
  % initialize
  \int_compare:nT { \value{subfigure} = 0 }
   { \seq_gclear:N \g_akj_subfloat_seq }
  % do the subfloat
  \subfloat[]{#2}
  % store the subcaption
  \seq_gput_right:Nx \g_akj_subfloat_seq { (\exp_not:N\textit{\alph{subfigure}}) ~ \exp_not:n { #1 } }
 }
\ExplSyntaxOff
\renewcommand{\thesubfigure}{\textit{\alph{subfigure}}}
\makeatletter
\def\p@subfigure{\thefigure\,}
\makeatother

\begin{document}
\begin{figure}
\centering
\xsubfloat{subfigure A}{%
  \rule{100pt}{50pt}%
  \label{fig:subfig-a}%
}
\xsubfloat{subfigure B}{%
  \rule{100pt}{50pt}%
  \label{fig:subfig-b}%
}
\xsubfloat{subfigure C}{%
  \rule{100pt}{50pt}%
  \label{fig:subfig-c}%
}
\makexcaption\label{fig:figures}
\end{figure}

See Figures~\ref{fig:subfig-a}, \ref{fig:subfig-b} and~\ref{fig:subfig-c}.
\end{document}

\makexcaption命令还有一个可选参数,用于在子标题列表之前添加文本,因此

\makexcaption[Some text.]

会产生

图 1. 一些文本。子图:(A)子图A;(b)子图B;(C) 子图 C

请当心参数中未受保护的行尾\subfloat,这是导致出现虚假空格的原因。

在此处输入图片描述

相关内容