我正在尝试绘制两行上的 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 之后执行。\hfill
subfigure
\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}