是否可以制作一个未完全展开的表格?

是否可以制作一个未完全展开的表格?

有了这个 MWE

\documentclass{article}
\usepackage{tabulary}

\begin{document}

\hrule

\begin{center}
  \begin{tabulary}{\textwidth}{|L|L|L|}
    foo&bar&baz
  \end{tabulary}
\end{center}

\hrule

\end{document}

我得到一个比页面窄的表格: 例子

\textwidth但我希望桌子可以像我想象的那样展开tabularx。这可能吗?

或者还有其他方法吗?

答案1

tabu似乎可以做你想做的事,只要为列指定负系数即可X。引用手册:

可以给列赋予负宽度系数X

例如X[-2.5]X[1]X[-2.5]XX[-5]X[2]

在这种情况下,第一X列最多比第二列宽 2.5 倍,并且如果自然宽度第一X列的宽度最终小于2.5×(第二列的宽度),那么它将缩小到这个自然宽度。

tabu\strut忘记在单元格中放入但人们或许应该牢记这一事实。

\documentclass{article}
\usepackage{tabu}
\usepackage{lipsum}
\begin{document}
\hrule
\begin{center}
  \begin{tabu}to\linewidth{|X[-1,l]|X[-1,l]|X[-1,l]|}
   foo&bar&baz
  \end{tabu}
\end{center}
\hrule
\begin{center}
  \begin{tabu}to\linewidth{|X[-1,l]|X[-1,l]|X[-1,l]|}
   foo&bar&\lipsum[2]
  \end{tabu}
\end{center}
\hrule
\begin{center}
  \begin{tabu}to\linewidth{|X[-1,l]|X[-1,l]|X[-1,l]|}
   foo foo foo foo foo foo foo &bar&baz
  \end{tabu}
\end{center}
\hrule
\end{document}

在此处输入图片描述

答案2

另一个答案中的补丁可能应该有效,但事实证明,使用的除法算法在扩大规模的情况下并不是那么准确,正如 Stephen 注意到的,如果您只是让它扩大规模,舍入误差会使表格比线更宽,并且您会收到框满警告。这基本上是相同的,但在扩大表格之前纠正了除法结果。

\documentclass{article}
\usepackage[debugshow]{tabulary}

\makeatletter

\def\foo#1\def\TY@ratio#2#3!!{
\def\TY@checkmin{#1%
 \@tempdima\TY@ratio\TY@tablewidth
 \ifdim\@tempdima>\TY@linewidth
  \advance\@tempdima-\TY@linewidth
  \Gscale@div\@tempb\@tempdima\TY@tablewidth
  \@tempdimb\TY@ratio\p@
  \advance\@tempdimb-\@tempb\p@
  \edef\TY@ratio{\strip@pt\@tempdimb}%
\fi
#3}}
\expandafter\foo\TY@checkmin!!



\makeatother

\begin{document}

\hrule

\begin{center}
  \begin{tabulary}{\textwidth}{|L|L|L|}
    foo&bar&baz
  \end{tabulary}
\end{center}

\hrule

\end{document}

答案3

好的,我现在做了以下修补:

\usepackage{etoolbox}
\makeatletter
\patchcmd\TY@checkmin
{\def\TY@ratio{1}}
{%
  \@tempdima\dimexpr\p@*\TY@linewidth/\TY@tablewidth\relax
  \edef\TY@ratio{\strip@pt\@tempdima}%
}{}{}
\let\TY@@checkmin\TY@checkmin
\makeatother

这似乎做了我想要的:

第二个例子

不过,计算似乎不够精确,我想知道是否有更合适的解决方案。

此外,我或多或少地从包代码中撤消了一个明确的特殊情况,所以我认为它存在是有原因的;-)

编辑

请注意,tabulary与本例相比,其行为仍然不同tabularx。例如,参见

\begin{center}
  \begin{tabulary}{\textwidth}{|L|L|L|}
    foo foo foo foo foo foo foo &bar&baz
  \end{tabulary}
\end{center}

示例 2

因此,即使在“扩散”时,列宽仍然与列中的材料量成比例,这对我来说似乎是一件好事。

相关内容