我刚刚读过问题:
但我还是没有找到答案。
最小示例:
\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}
输出如下:
我需要的:
- 子标题应为
a)
、b)
,c)
不带标题文字,而不是(a)
,(b)
以及 ,(c)
带标题文字。 - 对子图的引用应
1,\,a
改为1a
。 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
,这是导致出现虚假空格的原因。