使用宏的带有子图的空白

使用宏的带有子图的空白

编辑

egreg 提出的答案对我来说不起作用:

在此处输入图片描述

当将 更改outer sep为时outer sep=-10pt,不会移动图像,而只是移动标签,并且空白仍然存在。

在此处输入图片描述

我猜这表明白色空间是在 tikzpicture 环境之外的某处生成的。

有任何想法吗?

最初的问题

我想将多个子图放在一个图形中的多行中。由于我不希望几行图像被子图的子标题分隔开,因此我定义了一个宏,使用 tikz 在图像上放置标签并使用以下命令\phantomsubcaption

\newcommand{\customcaption}[4]%
{%
    {%
    \tikz%
        {%
            \node[anchor=south west,inner sep=0] (image) at (0,0) {\includegraphics[#1]{#2}};%
            \begin{scope}[x={(image.south east)},y={(image.north west)}]%
                \draw[white] (0,0) node [font=\footnotesize, anchor=south west] {#3};%
            \end{scope}%
        }%
        \phantomsubcaption\label{#4}%
    }%
}%
% Macro to typeset a label onto a picture and putting a \phantomlabel for reference
% Arguments are: #1 Dimension of the graphic, #2 file path, #3 drawn label, #4 reference label

但是,宏会在图像周围产生空白,我无法消除。

在此处输入图片描述

我需要做什么来防止出现空白?

\includegraphics这里是用 tikz 绘制的矩形替换的 MWE :

\documentclass[12pt,oneside,a4paper]{book}
%
\usepackage{tikz}
\usepackage[font+=footnotesize, subrefformat=parens]{subcaption}
%
\newcommand{\customcaption}[2]%
{%
    {%
    \tikz%
        {%
            \node[anchor=south west,inner sep=0, fill=black, shape=rectangle, minimum size=3cm] (image) at (0,0) {};%
            \begin{scope}[x={(image.south east)},y={(image.north west)}]%
                \draw[white] (0,0) node [font=\footnotesize, anchor=south west] {#1};%
            \end{scope}%
        }%
        \phantomsubcaption\label{#2}%
    }%
}%
%
\begin{document}%
%
\begin{figure}%
    \centering
    \customcaption{(a)}{a}%
    \customcaption{(b)}{b}%
    \customcaption{(c)}{c}%
\end{figure}%
%
\end{document}

答案1

你忘了outer sep

不要对行尾着迷!;-)

\documentclass[12pt,oneside,a4paper]{book}

\usepackage{tikz}
\usepackage[font+=footnotesize, subrefformat=parens]{subcaption}

\newcommand{\customcaption}[2]{{%
  \begin{tikzpicture}
  \node[
    anchor=south west,
    inner sep=0,
    outer sep=-0.2pt,
    fill=black,
    shape=rectangle,
    minimum size=3cm
  ] (image) at (0,0) {};
  \begin{scope}[x={(image.south east)},y={(image.north west)}]
    \draw[white] (0,0) node [font=\footnotesize, anchor=south west] {#1};
  \end{scope}
  \end{tikzpicture}%
  \phantomsubcaption\label{#2}%
}}

\begin{document}

\begin{figure}
\centering
\customcaption{(a)}{a}%
\customcaption{(b)}{b}%
\customcaption{(c)}{c}%
\end{figure}

\end{document}

内的空格tikzpicture将被忽略(但当然,出于语法目的,它们是必需的)。因此,您只需要%在 之后\end{tikzpicture}

或之后不需要%有。\begin{figure}\end{figure}

在此处输入图片描述

相关内容