我正在使用caption
和subcaption
包,floatrow
并且想改变引用的格式\ref
。
首先这是我目前的标题设置:
\DeclareCaptionSubType[alph]{figure}
\captionsetup[subfigure]{labelformat=brace,justification=centerlast}
\captionsetup{subrefformat=brace}
我想要实现以下目标(全部针对子图):
- 标签应为
\alph)
,例如 a) - a
\subref{subfigureLabel}
或\ref{subfigureLabel}
应该基本上返回标签:\alph)
,例如 a) - a
\ref{compositeFigure}
应该返回前缀、图形编号、空格,后跟标签(包括括号),例如“图 1.1 a)”,(基本上在子图的标签后附加一个空格)。
如你所见,我解决了(不太令人满意)1. 和 2.,但我在解决三个问题时遇到了困难。首先,我找不到类似的东西refformat
,但是有好的理由是否存在subrefformat
。但是我只想使用\subref
简短版本(参见 2.),所以我不能使用它。此外,我想知道是否有一个选项可以用一个命令设置label
和subref
格式(我认为平等地定义它们是合理且常见的)。
PS:我看过https://tex.stackexchange.com/a/122306/19326但是,a) 对于子图来说,b) 看起来比我希望的更混乱/更复杂,但如果这就是它所需要的......
答案1
我不确定这是否是想要的结果,但这对于评论来说太长了。子图的标签格式设置为simple
(只有计数器,没有括号);\thesubfigure
重新定义为包含括号,然后\p@subfigure
(交叉引用子图时使用的前缀)重新定义为计数器的表示形式figure
,后跟不可中断的空格:
\documentclass{book}
\usepackage{subcaption}
\usepackage{graphicx}
\DeclareCaptionSubType[alph]{figure}
\captionsetup[subfigure]{labelformat=simple,justification=centerlast}
\renewcommand\thesubfigure{\alph{subfigure})}
\makeatletter
\renewcommand\p@subfigure{\thefigure~}
\makeatother
\begin{document}
\chapter{Test chapter}
A reference to the figure:~\ref{fig:test}
A reference to the first subfigure:~\ref{sfig:testa}
A subreference to the first subfigure:~\subref{sfig:testa}
A reference to the second subfigure:~\ref{sfig:testb}
A subreference to the second subfigure:~\subref{sfig:testb}
\begin{figure}[!ht]
\begin{subfigure}{0.5\textwidth}
\centering
\includegraphics[height=4cm]{example-image-a}
\caption{a subfigure}
\label{sfig:testa}
\end{subfigure}%
\begin{subfigure}{0.5\textwidth}
\centering
\includegraphics[height=4cm]{example-image-b}
\caption{another subfigure}
\label{sfig:testb}
\end{subfigure}
\caption{a figure with two subfigures}
\label{fig:test}
\end{figure}
\end{document}
答案2
该解决方案通过重新定义\sublabel
来引入重新格式化。\ref
\@currentlabel
\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{graphicx}
\usepackage{caption}
\usepackage{floatrow}%
%\usepackage{caption}
\usepackage{subcaption}
%\usepackage{subfig}
\usepackage{float}
\makeatletter
\newcommand{\sublabel}[1]{\protected@edef\@currentlabel{\thefigure(\thesubfigure)}\label{#1}}
\makeatother
\begin{document}
\noindent
Citation test - Figure \ref{figure}
\noindent
\ref{figure_1} and \subref{figure_1}\newline
\captionsetup{subrefformat=parens}%
\ref{figure_2} and \subref{figure_2}
\begin{figure}[!ht]
\centering
\begin{subfigure}{0.5\textwidth}
\includegraphics[width=\textwidth]{example-image-a}
\caption{Caption 1}
\sublabel{figure_1}
\end{subfigure}%
%\qquad
%add desired spacing between images, e. g. ~, \quad, \qquad etc.
%(or a blank line to force the subfigure onto a new line)
\begin{subfigure}{0.5\textwidth}
\centering
\includegraphics[width=\textwidth]{example-image-b}
\caption{Caption 2}
\sublabel{figure_2}
\end{subfigure}
\caption{Caption of the figure}\label{figure}
\end{figure}
\end{document}