リストの間隔はミニページの内側と外側で異なります

リストの間隔はミニページの内側と外側で異なります

試験を準備しているのですが、多肢選択問題の横にイラストを入れたいと思っています。通常、この目的のためには、質問や選択肢を環境内に配置しますmulticolsが、この特定の質問では、ページ幅が 50/50 に分割されているため、multicols各オプションのテキストが折り返され、画像がかなり狭くなってしまいます。

選択肢を に入れることで望みどおりの結果が得られると思いましたminipageが、ミニページでは選択肢間の間隔が変わります。

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

出力

この違いが気になります。どうすれば修復できますか?

\addtolength{\itemsep}{-1ex}(ミニページで実行することで、多かれ少なかれこれをハックすることができます。しかし、\the\itemsepさまざまな場所で表示すると\itemsep、実際には秘密裏に変更されている長さではないことがわかります。実際に何が起こっているのかを理解したいと思っています。)

答え1

A はminipageリストの深さを明示的にリセットします。latex.ltxこれについては、4886 行目に次のコードがあります。

\let\@listdepth\@mplistdepth \@mplistdepth\z@

重要なのは\@mplistdepth\z@、リストの深さがゼロであることを意味します。内部環境は、このレベルに適切な値enumerateを使用して、再び最初のレベルにあるかのように動作します。この場合、 です。( についても同様です)。他のスペースは、 が列挙/項目化環境の最初のレベルにある場合と同様に使用されます。これが、OP の画像からわかるように、 などのインデントの理由です。\itemsep4.0pt plus 2.0pt minus 1.0ptitemize(a)

興味深いことに、列挙カウンターの形式はリセットされません。\@enumdepth値がまだ 2 (2 番目のレベル) であるためです。

ただし、1 つの安価なトリックは、手動で \@mplistdepthカウンターを明示的に に設定することです。1

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

「より良い」方法は、 「環境」@iiiminipageの最も内側のレベルにパッチを適用しminipage、条件に応じてリストの深さを維持する必要があることを認識させることです。

\mpsavelistdepthtrue保存を有効にするか無効にするかを指定します\mpsavelistdepthfalse

これはenumerate環境でのみ機能します。なぜなら\@enumdepthは を扱いenumerate、 は を扱わないからですitemize(関連する深度カウンタは です\@itemdepth)。

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

ここに画像の説明を入力してください

関連情報