我有一张包含三列的表格,其中包括描述、简短缩写和值。描述可能是一个非常长的条目,因此我使用 p 列类型来自动换行。我使用 longtable 是因为最终表格将跨越几页。
目前,我使用这个代码
\documentclass{article}
\usepackage{longtable}
\begin{document}
\begin{longtable}{p{0.5\textwidth}cc}
\hline
Column 2 & Column 2 & Column 3\\
\hline
short entry & Entry s.1 & Value v.s1\\
& Entry s.2 & Value v.s2 \\
\hline
here is a very long text in the first column that will be broken into multiple rows & Entry l.1 & Value v.l1 \\
& Entry l.2 & Value v.l2 \\
\hline
\end{longtable}
\end{document}
得到这个表:
如您所见,如果第一列中的条目很短,则很容易对齐最后两列。但是,如果第一列中的文本被分成多行,那么最后两行中自然就会有一个类似但现在是空白的空间。因此,在示例中,我想要做的是将条目 l.2 和值 v.l2“上移”两“行”。
答案1
您可以使用包\multirow
中的multirow
功能来跨越多行单元格,例如:
\documentclass{article}
\usepackage{longtable}
\usepackage{multirow}
\begin{document}
\begin{longtable}{p{0.5\textwidth}cc}
\hline
Column 2 & Column 2 & Column 3\\
\hline
short entry & Entry s.1 & Value v.s1\\
& Entry s.2 & Value v.s2 \\
\hline
\multirow{2}{0.5\textwidth}{here is a very long text in the first column that will be broken into multiple rows} & Entry l.1 & Value v.l1 \\
& Entry l.2 & Value v.l2 \\
\\
\hline
\end{longtable}
\end{document}
对于文本换行,您需要手动设置列宽 - 在示例中,它设置为.5\textwidth
。另请参阅这是对“多行列中的文本换行”的回答。
编辑:
为了避免手动检查文本跨越的行,您可以对最后两列使用嵌套表,而不是使用\multirow
,fe:
\documentclass{article}
\usepackage{longtable}
\begin{document}
\begin{longtable}{p{0.5\textwidth}c}
\hline
Column 2 &\begin{tabular}{cc}Column 2 & Column 3\end{tabular}\\
\hline
short entry &\begin{tabular}{cc}
Entry s.1 & Value v.s1\\
Entry s.2 & Value v.s2
\end{tabular}\\
\hline
here is a very long text in the first column that will be broken into multiple rows &\begin{tabular}{cc}
Entry l.1 & Value v.l1 \\
Entry l.2 & Value v.l2
\end{tabular}\\
\hline
\end{longtable}
\end{document}
我认为我更愿意检查两次,因为如果可能的话,我会尽量避免在表格中出现长文本。
答案2
您也可以使用 booktabs 包。
\documentclass{article}
\usepackage{booktabs}
\usepackage{longtable}
\begin{document}
\begin{longtable}{p{0.5\textwidth}p{3cm} p{3cm}}
\toprule
Column 1 & Column 2 & Column 3\\
\midrule
short entry & Entry s.1 & Value v.s1\\
& Entry s.2 & Value v.s2 \\
\midrule
There is a very long text in the & Entry l.1 & Value v.l1 \\
first column that will be broken &Entry 1.2 & Value v.12\\
into multi rows&&\\
\bottomrule
\end{longtable}
\end{document}
答案3
由于所有列都是p{some width}
,您可以\newline
在单元格内使用,并且行数较少。或者,您可以使用makecell
允许在单元格内换行的包:
\documentclass{article}
\usepackage{booktabs}
\usepackage{longtable}
\usepackage{makecell}
\renewcommand\cellalign{lt}
\begin{document}
\begin{longtable}{p{0.5\textwidth}p{3cm} p{3cm}}
\toprule
Column 1 & Column 2 & Column 3 \\
\midrule
short entry & Entry s.1 & Value v.s1 \\
& Entry s.2 & Value v.s2 \\
\midrule
There is a very long text in the first column that will be broken into multi rows & \makecell{Entry l.1 & \\Entry 1.2} & \makecell{Value v.l1\\Value v.12} \\
\addlinespace
There is a very long text in the first column that will be broken into multi rows & Entry l.1\newline Entry 1.2 & Value v.l1\newline Value v.12 \\
\bottomrule
\end{longtable}
\end{document}