我有一张包含两列的简单表格,两列的宽度应相等。我尝试将每列的宽度设置为文本宽度的 50%。右键单击 -> 更多 -> 设置 -> 表格设置 -> 宽度
现在,列的宽度相等,但表格不考虑文本的宽度。
我有另一个表格,其中我只设置了一列的宽度(以厘米为单位),而另一列未设置。在这个表格中,一切都很好。第二列自动适应,表格不会溢出文本宽度。
在两种情况下,表格都放置在标准浮动元素内。
在第一种情况下我做错了什么?
答案1
因此,当 LaTeX 制作表格时,它会\tabcolsep
在每列的开始和结束处插入一个长度为 的空格。列的指定宽度是除此长度之外的。这就是为什么当您有两列时,表格会比文本宽度0.5\textwidth
稍微宽 ( )。4\tabcolsep
有一些方法可以解决这个问题,如下面的 LaTeX 代码所示。该tabularx
包及其X
列非常方便,但我认为 LyX GUI 不支持它,因此您必须在 ERT 中手动编写表格代码。
要使用提出的第二种方法,计算长度,请添加
p{\dimexpr0.5\linewidth-2\tabcolsep\relax}
在里面LaTeX 参数LyX 中的表格设置框(当然,对每一列都这样做):
这将不允许你使用其他列设置,因此如果你想要在单元格中居中文本,请使用
>{\centering}p{\dimexpr0.5\linewidth-2\tabcolsep\relax}
而是。您还需要转到文档 --> 设置 --> LaTeX 前言并添加
\usepackage{array}
因为该包是语法所必需的>{stuff}
,但默认情况下不会加载。(>{stuff}
在列说明符之前添加,例如p{1cm}
,插入stuff
到该列中每个单元格的开头。)
代码示例和输出
\documentclass{article}
\usepackage{parskip} % just for example, sets zero parindent and some parskip
\usepackage{tabularx}
\begin{document}
What you're doing:
X\dotfill X % illustrates textwidth
\begin{tabular}{| p{0.5\linewidth} | p{0.5\linewidth} |}
\hline
ABC & DEF \\
ABC & DEF \\
\hline
\end{tabular}
X\dotfill X
Removing space between columns (looks bad, don't do it):
X\dotfill X
\begin{tabular}{| @{} p{0.5\linewidth} @{} | @{}p{0.5\linewidth} @{}|}
\hline
ABC & DEF \\
ABC & DEF \\
\hline
\end{tabular}
X\dotfill X
Calculate suitable length:
X\dotfill X
\begin{tabular}{| p{\dimexpr0.5\linewidth-2\tabcolsep\relax} | p{\dimexpr0.5\linewidth-2\tabcolsep\relax} |}
\hline
ABC & DEF \\
ABC & DEF \\
\hline
\end{tabular}
X\dotfill X
Using \texttt{tabularx} (not available via GUI in LyX):
X\dotfill X
\begin{tabularx}{\linewidth}{| X | X |}
\hline
ABC & DEF \\
ABC & DEF \\
\hline
\end{tabularx}
X\dotfill X
Set the default column sep to zero with \verb|\setlength{\tabcolsep}{0pt}| (I wouldn't do this):
\setlength{\tabcolsep}{0pt}
X\dotfill X
\begin{tabular}{| p{0.5\linewidth} | p{0.5\linewidth} |}
\hline
ABC & DEF \\
ABC & DEF \\
\hline
\end{tabular}
X\dotfill X
\end{document}