使用 TikZ 叠加子图标题

使用 TikZ 叠加子图标题

我正在尝试将图形标题放在图形上方。我找到了一些可以做到这一点的代码,我可以让它适用于普通图形 - 例如,我可以将“图 1”叠加在图形上方。但是,它不适用于叠加子图的标题,例如“(a)”等。请参阅我帖子末尾的绘制示例,了解我想要做什么。

在下面的示例中,我粘贴了尝试使用的代码。子图出现在文档中,但缺少标题。正常图形正常工作,标题以白色显示在图形中心。我不太明白这段代码是如何工作的,所以我很难修复子图的情况,但我猜这与线条有关?\gdef\capoverlay{#1#2#3\par}有人知道如何让它工作吗?

谢谢你的帮助!

\documentclass{article}
\usepackage{graphicx,caption,subcaption,tikz}

\usetikzlibrary{calc}
\DeclareCaptionFormat{overlay}{\gdef\capoverlay{#1#2#3\par}}
\DeclareCaptionStyle{overlay}{format=overlay}

\newcommand{\captionOverlay}[1]{%
\captionsetup{format=overlay}
\caption{}
\begin{tikzpicture}
\node[anchor=south west,inner sep=0](image)at(0,0){#1};
\begin{scope}[x={(image.south east)},y={(image.north west)}]
\draw let \p1 = (1,0) in node[color=white] at (0.5,0.5) {\capoverlay};
\end{scope}
\end{tikzpicture}%
}

\begin{document}

\begin{figure}[htpb]
\centering

\begin{subfigure}[b]{0.3\textwidth}
\centering
\captionOverlay{\includegraphics[width=\textwidth]{image03}}
\label{subA}
\end{subfigure}
%
%
\begin{subfigure}[b]{0.3\textwidth}
\centering
\captionOverlay{\includegraphics[width=\textwidth]{image}}
\label{subB}
\end{subfigure}

\caption{}
\label{mainFig}
\end{figure}


\begin{figure}[htpb]
\centering
\captionOverlay{\includegraphics[width=\textwidth]{image}}
\label{normalFig}
\end{figure}

\end{document}

期望结果(如果图像是黑色矩形)

答案1

这似乎有效,但我真的不明白为什么。请注意,我没有您的图片,所以我不得不替换它们,而且白色在示例中也显示不出来mwe。但是,如果您仔细观察,您可以看到标题……

\documentclass{article}
\usepackage{graphicx,caption,subcaption,tikz}
\usetikzlibrary{backgrounds}

\usetikzlibrary{calc}
\DeclareCaptionFormat{overlay}{\gdef\capoverlay{#1#2#3\par}}
\DeclareCaptionStyle{overlay}{format=overlay}
\DeclareCaptionFormat{suboverlay}{\gdef\subcapoverlay{(\thesubfigure) #3\par}}
\DeclareCaptionStyle{suboverlay}{format=suboverlay}

\newcommand{\captionOverlay}[1]{%
  \captionsetup{format=overlay}
  \caption{}%
  \begin{tikzpicture}
    \node [inner sep=0] (image) {#1};
    \draw node [white] {\capoverlay};
  \end{tikzpicture}%
}
\captionsetup[subfigure]{format=suboverlay}
\newcommand{\subcaptionOverlay}[1]{%
  \subcaption{}%
  \begin{tikzpicture}
    \node [inner sep=0] (image) {#1};
    \draw node [white] {\subcapoverlay};
  \end{tikzpicture}%
}

\begin{document}

  \begin{figure}[htpb]
    \centering
    \begin{subfigure}[b]{.3\textwidth}
      \centering
      \subcaptionOverlay{\includegraphics[width=\textwidth]{example-image-a}}
      \label{subA}
    \end{subfigure}
    \begin{subfigure}[b]{0.3\textwidth}
      \centering
      \subcaptionOverlay{\includegraphics[width=\textwidth]{example-image-a}}
      \label{subB}
    \end{subfigure}
    \caption{}
    \label{mainFig}
  \end{figure}

  \begin{figure}[htpb]
    \centering
    \captionOverlay{\includegraphics[width=\textwidth]{example-image-a}}
    \label{normalFig}
  \end{figure}

\end{document}

叠加字幕

相关内容