«отсутствует \item» в таблице, несмотря на чистый элемент

«отсутствует \item» в таблице, несмотря на чистый элемент

Мне нужно иметь компактные списки в табличной среде. Мне нужна среда 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 в minipageenvironment.

Чтобы сэкономить время и место, я создал 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}

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

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