子图错位

子图错位

我正在尝试绘制两行上的 6 个子图。这是我的代码

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

\begin{document}
\begin{figure}[t]
     \centering
     \foreach \x in {1, 2, 3, 4, 5, 6}
     {
     \begin{subfigure}[t]{0.3\textwidth}
         \centering
         \includegraphics[width=\textwidth]{example-image-a}
         \caption{Test$\x$}
     \end{subfigure}
     \hfill
     }
     \caption{Title}
\end{figure}
\end{document}

它按预期工作,但是子图未对齐 在此处输入图片描述

所以图(2,1)看起来不错,但第二行的其他图在左边太多了。我该如何解决这个问题?我也尝试用[t][b]替换,[h]但无济于事。

答案1

您只需删除最后一个\hfill,这很容易:%在右括号(或\par)后添加:

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

\begin{document}
\begin{figure}[tp]

\foreach \x in {1, 2, 3, 4, 5, 6} {
  \begin{subfigure}[t]{0.3\textwidth}
  \includegraphics[width=\textwidth]{example-image-a}
    %{lDSX distr \x} {1, 5, 10, 15, 25, 50}
  \caption{Test$\x$}
  \end{subfigure}\hfill
}% <---- or \par

\caption{Title}
\end{figure}

\end{document}

为什么会发生这种情况?如果没有,%行尾会产生一个空格,而下面的空白行(或\caption)会产生一个\par,它只会删除胶水团。如果一开始没有生成空格,则最后的胶水团是\hfill,因此会被移除。

在此处输入图片描述

答案2

目前,您的代码\hfill在每个环境之后执行。但理想情况下,您的代码仅在环境 1、2、4 和 5之后subfigure执行- 并在环境 3 和 6 之后执行。\hfillsubfigure\par

这可以通过改变来实现

\hfill

\ifnum\x=3\par\else\ifnum\x=6\par\else\hfill\fi\fi

当然,如果你想在两行子图之间插入一些空白,你可以写

\ifnum\x=3\par\bigskip\else\ifnum\x=6\par\else\hfill\fi\fi

完整示例如下:

\documentclass{article}
\usepackage{subcaption}
\usepackage{tikz}

\begin{document}
\begin{figure}[t]
     %\centering % not needed
     \foreach \x in {1,...,6}
     {
     \begin{subfigure}[t]{0.3\textwidth}
         \includegraphics[width=\textwidth]{example-image-a}
         \caption{Test$\x$}
     \end{subfigure}
     \ifnum\x=3\par\else\ifnum\x=6\par\else\hfill\fi\fi
     }
     \caption{Title}
\end{figure}
\end{document}

在此处输入图片描述

相关内容