![个性化(tikz)子图标题](https://linux22.com/image/420424/%E4%B8%AA%E6%80%A7%E5%8C%96%EF%BC%88tikz%EF%BC%89%E5%AD%90%E5%9B%BE%E6%A0%87%E9%A2%98.png)
我希望我的子图的标题不仅显示当前子图计数器,还显示当前图号。因此,例如,子图1a
将具有 caption 1.a - Caption
。我设法通过更改\thesubfigure
命令来做到这一点,但后来遇到了两个问题(MWE 如下):
如果我将图形标题放在图形下方(我想这样做),则在编译子图形标题时图形计数器尚未更新。手动更改计数器不起作用,因为在这种情况下图形标题会有错误的数字。(我不想每次都更改两次)
当我引用子图时,图形计数器会重复两次。
关于第二个问题,我发现了问题我想我可以将类似的东西改变\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
- 由于 ,示例文档无法在我的计算机上编译
\captionof{subfigure}
。所以我将它们更改为\subcaption
。(根据https://tex.stackexchange.com/a/310400/205700\captionof{subfigure}
figure
是错误的。我猜这就是您在使用子标题计数器时遇到麻烦的原因。) - 如果点只出现在标题中,而不出现在参考文献中,则需要定义额外的标题标签格式,例如:
\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
)必须在序言中最后加载。