Неправильная ширина пробела, если последняя строка изображения не заполнена

Неправильная ширина пробела, если последняя строка изображения не заполнена

Я пишу скрипт на 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. И ширина пустого пространства между изображениями в последней строке, очевидно, короче, чем в предыдущих 3 строках. (Последняя строка не полная.) Как я могу контролировать ширину этого пространства?

И я также не уверен, является ли ширина пустого пространства причиной того, что я устанавливаю {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}должен бытьодиночный символ среди b,c или 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сравнивает следующие два нерасширяемых токена, в данном случае 2и 2. По правилу, <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}

Обратите внимание, что мне пришлось уменьшить размер шрифта для субтитров, иначе они бы превысили ширину изображения.

введите описание изображения здесь

Связанный контент