Список и рисунок рядом

Список и рисунок рядом

В нескольких документах мне приходится размещать рядом список и рисунок.

Я использую для этого две среды министраниц, но поскольку список слишком длинный, мне нужно разделить его и продолжить за пределами minipage среды (с непрерывной нумерацией, отсюда и использование ключевых серий пакета enumitem). Но, как мы видим, разделение между первым элементом в enumerateсреде за пределами minipage и последним элементом внутри minipageотличается от разделения между любыми другими элементами.

Итак, мой вопрос: есть ли способ гарантировать равное разделение между всеми вещами?

Разумеется, я буду признателен любым подсказкам о другом и лучшем способе сделать это.

\documentclass{article}

\usepackage{enumitem} 
\setlist[enumerate,1]{leftmargin=*,label=\arabic*.}
\setlist[enumerate,2]{leftmargin=*,itemsep=.3cm,label=(\alph*)}

\begin{document}

\begin{enumerate}
\item Algum texto com referencia a uma figura.

\begin{minipage}[t]{0.55\linewidth}
 Uma lista.
\begin{enumerate}[series=exercicio]
 \item primeiro item
 \item segundo item
 \item terceiro item
\end{enumerate}
\end{minipage}\hfill
\begin{minipage}[t][2cm][c]{0.35\linewidth}
 \centering
 \rule{50pt}{50pt}
\end{minipage}
\begin{enumerate}[resume*=exercicio]
 \item quarto item com bastante texto. mais texto e mais texto e mais
  texto
 \item quinto item
\end{enumerate}

\end{enumerate}

\end{document}

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

решение1

Вы могли бы просто наложить изображение и использовать \rightskip. Увы, \hangindentпохоже, это не работает с item.

\documentclass{article}
\usepackage{mwe}
\usepackage{enumitem} 
\setlist[enumerate,1]{leftmargin=*,label=\arabic*.}
\setlist[enumerate,2]{leftmargin=*,itemsep=.3cm,label=(\alph*)}

\begin{document}

\begin{enumerate}
\item Algum texto com referencia a uma figura.

Uma lista.\hfill\llap{\raisebox{-\height}[0pt][0pt]{%
\begin{minipage}[t][2cm][c]{0.3\textwidth}% \linewidth is constantly changing here
 \centering
 \rule{50pt}{50pt}
\end{minipage}}}
\begin{enumerate}[series=exercicio]
 \par\rightskip=0.3\textwidth
 \item primeiro item.  Just to demonstrate the effect of \verb$\rightskip$ I am going to add more text here.
 \item segundo item.
 \par\rightskip=0pt
 \item terceiro item.
 \item quarto item com bastante texto. mais texto e mais texto e mais
  texto
 \item quinto item
\end{enumerate}

\end{enumerate}

\end{document}

наложение

решение2

Используйте пакет wrapfig:

\documentclass{article}

\usepackage{enumitem,wrapfig}
\usepackage{graphicx}

\begin{document}

\begin{wrapfigure}{r}{0.5\textwidth}
  \begin{center}
     \rule{50pt}{50pt}
  \end{center}
\end{wrapfigure}

Algúm texto que não é parte de uma lista.

\begin{enumerate}
\item Algum texto com referencia a uma figura.

 Uma lista.
  \begin{enumerate}
   \item primeiro item
   \item segundo item
   \item terceiro item
   \item quarto item com bastante texto. mais texto e mais texto e mais texto
   \item quinto item
  \end{enumerate}
\end{enumerate}

\end{document}

Скриншот

Thewrapfigдокументацияначинается с этого предостережения:

Вы не должны указывать a wrapfigureв любом типе среды списка или непосредственно перед ним или сразу после него. Можно следовать за списком, если \parмежду ними есть пустая строка ( ).

Вот почему я добавил строку текста перед списком.

Думаю, вы можете немного поиграться, чтобы фигура действительно появилась рядом со списками, но списки не могут быть первыми или единственными вещами, обволакивающими фигуру.

решение3

Текст/блоки размещаются с использованием минимального интервала \baselineskipмежду двумя последовательными базовыми линиями или \lineskipмежду нижней и верхней границами двух блоков (в зависимости от того, что больше).

Один из способов добиться относительно постоянного интервала — разместить базовую линию первой мини-страницы внизу, а базовую линию второй мини-страницы вверху.

Другой способ — начинать и заканчивать каждую мини-страницу тегом \strut.

В случае enumitem добавление \strutили \nullсоздает слишком много пространства между двумя мини-страницами. Вместо этого вам просто нужно добавить около 12pt пространства между стандартными мини-страницами (меньше, если вы добавите a \strutк последнему \item). Я не уверен, как именно enumitem получает эти 12pt, но это мое лучшее предположение.

Следует отметить, что текст внутри мини-страницы не растягивается и не сжимается, чтобы соответствовать нижней части страницы. Вам также нужно будет использовать \raggedbottomили вставить в \vfilгде-нибудь, или поместить обе мини-страницы в общий \vbox.

Демонстрация:

\documentclass{article}
\usepackage{paracol}
\usepackage{enumitem}

\begin{document}
\begin{paracol}{2}

\noindent
\begin{minipage}{\columnwidth}
\begin{enumerate}[series=test1]
\item One
\item Two
\end{enumerate}
\end{minipage}
\begin{minipage}{\columnwidth}
\begin{enumerate}[resume*=test1]
\item Three
\item Four
\end{enumerate}
\end{minipage}
\switchcolumn

\noindent
\begin{minipage}{\columnwidth}
\begin{enumerate}[series=test2]
\item One
\item Two\strut
\end{enumerate}
\end{minipage}
\vskip\partopsep\vskip\itemsep\vskip\parsep\noindent
\begin{minipage}{\columnwidth}
\begin{enumerate}[resume*=test2]
\item Three
\item Four
\end{enumerate}
\end{minipage}
\bigskip
\switchcolumn*

\noindent
\begin{minipage}{\columnwidth}
We need at least two lines here in order for this to work, so I hope that this is enough.
\end{minipage}
\begin{minipage}{\columnwidth}
We need at least two lines here in order for this to work, so I hope that this is enough.
\end{minipage}
\switchcolumn

\noindent
\begin{minipage}[b]{\columnwidth}
We need at least two lines here in order for this to work, so I hope that this is enough.
\end{minipage}
\begin{minipage}[t]{\columnwidth}
We need at least two lines here in order for this to work, so I hope that this is enough.
\end{minipage}
\bigskip
\switchcolumn*

\noindent
\begin{minipage}{\columnwidth}
We need at least two lines here in order for this to work, so I hope that this is enough.
\end{minipage}
\begin{minipage}{\columnwidth}
We need at least two lines here in order for this to work, so I hope that this is enough.
\end{minipage}
\switchcolumn

\noindent
\begin{minipage}{\columnwidth}
\strut
We need at least two lines here in order for this to work, so I hope that this is enough.
\strut
\end{minipage}
\begin{minipage}{\columnwidth}
\strut
We need at least two lines here in order for this to work, so I hope that this is enough.
\strut
\end{minipage}
\bigskip
\switchcolumn*


\end{paracol}
\end{document}

интервал между мини-страницами

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