使用 tabularx 时计算 \multicolumn 大小的正确方法是什么?

使用 tabularx 时计算 \multicolumn 大小的正确方法是什么?

确定p{}所需使用的正确尺寸的正确方法是什么,以\multicolumn获得正确的尺寸?

问题是这样的:我想使用tabularx并且也使用\multicolumn。为此,我必须为 \multicolumn 指定一个确切的大小。这就是问题所在。在复杂的表中,我可以将一个表放在另一个表中,并且一行延伸到几列,计算变得困难。

确定正确的尺寸变得更加困难,如果我稍后更改表格,我必须再次更改代码。

下面的第一个例子显示 X 不能与 \multicolumn 一起使用以使其扩展到多列:

\documentclass[10pt,notitlepage]{article}%
\usepackage{tabularx}
\usepackage{array}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\usepackage{lipsum}
\setlength{\parindent}{0pt}
\begin{document}

\begin{tabularx}{\textwidth}{@{}|l|Y|@{}}\hline
 column 1 &
 {\begin{tabularx}{\linewidth}{@{}Y|Y|Y@{}}\hline
      \lipsum[75] & \lipsum[75] &  \lipsum[75] \\\hline
      \multicolumn{3}{X}{\lipsum[75]}
  \end{tabularx}
 }
 \\\hline
\end{tabularx}
\end{document}

Mathematica 图形

所以必须使用p{}。没有其他东西可以让它扩展到其他列。

p想要一个尺寸。经过反复试验,这是一个接近所需尺寸的

\documentclass[10pt,notitlepage]{article}%
\usepackage{tabularx}
\usepackage{array}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\usepackage{lipsum}
\setlength{\parindent}{0pt}
\begin{document}

\begin{tabularx}{\textwidth}{@{}|l|Y|@{}}\hline
 column 1 &
 {\begin{tabularx}{\linewidth}{@{}Y|Y|Y@{}}\hline
       \lipsum[75] &  \lipsum[75] &   \lipsum[75] \\\hline
      \multicolumn{3}
        %this calculation below is needed, and not sure if it is correct now
        {p{.9\dimexpr \textwidth-4\arrayrulewidth-8\tabcolsep\relax}}{\lipsum[75]}
  \end{tabularx}
 }
 \\\hline
\end{tabularx}
\end{document}

Mathematica 图形

.9好的,现在好多了。但如果我稍后要改变一些东西,我肯定必须改成别的东西。

问题是:这真的是在 Latex 中应该做的事情吗?似乎 Latex 应该有办法自动完成此操作。除了上述方法外,我是否应该研究更好的方法?

以上只是一个小例子。我想使用 tabularx,并且里面还有其他 tabularx 表。所以这很快就会变得很复杂。

答案1

这里不需要多列,您的文本只是一个段落,占外部表格列的整个宽度。(顺便说一句,正如我之前评论的那样,我不会将 tabularx 用于内部列:在每列都是一列的表格中X,您事先知道列宽,因此无需让 tabularx 计算出它们(尽管它可以工作)。

\documentclass[10pt,notitlepage]{article}%
\usepackage{tabularx}
\usepackage{array}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\usepackage{lipsum}
\setlength{\parindent}{0pt}
\begin{document}

\begin{tabularx}{\textwidth}{@{}|l|Y|@{}}\hline
 column 1 &
 {\begin{tabularx}{\linewidth}{@{}Y|Y|Y@{}}\hline
       \lipsum[75] &  \lipsum[75] &   \lipsum[75] \\\hline
  \end{tabularx}
 }

\lipsum[75]
 \\\hline
\end{tabularx}
\end{document}

答案2

这是达到目的的一种方式。每个单列的默认大小为\hsize。要更改它,请使用>{\setlength\hsize{1\hsize}}。至于 3 列宽度,需要将其设置为基本宽度的 3 倍,\hsize因为它占用了 3 列。

在此处输入图片描述

代码:

\documentclass[10pt,notitlepage]{article}%
\usepackage{tabularx}
\usepackage{array}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\usepackage{lipsum}
\setlength{\parindent}{0pt}
\begin{document}

\begin{tabularx}{\textwidth}{@{}|l|Y|@{}}\hline
 column 1 &{
\begin{tabularx}{\linewidth}{Y|Y|Y}%
\lipsum[75] &\lipsum[75] & \lipsum[75] \\ \hline
\multicolumn{3}{>{\centering\setlength\hsize{3\hsize}}Y}{\lipsum[75]}
\end{tabularx}}\\ \hline
\end{tabularx}
\end{document}

相关内容