有了这个 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]X
或X[-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}
因此,即使在“扩散”时,列宽仍然与列中的材料量成比例,这对我来说似乎是一件好事。