我正在尝试使用 tabularx 创建一个非常简单的表格,它看起来应该像这样:
A1 A2 A3 MULTIROW
B1 B2 B3
C1 C2 C3
我的问题是,我无法让多行单元格中的文本适合页边距(文本打印在一行中,不考虑单元格宽度)。另外,我希望文本顶部对齐,而不是居中。这是我的代码:
\begin{flushleft}
\begingroup
\def\arraystretch{1.5}
\begin{tabularx}{\textwidth}{c l l X}
A1 & A2 & A3 & \multirow{3}{*}{multirow text}\\
B1 & B2 & B3 \\
C1 & C2 & C3 \\
\end{tabularx}
\endgroup
\end{flushleft}
答案1
根据您的描述,我猜您感兴趣的是
t
将内容顶部对齐的选项\multirow
:\multirow[t]{3}...
结合
=
如果多行单元格适应其内部使用的列的宽度,而不是*
确保其宽度适应其内容的宽度:\multirow[t]{3}{=}...
组合成 MWE 后,可能如下所示:
\documentclass{article}
\usepackage{tabularx}
\usepackage{multirow}
\begin{document}
\noindent
{\def\arraystretch{1.5}%
\begin{tabularx}{\textwidth}{c l l X}
A1 & A2 & A3 & \multirow[t]{3}{=}{multirow text multirow text multirow text multirow text multirow text multirow text multirow text}\\
B1 & B2 & B3 &\\
C1 & C2 & C3 &\\
\end{tabularx}
}
\end{document}
使用嵌套的tabular
代替\multirow
:
\documentclass{article}
\usepackage{tabularx}
\usepackage{lipsum}
\begin{document}
\noindent
{\def\arraystretch{1.5}%
\begin{tabularx}{\textwidth}{l X}
\begin{tabular}[t]{@{}c l l@{}} A1 & A2 & A3 \\
B1 & B2 & B3 \\
C1 & C2 & C3 \\
\end{tabular} & \lipsum[1][1-4]
\end{tabularx}
}
\end{document}
答案2
目前尚不清楚您的问题是什么,可能您正在寻找类似这样的问题:
\documentclass{article}
\usepackage{lipsum} % for text filler
\usepackage{multirow,
tabularx}
\begin{document}
\begingroup
\flushleft
\renewcommand\multirowsetup{}
\def\arraystretch{1.5}
\begin{tabularx}{\textwidth}{c l l X}
A1 & A2 & A3 & \multirow[t]{3}{=}{\lipsum[1][1-3]}\\
B1 & B2 & B3 \\
C1 & C2 & C3 \\
\end{tabularx}
\endgroup
\end{document}
笔记:
- 由于最后一列的文本较短,因此您看不到表格被拉伸到右文本边框
- 如果您的列规范包含垂直线,则这将是可见的:
\begin{tabularx}{\textwidth}{|c | l | l | X|}
- 如果
\multirow
单元格包含较长的文本,则可以自动将其拆分成更多行,如果您使用(相对较新的)规范,\multirow[t]{3}{=}{...}
因为它已经在他的评论中提到了@leandriis。
编辑:
- 多行单元格的默认设置是
\raggedright
- 如果您想更改此设置,则需要更新命令
\multirowsetup
,请参阅下面编辑的 MWE
(红线表示文字边框)