如何创建一个单元格跨越多行并且所有文本均对齐的表格?

如何创建一个单元格跨越多行并且所有文本均对齐的表格?

我正在尝试创建一个表格,其中第一列跨越 3 行,文本将换行多次。第二列和第三列各有 3 行。第二列中的单元格将包含文本,这些文本也将换行多次。所有文本都必须居左对齐。

下面是我正在尝试创建的一个示例。

任何帮助将不胜感激。

_________________________________________________________________
                        | | |
                        |一些文本将放在这里|这将|
                        |需要包装|为空|
                        | | |
                        |_______________________|_______________|
一些很长的文字 | | |
我想要 |一些文字将放在这里 |这将|
左中对齐 | 需要换行 | 为空 |
在此专栏中 | | |
                        |_______________________|_______________|
                        | | |
                        |一些文本将放在这里|这将|
                        |需要包装|为空|
                        | | |
_________________________________________________________________

答案1

使用方法如下multirow

在此处输入图片描述

\documentclass{article}
\usepackage{multirow}% http://ctan.org/pkg/multirow
\newcommand{\sometext}{Some text will go here that will need to wrap.}
\begin{document}
\noindent
\begin{tabular}{|p{.4\linewidth}|p{.35\linewidth}|p{.25\linewidth}|}
  \hline
  \multirow{12}{\linewidth}%
    {\sometext\ \sometext\ \sometext} & \sometext\ \sometext & \\ \cline{2-3}
  & \sometext\ \sometext & \\ \cline{2-3}
  & \sometext\ \sometext & \\ \hline
\end{tabular}
\end{document}

<lines>请注意\multirow

\multirow{<lines>}{<width>}{<content>}

表示表格中的行数\baselineskip,而不是行数。因此,在我的示例中,第二列跨越 12 行,因此我习惯于\multirow{12}{\linewidth}{...}垂直居中并跨越整个单元格宽度。

还有一个可选[<bigstrut>]参数,\multirow你可能想试试。请参阅multirow文档了解更多信息。

请注意,在上面的示例中,表格延伸到边距,导致出现过满\hbox警告,即使p字号列宽加起来为\linewidth(MWE 的结果)。这没有考虑列规则宽度(\arrayrulewidth)和间隔(\tabcolsep)。为了适应这种情况(如果您希望tabular展开整个\linewidth),请使用tabularx包裹并且至少有一X列:

\usepackage{tabularx}% http://ctan.org/pkg/tabularx
%...
\noindent%
\begin{tabularx}{\linewidth}{|p{.4\linewidth}|p{.35\linewidth}|X|}
  %...
\end{tabularx}

或更正列间距和规则宽度:

\noindent%
\begin{tabular}{%
    |p{\dimexpr.4\linewidth-2\tabcolsep-\arrayrulewidth}|
    p{\dimexpr.35\linewidth-2\tabcolsep-\arrayrulewidth}|
    p{\dimexpr.25\linewidth-2\tabcolsep-\arrayrulewidth}|}
  %...
\end{tabular}

答案2

如果你不需要规则,那么你只需要使用原始的规则\valign

\long\def\mytable#1\cr#2\endmytable{\begingroup
  \tabskip=\baselineskip % comes between rows
  \def\cr{\crcr\noalign{\hfil}} % comes between columns
  \def\cellformat{\raggedright\noindent\strut}
  \valign{&\vfil\hsize=.2\hsize\cellformat##\vfil\crcr
    \multispan3\vfil\hsize=.3\hsize\cellformat#1\vfil\cr
    #2\cr}
  \endgroup}

\mytable
  Some really long text that I would like left-center justified in this column.

  Just some more text to show another paragraph and its indentation.
  \cr
  Some text will go here that will need to wrap&
  Some text will go here that will need to wrap&
  Some text will go here that will need to wrap
  \cr
  This will be empty&
  This will be empty&
  This will be empty
\endmytable
\bye

答案3

multirow包提供跨行功能。

相关内容