Largura do espaço errada quando a última linha da imagem não foi preenchida

Largura do espaço errada quando a última linha da imagem não foi preenchida

Eu escrevo um script python e gero um script látex no qual várias imagens são organizadas usando \subcaption. Código principal:

....
\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}

O código das subfiguras é o mesmo, exceto o número do canal e o nome do arquivo gerado pelo python. Aqui tenho 14 imagens .jpg. E a largura do espaço em branco entre as imagens na última linha é obviamente menor que as 3 linhas anteriores. (A última linha não está cheia.) Como posso controlar a largura desse espaço?

E também não tenho certeza se a largura do espaço em branco é o motivo pelo qual defini {0.2\textwidth}na 5ª linha e nas linhas posteriores, mas só obtenho 4 imagens em uma linha quando a linha está cheia. (Acho que sim, mas alguma explicação detalhada?)

A última pergunta é bastante estranha. Veja a captura de tela. insira a descrição da imagem aqui

Há uma imagem que vai para o lugar errado (canal 227). E tenho certeza de que não há "7b" no meu arquivo tex. Todas as imagens são do mesmo tamanho. Então qual é o problema?

Qualquer ideia é bem-vinda.

Responder1

Aqui está um exemplo mínimo que reproduz seu problema:

\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}

insira a descrição da imagem aqui

O erro está na sintaxe errada usada: o argumento opcional para \begin{subfigure}deveria ser umúnico personagem entre b,c ou t.

Correção: remova os bits errados

\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}

insira a descrição da imagem aqui

O que acontece?

O código \begin{subfigure}verifica se um argumento opcional é fornecido, caso contrário, assume que é b; então ele faz um código como

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

No 227caso, o texto fica

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

e o teste retornaverdadeiroporque \ifcompara os próximos dois tokens não expansíveis, neste caso 2e 2. Por regra, o <true code>começa logo após o teste e termina em \else(ou \fise não \elseaparecer), portanto, neste caso, também contém 7b.

Como obter cinco imagens por linha sem espaço?

Você deve remover o espaço entre duas subfiguras, gerado pelo final de linha após \end{subfigure}.

Você pode explorar o fato de que o TeX remove espaços após as sequências de controle:

\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}

insira a descrição da imagem aqui

O \hspace{0pt}permite uma quebra de linha, sem adicionar espaço. Se você preferir a última linha alinhada à esquerda, use \raggedrightem vez de \centering.

Se você quiser algum espaço entre as subfiguras, você pode fazer

\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}

Observe que tive que reduzir o tamanho da fonte da sublegenda, caso contrário ela excederia a largura da imagem.

insira a descrição da imagem aqui

informação relacionada