子图主体的背景无缝,但标题不无缝

子图主体的背景无缝,但标题不无缝

我有 3 个子图:

\begin{figure}
    \subfloat[Apple]{
        \includegraphics{apple}
    }
    \subfloat[Orange]{
        \includegraphics{orange}
    }
    \subfloat[Cherry]{
        \includegraphics{cherry}
    }
\end{figure}

我希望图像行背后的背景为纯黑色矩形,图像之间没有间隙。我该如何实现?

我已经colorbox在单独的图像周围使用了,但这会在它们之间留下空隙。如果我将整个图像包裹起来,colorbox那么标题也会有背景颜色,这是我不想要的。

我也尝试过tikz在左上角和右下角放置一个节点,但是使用overlay会将黑框放在图像顶部,而不是下方。

答案1

从代码中删除空格:

\documentclass[]{scrreprt}
\usepackage[demo]{graphicx}
\usepackage{subfig,xcolor}
\begin{document}

\begin{figure}
    \subfloat[Apple]{%<---
        \colorbox{red}{\includegraphics{apple}}%<...
    }
    \subfloat[Orange]{%<---
        \colorbox{red}{\includegraphics{orange}}%<---
    }
    \subfloat[Cherry]{%<---
        \colorbox{red}{\includegraphics{cherry}}%
    }
\end{figure}

\end{document}

答案2

这个根本不使用 minipages、makebox 或 vphantom:


\documentclass{article}
\usepackage{caption,subcaption,xcolor}

%\captionsetup[subfigure]{margin=5pt}

\begin{document}

\begin{figure}
\captionsetup[subfigure]{margin=5pt}
  \centering
  \subcaptionbox
    {A long caption about cherries that spans two lines}
    [0.32\linewidth]
    {\colorbox{black}{
      {\color{red}\rule{0.3\linewidth}{90pt}}
      }
    }
  \subcaptionbox
    {A long caption about oranges that spans two lines}
    [0.32\linewidth]
    {\colorbox{black}{
      {\color{orange}\rule{0.3\linewidth}{90pt}}
      }
    }
  \subcaptionbox
    {A long caption about apples that spans two lines}
    [0.32\linewidth]
    {\colorbox{black}{
      {\color{green}\rule{0.3\linewidth}{90pt}}
      }
    }

  \caption{Some fruits, with a black background to help with contrast.}
\end{figure}

\end{document} 

答案3

迷你页面和captionsetup救援

@Ulrike Fischer 的回答是一个很好的开始。通过将子图形精确地放在彼此旁边,您可以让每个子图形colorbox接触下一个子图形。

但是,这会导致字幕彼此太近。为了解决这个问题,我将每个字幕包裹subfloat在 中minipage,并添加\captionsetup{width=0.95\textwidth}以限制子字幕的宽度。确保每个字幕的内容colorbox与所需空间一样宽也很重要,因此我又使用了minipage

例如:

\begin{figure}
    \centering
    \begin{minipage}{0.32\linewidth}
        \captionsetup{width=0.95\textwidth}
        \subfloat[A long caption about cherries that spans two lines]{
            \colorbox{black}{
                \begin{minipage}{\linewidth}
                    \centering
                    {\color{red}\rule{0.8\textwidth}{90pt}}
                \end{minipage}
            }
        }
    \end{minipage}
    \begin{minipage}{0.32\linewidth}
        \captionsetup{width=0.95\textwidth}
        \subfloat[A long caption about oranges that spans two lines]{
            \colorbox{black}{
                \begin{minipage}{\linewidth}
                    \centering
                    {\color{orange}\rule{0.8\textwidth}{90pt}}
                \end{minipage}
            }
        }
    \end{minipage}
    \begin{minipage}{0.32\linewidth}
        \captionsetup{width=0.95\textwidth}
        \subfloat[A long caption about apples that spans two lines]{
            \colorbox{black}{
                \begin{minipage}{\linewidth}
                    \centering
                    {\color{green}\rule{0.8\textwidth}{90pt}}
                \end{minipage}
            }
        }
    \end{minipage}
    \caption{Some fruits, with a black background to help with contrast.}
\end{figure}

结果是:

替代文本

改善这一点!

我倾向于过度使用迷你页面。请发布更好的答案,我会接受。

答案4

嗯,您确实使用了很多小页面。正如我在评论中所说,我会使用 \captionsetup{margin=...}。您还可以在浮动之间放置黑色规则。(我使用 makebox 来获得一点悬垂,这将关闭由于像素舍入而产生的小间隙)。

\documentclass[]{scrreprt}
\usepackage[demo]{graphicx}
\usepackage{subfig,xcolor}
\begin{document}

\begin{figure}\captionsetup{margin=2ex}\fboxsep=1ex
   \subfloat[A long caption about apples that spans two lines]{%
        \colorbox{black}{{\color{red}\rule{0.3\linewidth}{90pt}}}%<...
    }%
   \makebox[1cm]{\colorbox{black}{\vphantom{\rule{0.3\linewidth}{90pt}}\hspace{1cm}}}%
  \subfloat[A long caption about apples that spans two lines]{%
        \colorbox{black}{{\color{orange}\rule{0.3\linewidth}{90pt}}}%<---
    }
    \subfloat[Cherry]{%<---
        \colorbox{black}{{\color{green}\rule{0.3\linewidth}{90pt}}}%
    }
\end{figure}
\end{document}

相关内容