代码示例和输出

代码示例和输出

我有一张包含两列的简单表格,两列的宽度应相等。我尝试将每列的宽度设置为文本宽度的 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}

相关内容