更改子图的参考格式

更改子图的参考格式

我正在使用captionsubcaption包,floatrow并且想改变引用的格式\ref

首先这是我目前的标题设置:

\DeclareCaptionSubType[alph]{figure}
\captionsetup[subfigure]{labelformat=brace,justification=centerlast}
\captionsetup{subrefformat=brace}

我想要实现以下目标(全部针对子图):

  1. 标签应为\alph),例如 a)
  2. a\subref{subfigureLabel}\ref{subfigureLabel}应该基本上返回标签:\alph),例如 a)
  3. a\ref{compositeFigure}应该返回前缀、图形编号、空格,后跟标签(包括括号),例如“图 1.1 a)”,(基本上在子图的标签后附加一个空格)。

如你所见,我解决了(不太令人满意)1. 和 2.,但我在解决三个问题时遇到了困难。首先,我找不到类似的东西refformat,但是有好的理由是否存在subrefformat。但是我只想使用\subref简短版本(参见 2.),所以我不能使用它。此外,我想知道是否有一个选项可以用一个命令设置labelsubref格式(我认为平等地定义它们是合理且常见的)。

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}

演示

相关内容