Расстояние между списками внутри и снаружи мини-страницы разное.

Расстояние между списками внутри и снаружи мини-страницы разное.

Я готовлюсь к экзамену и хочу иллюстрацию рядом с задачей с множественным выбором. Обычно для этой цели я помещаю вопрос и/или варианты в окружение multicols; однако для этого конкретного вопроса разделение ширины страницы пятьдесят на пятьдесят 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среда ведет себя так, как будто она снова находится на первом уровне, используя \itemsepзначение «соответствующее» для этого уровня, находясь 4.0pt plus 2.0pt minus 1.0ptв этом случае. (То же самое верно и для itemize). Другие пробелы используются тогда, а также если бы они находились на первом уровне среды перечисления/элементизации, это причина отступа и (a)т. д., как можно увидеть на изображении в OP.

Интересно, что формат счетчика перечисления не сбрасывается, поскольку \@enumdepthпо-прежнему имеет значение 2 (что является вторым уровнем).

Один из дешевых трюков — вручную установить \@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}

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

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