O espaçamento da lista é diferente dentro e fora da minipágina

O espaçamento da lista é diferente dentro e fora da minipágina

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 multicolsambiente; no entanto, para esta questão específica, a divisão cinquenta por cinquenta da largura da página multicolsfaz 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}

saída

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\itemsepem vários lugares mostra que \itemsepnão é realmente o comprimento que está sendo alterado secretamente. Prefiro entender o que realmente está acontecendo.)

Responder1

A minipageredefine explicitamente a profundidade da lista, veja latex.ltxpara 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 enumerateambiente interno se comporta como se estivesse novamente no primeiro nível, usando o \itemsepvalor 'apropriado' para este nível, 4.0pt plus 2.0pt minus 1.0ptneste 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 \@enumdepthainda possui o valor 2 então (sendo o segundo nível).

Um truque barato é definir o \@mplistdepthcontador 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 \mpsavelistdepthtruese a preservação deve ser habilitada e \mpsavelistdepthfalsedesabilitá-la.

Isso funciona enumerateapenas para ambientes, já que \@enumdepthtrata de enumerate, não de itemize(o contador de profundidade relevante é \@itemdepthentã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}

insira a descrição da imagem aqui

informação relacionada