В нескольких документах мне приходится размещать рядом список и рисунок.
Я использую для этого две среды министраниц, но поскольку список слишком длинный, мне нужно разделить его и продолжить за пределами 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}