
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.
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}
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}
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 227
caso, o texto fica
\if227b
<code when test returns true>%
\else
<code when test returns false>%
\fi
e o teste retornaverdadeiroporque \if
compara os próximos dois tokens não expansíveis, neste caso 2
e 2
. Por regra, o <true code>
começa logo após o teste e termina em \else
(ou \fi
se não \else
aparecer), 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}
O \hspace{0pt}
permite uma quebra de linha, sem adicionar espaço. Se você preferir a última linha alinhada à esquerda, use \raggedright
em 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.