个性化(tikz)子图标题

个性化(tikz)子图标题

我希望我的子图的标题不仅显示当前子图计数器,还显示当前图号。因此,例如,子图1a将具有 caption 1.a - Caption。我设法通过更改\thesubfigure命令来做到这一点,但后来遇到了两个问题(MWE 如下):

  1. 如果我将图形标题放在图形下方(我想这样做),则在编译子图形标题时图形计数器尚未更新。手动更改计数器不起作用,因为在这种情况下图形标题会有错误的数字。(我不想每次都更改两次)

  2. 当我引用子图时,图形计数器会重复两次。

关于第二个问题,我发现了问题我想我可以将类似的东西改变\p@subfigure为仅显示\thesubfigure,但这会给我一个参考\thefigure.\thesubfigure,而我想引用子图而1a不是1.a

关于第一个问题,我能找到的最接近的解决方案是这个问题,但我不想手动添加每个数字,因为我的文档中有很多这样的数字。我知道这与解释的内容有关这里但是,如果我将图放在\caption子图之前,标题位置就会移动到顶部。

另外,如果能提供关于如何更改labelsep子图标题的任何提示,-我们将不胜感激。

信息:我向每个图添加子图标题的方式tikzpicture受到了此启发问题

\documentclass{article}
\usepackage{fullpage}
\usepackage{amsbsy, amscd, amsfonts, amssymb, amstext, amsmath, mathtools, amsthm} 
\usepackage{float, tikz, hyperref}
\usepackage{caption, subcaption}

\renewcommand{\thesubfigure}{\thefigure.\alph{subfigure}}
\captionsetup[subfigure]{labelfont=bf,labelformat=simple, labelsep=space}

\begin{document}

\begin{figure}[H]
\centering
 \begin{tikzpicture}
      \shade[ball color = gray!40, opacity = 0.4] (0,0) circle (2cm);
      \draw (0,0) circle (2cm);
      \node (c) at (-90:2) {};
      \node[text width=6cm,align=center,anchor=north] at ([yshift=-5mm]c.south) {\captionof{subfigure}{Sphere \label{subfig1}}};
 \end{tikzpicture}
%
 \begin{tikzpicture}
        \draw[black!80,thick,dashed] (2,2) circle (2cm);
        \begin{scope}[shift={(2,2)}]
            \node (c) at (-90:2) {};
        \end{scope}    
        \node[text width=6cm,align=center,anchor=north] at ([yshift=-5mm]c.south) {\captionof{subfigure}{Above view \label{subfig2}}};
 \end{tikzpicture}
\caption{A sphere in $\mathbb{R}^3$}
\label{fig}
\end{figure}

Reference: \ref{subfig1} . It should show 1a.

\end{document}

答案1

  1. 由于 ,示例文档无法在我的计算机上编译\captionof{subfigure}。所以我将它们更改为\subcaption。(根据https://tex.stackexchange.com/a/310400/205700 \captionof{subfigure}figure是错误的。我猜这就是您在使用子标题计数器时遇到麻烦的原因。)
  2. 如果点只出现在标题中,而不出现在参考文献中,则需要定义额外的标题标签格式,例如:
\DeclareCaptionLabelFormat{subfigure}{\thefigure.#2}
\captionsetup[subfigure]{labelformat=subfigure}

这样将保持编号方案、参考资料等的完整性,并且仅改变图中子标题的外观。

完整文档,包括上述两处更改:

\documentclass{article}
\usepackage{fullpage}
\usepackage{amsbsy, amscd, amsfonts, amssymb, amstext, amsmath, mathtools, amsthm}
\usepackage{float, tikz, hyperref}
\usepackage{caption, subcaption}

\DeclareCaptionLabelFormat{subfigure}{\thefigure.#2}
\captionsetup[subfigure]{labelfont=bf,labelformat=subfigure,labelsep=space}

\begin{document}

\begin{figure}[H]
\centering
 \begin{tikzpicture}
      \shade[ball color = gray!40, opacity = 0.4] (0,0) circle (2cm);
      \draw (0,0) circle (2cm);
      \node (c) at (-90:2) {};
      \node[text width=6cm,align=center,anchor=north] at ([yshift=-5mm]c.south) {\subcaption{Sphere \label{subfig1}}};
 \end{tikzpicture}
%
 \begin{tikzpicture}
        \draw[black!80,thick,dashed] (2,2) circle (2cm);
        \begin{scope}[shift={(2,2)}]
            \node (c) at (-90:2) {};
        \end{scope}
        \node[text width=6cm,align=center,anchor=north] at ([yshift=-5mm]c.south) {\subcaption{Above view \label{subfig2}}};
 \end{tikzpicture}
\caption{A sphere in $\mathbb{R}^3$}
\label{fig}
\end{figure}

Reference: \ref{subfig1} . It should show 1a.

\end{document}

答案2

使用subcaption (您已经加载的):

\documentclass{article}
\usepackage{fullpage}
\usepackage{amssymb, mathtools}
\usepackage{caption, subcaption}
\usepackage{tikz}

\usepackage{hyperref}

\begin{document}
\section{Test}
\begin{figure}[ht]
\centering
    \begin{subfigure}{0.45\linewidth}
    \centering
 \begin{tikzpicture}
      \shade[ball color = gray!40, opacity = 0.4] (0,0) circle (2cm);
      \draw (0,0) circle (2cm);
      \node (c) at (-90:2) {};
\end{tikzpicture}
\caption{Sphere}
\label{subfig1}
    \end{subfigure}
    \hfil
    \begin{subfigure}{0.45\linewidth}
    \centering
 \begin{tikzpicture}
        \draw[black!80,thick,dashed] (2,2) circle (2cm);
        \begin{scope}[shift={(2,2)}]
            \node (c) at (-90:2) {};
        \end{scope}
\end{tikzpicture}
    \caption{Above view};
     \label{subfig2}
\end{subfigure}
    \caption{A sphere in $\mathbb{R}^3$}
    \label{fig}
\end{figure}

Reference: \ref{subfig1} . It should show 1a.
\end{document}

笔记:包hyperref(除少数例外cleveref)必须在序言中最后加载。

在此处输入图片描述

相关内容