
MWE ниже дает желаемые результаты. Но есть ли лучший способ получить это выравнивание вместо raise=-0.3ex
:
Без символа raise=-0.3ex
номер элемента не выравнивается с текстом:
Код:
\documentclass{article}
\usepackage{enumitem}
\usepackage[export]{adjustbox}
\fboxsep=0pt
\newadjustboxenv{MyAdjustbox}{valign=t, raise=-0.3ex}%
\begin{document}
\begin{enumerate}
\item
\begin{MyAdjustbox}
\fbox{%
\begin{minipage}[t]{\linewidth}
Some text that takes up several lines, so we need to adjust the
item number to align with the top baseline.
\end{minipage}%
}%
\end{MyAdjustbox}%
\end{enumerate}%
\end{document}
решение1
Я думаю, что есть две отдельные проблемы. Главная из них возникает из-за использования minipage
среды.
Первая строка в материале внутри fbox не имеет материала выше заглавных букв. Поскольку этот материал заключен в
minipage
, неиспользуемое вертикальное пространство, необходимое для таких символов, как(
и ,)
удаляется. Напротив, символ перечислениянетзаключен вminipage
, и, следовательно, его базовая линия выбирается без удаления неявного\strut
. Если вставить a\strut
в первую строку\fbox
, большая часть необходимости в вертикальной корректировке будет устранена.Чтобы полностью выровнять базовые линии частицы "1." перед
\fbox
и материал внутриminipage
, также необходимо сделать корректировку (каламбур) для толщины линейки (задается параметром\fboxrule
; значение по умолчанию:\arrayrulewidth
, обычно0.4pt
), которая окружает fbox. И, поскольку значение\fboxsep
в общем случае не равно нулю, я предлагаю использовать следующий код\newadjustboxenv{MyAdjustbox}{valign=t, raise=\fboxrule+\fboxsep}
вместо
\newadjustboxenv{MyAdjustbox}{valign=t, raise=-0.3ex}
С этими двумя корректировками (еще один каламбур — ой!) я получаю такой скриншот:
\documentclass{article}
\usepackage{enumitem}
\usepackage[export]{adjustbox}
\fboxsep=0pt
\newadjustboxenv{MyAdjustbox}{valign=t, raise=\fboxrule+\fboxsep}
\begin{document}
\begin{enumerate}
\item
\begin{MyAdjustbox}
\fbox{%
\begin{minipage}{\linewidth}\strut%
Some text that takes up several lines, so we need
to adjust the item number to align with the top
baseline.
\end{minipage}%
}%
\end{MyAdjustbox}%
\end{enumerate}%
\end{document}
решение2
Параметр valign=t
не adjustbox
извлекает внутреннюю верхнюю базовую линию, как это [t]
делают параметры мини-страницы или таблицы.adjustbox
вычисляет высота, которая учитывает текущий размер шрифта текста: по умолчанию valign=t
устанавливает высоту, равную высоте текущего \strutbox
.
Это означает, что в зависимости от текста в первой строке он может быть слишком высоким или слишком низким относительно числа. Вы можете "исправить" первый случай с помощью кода от Mico, но для второго случая нет простого исправления.
По моему мнению, adjustbox
это неподходящая среда для таких блоков. Она полезна для выравнивания изображений, не имеющих собственной базовой линии, но не для текстовых блоков.
\documentclass{article}
\usepackage{enumitem}
\usepackage[export]{adjustbox}
\newadjustboxenv{MyAdjustbox}{valign=t}
\begin{document}
\begin{enumerate}
\item
\begin{MyAdjustbox}%too high
\begin{minipage}[t]{\linewidth}
aaaa
\end{minipage}%
\end{MyAdjustbox}
\item \begin{MyAdjustbox}%too low
\begin{minipage}[t]{\linewidth}
$\int\limits_1^3 f(x) $
\end{minipage}%
\end{MyAdjustbox}
\end{enumerate}
\end{document}