具有计算列宽和单元格列表的表格

具有计算列宽和单元格列表的表格

我正在创建一个工具来将 wiki 内容导出到 LaTeX(http://extensions.xwiki.org/xwiki/bin/view/Extension/LaTeX/Syntax%201.0/) 并且在我的 wiki 语法中(以及在 HTML 中),表格单元格可以包含任何内容(列表、部分、表格、多行等)。

我需要找到一种方法来生成执行类似操作的有效 LaTeX。

我还不想指定表格列的任何列宽,因为我的输入中没有这方面信息(wiki 语法通常生成 HTML,而 HTML 会计算列宽)。

最初我是这样做的:

\begin{center}
\begin{tabular}{|l|l|l|}
\hline
cell 1 & cell 2  &  cell 3\\
\hline
\end{tabular}
\end{center}

这工作得很好,我喜欢这个结果,以及列宽自动调整以及列宽具有包含单元格数据的最小宽度的事实。

但是“l”列类型不支持列表之类的元素。

我尝试了各种选择,但没有一个能满足我的需要。

例如,我尝试了 tabularx 环境和“X”列类型,但它会生成相同大小的列,并且表格会占据整行宽度。

我还查看了听起来很有希望的 minipage 环境,但我必须指定一个宽度。

有没有办法在 LaTeX 中实现这个需求?

谢谢 PS:我是 LaTeX 新手(两周前才开始学习)

答案1

varwidth可以提供帮助。它会尝试尽可能减小宽度:

\documentclass{article}
\usepackage{booktabs}
\usepackage{varwidth}

\begin{document}
\begin{center}
\begin{tabular}{lll}
  \toprule
  header 1 & header 2  &  header 3\\
  \midrule
  cell 4 &
  \begin{varwidth}[t]{\linewidth}
    \settowidth{\leftmargini}{\labelitemi}%
    \addtolength{\leftmargini}{\dimexpr\labelsep-\itemindent\relax}%
    \begin{itemize}
      \item item a
      \item item b
      \item item c
    \end{itemize}
  \end{varwidth} &
  \begin{varwidth}[t]{\linewidth}
    \settowidth{\leftmargini}{3.}%
    \addtolength{\leftmargini}{\dimexpr\labelsep-\itemindent\relax}%
    \begin{enumerate}
      \item foo
      \item bar
      \item baz
    \end{enumerate}
  \end{varwidth} \\
  \bottomrule
\end{tabular}
\end{center}
\end{document}

结果

如果行太长,TeX 会发出过满\hbox警告。然后,插入手动换行符来限制行长或切换到固定宽度列。

相关内容