
Мне нужно иметь компактные списки в табличной среде. Мне нужна среда tabulary
для таблиц, и я использую itemize
опции with для списков.
Мои попытки возвращают ошибку «Что-то не так — возможно, отсутствует \item».
Следующий MWE воспроизводит проблему. Я только что обновил все пакеты в MikTeX (на Windows).
\documentclass{article}
\usepackage{tabulary}
\begin{document}
\begin{tabulary}{\linewidth}{L L}
test & \begin{itemize} \item table item 1 \end{itemize} \\
\end{tabulary}
\end{document}
Как было отмечено, приведенный выше код работает при упаковке itemize
-environment в minipage
environment.
Чтобы сэкономить время и место, я создал compactitemt
окружение, чтобы автоматически обернуть itemize
в minipage
. Сначала это приводило к ошибке, но переопределение окружения, как в следующем коде, теперь работает.
\documentclass{scrbook}
\usepackage[inline]{enumitem}
\usepackage{tabulary}
\newenvironment{compactitemt}{
\begin{minipage}[t]{\hsize}\begin{itemize}[nosep, wide=0pt]
}{ \end{itemize}\end{minipage} }
\begin{document}
\begin{tabulary}{\linewidth}{| J | J |}
other column &
top line 1
\begin{compactitemt}
\item table item 1
\end{compactitemt}
bottom line 1
\\
\end{tabulary}
\end{document}
Конечная цель — иметь равномерно распределенные J
столбцы, содержащие списки, например:
Было бы идеально, если бы в приведенном выше примере ширина второго столбца равнялась ширине текста внутри, если текст настолько короткий, что нет переносов строк, но я считаю, что с этим можно справиться вручную, используя , tabularx
а затем l
столбец, если таблица настолько мала, что ее ширина должна быть меньше строки.
решение1
tabulary
использует hmode для измерения объема данных в каждой ячейке, это означает, что вертикальные конструкции, такие как списки, не работают. Он локально делает \[
безопасным во время испытаний (действуя как , $
но не более того. Очень простая модификация для itemixe будет такой, как показано ниже, но вывод не такой уж и хороший. Я бы использовал обычный режим tabular
и выбирал ширину столбца p{...}
вручную.
\documentclass{article}
\usepackage{tabulary}
\makeatletter
\def\TY@list#1#2{%
\renewcommand\item[1][]{ }%
}
\def\TY@tab{%
\setbox\z@\hbox\bgroup
\let\[$\let\]$%
% new bit to make itemize safe
\let\list\TY@list
\let\enditemize\relax
\let\endlist\relax
% end change
\let\equation$\let\endequation$%
\col@sep\tabcolsep
\let\d@llarbegin\begingroup\let\d@llarend\endgroup
\let\@mkpream\TY@mkpream
\def\multicolumn##1##2##3{\multispan##1\relax}%
\CT@start\TY@tabarray}
\makeatother
\begin{document}
\centering
\begin{tabulary}{\linewidth}{L L}
test &
\begin{itemize}
\item table item 1
\end{itemize}
\\
\end{tabulary}
\end{document}