图像最后一行未填充时空间宽度错误

图像最后一行未填充时空间宽度错误

我编写了一个python脚本,并生成了一个latex脚本,其中使用\subcaption排列了多幅图像。核心代码:

....
\usepackage{subcaption}
....
\begin{figure}
    \begin{subfigure}[31]{0.2\textwidth}
        \includegraphics[width = \textwidth, height = \textwidth]
        {ly1_31.jpg}
        \caption{Channel 31}
        \label{fig: 31}
    \end{subfigure}
    \begin{subfigure}[97]{0.2\textwidth}
        \includegraphics[width = \textwidth, height = \textwidth]
        {ly1_97.jpg}
        \caption{Channel 97}
        \label{fig: 97}
    \end{subfigure}
    .......
    \caption{ Features maps manually selected from 512 maps }
    \label{fig} 
 \end{figure}

子图的代码除了 python 生成的通道号和文件名不同外,其他都一样。这里我有 14 张 .jpg 图片。最后一行图片之间的空白宽度明显比前三行短。(最后一行不够满。)我该如何控制该空白的宽度?

而且我也不确定空白的宽度是否是我{0.2\textwidth}在第 5 行及以后的行设置但当行已满时一行只能获得 4 幅图像的原因。(我想是的,但有详细解释吗?)

最后一个问题比较奇怪。请看截图。 在此处输入图片描述

有一张图片放错了位置(通道 227)。我确定我的 tex 文件中没有“7b”。所有图片大小相同。那么问题出在哪里?

欢迎任何想法。

答案1

这是一个重现您的问题的最小示例:

\documentclass{article}
\usepackage{subcaption}
\usepackage{graphicx}

\begin{document}

\begin{figure}
\centering

\begin{subfigure}[31]{0.2\textwidth}
\includegraphics[width = \textwidth]{example-image-a}
\caption{Channel 31}\label{fig:31}
\end{subfigure}
\begin{subfigure}[227]{0.2\textwidth}
\includegraphics[width = \textwidth]{example-image-b}
\caption{Channel 227}\label{fig:227}
\end{subfigure}

\end{figure}

\end{document}

在此处输入图片描述

错误在于使用的语法错误:可选参数应该\begin{subfigure}单个字符之间 bc 或者 t

修复:删除错误的位

\documentclass{article}
\usepackage{subcaption}
\usepackage{graphicx}

\begin{document}

\begin{figure}
\centering

\begin{subfigure}{0.2\textwidth}
\includegraphics[width = \textwidth]{example-image-a}
\caption{Channel 31}\label{fig:31}
\end{subfigure}
\begin{subfigure}{0.2\textwidth}
\includegraphics[width = \textwidth]{example-image-b}
\caption{Channel 227}\label{fig:227}
\end{subfigure}

\end{figure}

\end{document}

在此处输入图片描述

会发生什么?

代码会\begin{subfigure}检查是否提供了可选参数,否则假定提供了b;然后它会执行如下代码

\if<optional argument>b%
  <code when test returns true>%
\else
  <code when test returns false>%
\fi

在这种227情况下,文本变为

\if227b
  <code when test returns true>%
\else
  <code when test returns false>%
\fi

测试返回真的因为\if比较接下来的两个不可扩展标记,在本例中为22。根据规则,<true code>紧接着测试之后开始,并结束于\else\fi如果没有\else出现或),因此在本例中它也包含7b

如何让每行有五张图片且不留空格?

您应该删除由 之后的行尾生成的两个子图之间的空格\end{subfigure}

您可以利用 TeX 删除控制序列后的空格这一事实:

\documentclass{article}
\usepackage{subcaption}
\usepackage{graphicx}

\newcommand{\subfiguresep}{\hspace{0pt}}

\begin{document}

\begin{figure}
\centering

\begin{subfigure}{0.2\textwidth}
\includegraphics[width = \textwidth]{example-image-a}
\caption{Channel 31}\label{fig:31}
\end{subfigure}\subfiguresep
\begin{subfigure}{0.2\textwidth}
\includegraphics[width = \textwidth]{example-image-a}
\caption{Channel 31}\label{fig:31}
\end{subfigure}\subfiguresep
\begin{subfigure}{0.2\textwidth}
\includegraphics[width = \textwidth]{example-image-a}
\caption{Channel 31}\label{fig:31}
\end{subfigure}\subfiguresep
\begin{subfigure}{0.2\textwidth}
\includegraphics[width = \textwidth]{example-image-a}
\caption{Channel 31}\label{fig:31}
\end{subfigure}\subfiguresep
\begin{subfigure}{0.2\textwidth}
\includegraphics[width = \textwidth]{example-image-a}
\caption{Channel 31}\label{fig:31}
\end{subfigure}\subfiguresep
\begin{subfigure}{0.2\textwidth}
\includegraphics[width = \textwidth]{example-image-a}
\caption{Channel 31}\label{fig:31}
\end{subfigure}\subfiguresep
\begin{subfigure}{0.2\textwidth}
\includegraphics[width = \textwidth]{example-image-a}
\caption{Channel 31}\label{fig:31}
\end{subfigure}\subfiguresep
\begin{subfigure}{0.2\textwidth}
\includegraphics[width = \textwidth]{example-image-a}
\caption{Channel 31}\label{fig:31}
\end{subfigure}\subfiguresep
\begin{subfigure}{0.2\textwidth}
\includegraphics[width = \textwidth]{example-image-b}
\caption{Channel 227}\label{fig:227}
\end{subfigure}\subfiguresep

\end{figure}

\end{document}

在此处输入图片描述

允许\hspace{0pt}换行,不添加空格。如果您希望最后一行左对齐,请使用\raggedright而不是\centering

如果你希望子图之间有一些空间,你可以这样做

\documentclass{article}
\usepackage{subcaption}
\usepackage{graphicx}

\newcommand{\subfiguresep}{\hspace{2pt}}
\captionsetup[subfigure]{font=footnotesize}

\begin{document}

\begin{figure}
\centering

\begin{subfigure}{\dimexpr 0.2\textwidth-8pt}
\includegraphics[width = \textwidth]{example-image-a}
\caption{Channel 31}\label{fig:31}
\end{subfigure}\subfiguresep
\begin{subfigure}{\dimexpr 0.2\textwidth-8pt}
\includegraphics[width = \textwidth]{example-image-a}
\caption{Channel 31}\label{fig:31}
\end{subfigure}\subfiguresep
\begin{subfigure}{\dimexpr 0.2\textwidth-8pt}
\includegraphics[width = \textwidth]{example-image-a}
\caption{Channel 31}\label{fig:31}
\end{subfigure}\subfiguresep
\begin{subfigure}{\dimexpr 0.2\textwidth-8pt}
\includegraphics[width = \textwidth]{example-image-a}
\caption{Channel 31}\label{fig:31}
\end{subfigure}\subfiguresep
\begin{subfigure}{\dimexpr 0.2\textwidth-8pt}
\includegraphics[width = \textwidth]{example-image-a}
\caption{Channel 31}\label{fig:31}
\end{subfigure}\subfiguresep
\begin{subfigure}{\dimexpr 0.2\textwidth-8pt}
\includegraphics[width = \textwidth]{example-image-a}
\caption{Channel 31}\label{fig:31}
\end{subfigure}\subfiguresep
\begin{subfigure}{\dimexpr 0.2\textwidth-8pt}
\includegraphics[width = \textwidth]{example-image-a}
\caption{Channel 31}\label{fig:31}
\end{subfigure}\subfiguresep
\begin{subfigure}{\dimexpr 0.2\textwidth-8pt}
\includegraphics[width = \textwidth]{example-image-a}
\caption{Channel 31}\label{fig:31}
\end{subfigure}\subfiguresep
\begin{subfigure}{\dimexpr 0.2\textwidth-8pt}
\includegraphics[width = \textwidth]{example-image-b}
\caption{Channel 227}\label{fig:227}
\end{subfigure}\subfiguresep

\end{figure}

\end{document}

请注意,我必须减小子标题的字体大小,否则它会超出图像宽度。

在此处输入图片描述

相关内容