我想要一个tabular
或类似的东西,其中一个单元格具有以下行为:
- 单元格垂直和水平增长以适应单元格的内容,但不超过
\linewidth
- 行会断开,而不是超出单元格范围,或者单元格本身会变得比页面更大
到目前为止我只找到了两个部分解决方案:
- 使用简单的表格来
p{.?\textwidth}
确保换行和垂直增长,但这并不能为我提供水平增长的框 - 使用简单的表格
l
,r
或c
确保自动水平增长
如果你想知道我为什么想要一个单元格表,那是因为我需要某种可以有边框和背景颜色的“框”。
答案1
您可以在环境中设置单元格内容varwidth
(从varwidth
包裹)这是一个最小的例子:
\documentclass{article}
\usepackage{varwidth}% http://ctan.org/pkg/varwidth
\setlength{\parindent}{0pt}% Just for this example
\begin{document}
\begin{tabular}{|l|}
\hline
\begin{varwidth}{\dimexpr\linewidth-2\tabcolsep}
\strut some text.
\end{varwidth} \\
\hline
\end{tabular}
\begin{tabular}{|l|}
\hline
\begin{varwidth}{\dimexpr\linewidth-2\tabcolsep}
\strut Quite a lot more text than in the first table.
\end{varwidth} \\
\hline
\end{tabular}
\begin{tabular}{|l|}
\hline
\begin{varwidth}{\dimexpr\linewidth-2\tabcolsep}
\strut Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur non eros in sem blandit
scelerisque vitae ac velit. Etiam turpis mi, tincidunt adipiscing tincidunt nec, laoreet quis
metus. Nulla ut est eu odio tempus vulputate. Donec blandit tincidunt leo sit amet ultricies.
Maecenas commodo nunc in felis pulvinar elementum. In sapien metus, adipiscing dictum sollicitudin
ac, interdum et leo. Phasellus suscipit mi sed purus euismod molestie. Class aptent taciti sociosqu
ad litora torquent per conubia nostra, per inceptos himenaeos.\strut
\end{varwidth} \\
\hline
\end{tabular}
\end{document}
\strut
鼓励使用,因为minipage
s 倾向于剥离文本块最后一行/第一行的适当深度/高度。
答案2
\documentclass{article}
\newcommand\mybox[1]{%
\setbox0\hbox{#1}%
\ifdim\wd0<\textwidth
\usebox0
\else
\noindent\parbox\textwidth{#1}
\fi}
\def\x{a b c d e f g h i j k l m}
\begin{document}
\parindent0pt
\fbox{\mybox{a b c}}
\fbox{\mybox{\x. \x \x}}
\fbox{\mybox{\x. \x \x. \x \x
\x\x\x\x\x\x\x\x\x\x\x\x\x}}
\end{document}
答案3
对于具有彩色背景和框架的框,使用\fcolorbox
:
\documentclass{article}
\usepackage[svgnames]{xcolor}
\usepackage{varwidth}
\newcommand{\mycolorbox}[1]{{%
\fboxrule 2pt
\fcolorbox{Navy!80}{DarkKhaki}{%
\begin{varwidth}{0.8\linewidth}%
\strut#1%
\end{varwidth}%
}}}
\begin{document}
\mycolorbox{Hello, world!}
\end{document}