Estou preparando um exame e quero uma ilustração ao lado de um problema de múltipla escolha. Geralmente para isso coloco a questão e/ou escolhas em um multicols
ambiente; no entanto, para esta questão específica, a divisão cinquenta por cinquenta da largura da página multicols
faz com que o texto de cada opção seja quebrado, enquanto a imagem é bastante estreita.
Achei que poderia conseguir o que queria colocando as opções em um arquivo minipage
, mas a minipágina altera o espaçamento entre as opções:
\documentclass{article} %% 'exam' class not needed for MWE
\begin{document}
\begin{enumerate}
\item
This is a standard nested enumeration.
\begin{enumerate}
\item Spacing within wrapped text and between lines of the enumeration
looks okay to me.
\item adsflkj adsflkj
\item qeworui qeworui
\item zcx,vmn zcx,vmn
\item lkjasdf lkjasdf
\item mbnnert mbnnert
\end{enumerate}
\item
The possible answers to this question are in a minipage,
to accomodate an image to the right
\begin{minipage}[t]{0.6\linewidth}
\begin{enumerate}
\item Spacing within wrapped text is the same, but the spacing
between items is different.
\item adsflkj adsflkj
\item qeworui qeworui
\item zcx,vmn zcx,vmn
\item lkjasdf lkjasdf
\item mbnnert mbnnert
\end{enumerate}
\end{minipage}
\hfill
\fbox{Tikz image here}
\end{enumerate}
\end{document}
A diferença me irrita. Como posso consertar isso?
(Posso hackear, mais ou menos, fazendo isso \addtolength{\itemsep}{-1ex}
na minipágina. Mas exibir \the\itemsep
em vários lugares mostra que \itemsep
não é realmente o comprimento que está sendo alterado secretamente. Prefiro entender o que realmente está acontecendo.)
Responder1
A minipage
redefine explicitamente a profundidade da lista, veja latex.ltx
para isso, na linha 4886 o seguinte código pode ser encontrado:
\let\@listdepth\@mplistdepth \@mplistdepth\z@
O importante é \@mplistdepth\z@
, ou seja, profundidade de lista zero - O enumerate
ambiente interno se comporta como se estivesse novamente no primeiro nível, usando o \itemsep
valor 'apropriado' para este nível, 4.0pt plus 2.0pt minus 1.0pt
neste caso. (O mesmo é verdade para itemize
). Os demais espaçamentos são utilizados então, assim como se estivessem no primeiro nível de um ambiente de enumeração/itemização, esse é o motivo do recuo de (a)
etc. como pode ser visto na imagem do OP.
Curiosamente, o formato do contador de enumeração não é zerado, pois \@enumdepth
ainda possui o valor 2 então (sendo o segundo nível).
Um truque barato é definir o \@mplistdepth
contador explicitamente para 1
, manualmente, como sempre.
\documentclass{article} %% 'exam' class not needed for MWE
\usepackage{enumitem}
\begin{document}
\begin{enumerate}
\item This is a standard nested enumeration.
\begin{enumerate}
\item Spacing within wrapped text and between lines of the enumeration
looks okay to me.
\item adsflkj adsflkj
\item qeworui qeworui
\item zcx,vmn zcx,vmn
\item lkjasdf lkjasdf
\item mbnnert mbnnert
\end{enumerate}
\item The possible answers to this question are in a minipage,
to accomodate an image to the right
\begin{minipage}[t]{0.6\linewidth}
% minipage does this thing here: \let\@listdepth\@mplistdepth \@mplistdepth\z@
\makeatletter
\@mplistdepth=1
\makeatother
\begin{enumerate}
\item Spacing within wrapped text is the same, but the spacing
between items is different.
\item adsflkj adsflkj
\item qeworui qeworui
\item zcx,vmn zcx,vmn
\item lkjasdf lkjasdf
\item mbnnert mbnnert
\end{enumerate}
\end{minipage}
\hfill
\fbox{Tikz image here}
\end{enumerate}
\end{document}
Uma maneira 'melhor' é corrigir @iiiminipage
(o nível mais interno do minipage
'ambiente' e alertá-lo de que deve preservar a profundidade da lista, dependendo de uma condicional:
Diga \mpsavelistdepthtrue
se a preservação deve ser habilitada e \mpsavelistdepthfalse
desabilitá-la.
Isso funciona enumerate
apenas para ambientes, já que \@enumdepth
trata de enumerate
, não de itemize
(o contador de profundidade relevante é \@itemdepth
então)
\documentclass{article} %% 'exam' class not needed for MWE
\usepackage{enumitem}
\usepackage{xpatch}
\newif\ifmpsavelistdepth
\mpsavelistdepthtrue % Enabling the list depth save for enumerate environments
\makeatletter
\xpatchcmd{\@iiiminipage}{%
\let\@listdepth\@mplistdepth \@mplistdepth\z@
}{%
\let\@listdepth\@mplistdepth
\ifmpsavelistdepth
\@mplistdepth\@enumdepth % use the current depth (stored in \@enumdepth
\fi
}{\typeout{Patching minipage succeeded}}{\typeout{Patching failed}}% End of patching
\makeatother
\begin{document}
\begin{enumerate}
\item This is a standard nested enumeration.
\begin{enumerate}
\item Spacing within wrapped text and between lines of the enumeration
looks okay to me.
\item adsflkj adsflkj
\item qeworui qeworui
\item zcx,vmn zcx,vmn
\item lkjasdf lkjasdf
\item mbnnert mbnnert
\end{enumerate}
\item The possible answers to this question are in a minipage,
to accomodate an image to the right
\begin{minipage}[t]{0.6\linewidth}
\begin{enumerate}
\item Spacing within wrapped text is the same, but the spacing
between items is different.
\item adsflkj adsflkj
\item qeworui qeworui
\item zcx,vmn zcx,vmn
\item lkjasdf lkjasdf
\item mbnnert mbnnert
\end{enumerate}
\end{minipage}
\hfill
\fbox{Tikz image here}
\end{enumerate}
\end{document}