Falsche Leerzeichenbreite, wenn letzte Bildzeile nicht ausgefüllt ist

Falsche Leerzeichenbreite, wenn letzte Bildzeile nicht ausgefüllt ist

Ich schreibe ein Python-Skript und erzeuge ein Latex-Skript, in dem mehrere Bilder mit \subcaption angeordnet werden. Kerncode:

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

Der Code der Unterabbildungen ist bis auf die von Python generierte Kanalnummer und den Dateinamen derselbe. Hier habe ich 14 JPG-Bilder. Und die Breite des Leerraums zwischen den Bildern in der letzten Reihe ist offensichtlich kürzer als in den vorherigen 3 Reihen. (Die letzte Reihe ist nicht voll.) Wie kann ich die Breite dieses Raums steuern?

Und ich bin auch nicht sicher, ob die Breite des Leerraums der Grund dafür ist, dass ich {0.2\textwidth}in der 5. Zeile und den folgenden Zeilen zwar 4 Bilder in einer Reihe erhalte, wenn die Reihe voll ist. (Ich denke schon, aber gibt es eine ausführlichere Erklärung?)

Die letzte Frage ist ziemlich seltsam. Siehe Screenshot. Bildbeschreibung hier eingeben

Ein Bild geht an die falsche Stelle (Kanal 227). Und ich bin sicher, dass in meiner Tex-Datei kein „7b“ vorkommt. Alle Bilder haben dieselbe Größe. Wo liegt also das Problem?

Alle Ideen sind willkommen.

Antwort1

Hier ist ein Minimalbeispiel, das Ihr Problem reproduziert:

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

Bildbeschreibung hier eingeben

Der Fehler liegt in der falschen Syntax: Das optionale Argument \begin{subfigure}sollte eineinzelnes Zeichen unter b,c oder t.

Fix: Entfernen Sie die falschen Teile

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

Bildbeschreibung hier eingeben

Was geschieht?

Der Code für \begin{subfigure}prüft, ob ein optionales Argument angegeben ist, andernfalls wird davon ausgegangen, dass dies der Fall ist b. Anschließend führt er Code wie folgt aus:

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

In diesem 227Fall wird der Text

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

und der Test kehrt zurückWAHRweil \ifdie nächsten beiden nicht erweiterbaren Token vergleicht, in diesem Fall 2und 2. Gemäß der Regel <true code>beginnt direkt nach dem Test und endet bei \else(oder \fiwenn kein \elsekommt), sodass es in diesem Fall auch enthält 7b.

Wie erhält man fünf Bilder pro Reihe ohne Zwischenraum?

Sie sollten das Leerzeichen zwischen zwei Unterabbildungen entfernen, das durch das Zeilenende nach entsteht \end{subfigure}.

Man kann sich zunutze machen, dass TeX Leerzeichen nach Steuersequenzen entfernt:

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

Bildbeschreibung hier eingeben

Das \hspace{0pt}ermöglicht einen Zeilenumbruch, bei dem kein Leerzeichen hinzugefügt wird. Wenn Sie die letzte Zeile lieber linksbündig haben möchten, verwenden Sie \raggedrightanstelle von \centering.

Wenn Sie etwas Abstand zwischen den Unterfiguren wünschen, können Sie Folgendes tun:

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

Beachten Sie, dass ich die Schriftgröße für die Unterüberschrift reduzieren musste, da sie sonst die Bildbreite überschritten hätte.

Bildbeschreibung hier eingeben

verwandte Informationen