我有一张两页(长)表格,横向显示。我希望第一列居中,其余列位于左上角(使用 makecell)。
我希望每一行看起来都像这样:
这是我的代码:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{array}
\usepackage{makecell}
\usepackage{geometry}
\usepackage{pdflscape}
\usepackage{longtable}
\usepackage{setspace}
\usepackage{lipsum}
\usepackage{calc}
\newlength{\lw}
\setlength{\lw}{2\tabcolsep+\arrayrulewidth}
\newcolumntype{R}[1]{>{\raggedright\arraybackslash}m{#1}}
\newcolumntype{M}[1]{>{\raggedright\arraybackslash}m{#1}}
\newcommand\tab{\hspace{10mm}}
\begin{document}
\newgeometry{margin=1in}
\begin{landscape}
\singlespacing
\begin{longtable}{|M{1.4in-\lw}|R{2.55in-\lw}|R{2.3in-\lw}|R{2.7in-\lw}|}
Test Header & Test Header & Test Header & Test Header \\
\hline
Long First Row Name
& \makecell[tl]{Item 1 \\
\tab Value 1 \\
Item 2 \\
\tab Value 2 \\
Item 3 \\
\tab Value 3 \\
Item 4 with a very long name that \\ needs two lines \\
\tab Value 4}
& \makecell[tl]{Item 5 \\
\tab Value 5 \\
Item 6 \\
\tab Value 6}
& \makecell[tl]{Item 7 \\
\tab Value 7 \\
Item 8 \\
\tab Value 8}
\hline
\end{longtable}
\doublespacing
\end{landscape}
\restoregeometry
\end{document}
以下是我得到的结果:
我该怎么做才能让我的代码与显示的第一个表相匹配?
答案1
- 使用
tabularray
包可以实现相对简单的表代码,而无需使用makecell
包。 - 从表格的例子中不难看出,为什么您的表格应该是
landscape
定向的。
\documentclass{article}
\usepackage{geometry}
\usepackage{pdflscape}
\usepackage{lipsum}% For dummy text. Don't use in a real document
\usepackage{tabularray}
\newcommand\tab{\par\hspace{2em}}
\usepackage{setspace}
\doublespacing
\begin{document}
\newgeometry{margin=1in}
\begin{landscape}
\singlespacing
\begin{longtblr}[
caption={longtable},
label={tab:x}
]{%
rowhead=1,
hlines, vlines,
colspec={X[0.7,c,m]
*{3}{X[1.1,l,h]}},
row{1} ={font=\bfseries}
}
Test Header
& Test Header
& Test Header
& Test Header \\
Very, Very Long First Row Name
& Item 1
\tab Value 1\par
Item 2
\tab Value 2\par
Item 3
\tab Value 2\par
Item 4 with a very long name that needs two lines
\tab Value 4
& Item 5
\tab Value 5\par
Item 6
\tab Value 6
& Item 7
\tab Value 7\par
Item 8
\tab Value 8 \\
%
\end{longtblr}
\end{landscape}
\end{document}
在表格代码中,您可以\par
用空行替换所有命令,即将前两列写为:
% ...
Very, Very Long First Row Name
& Item 1
\tab Value 1
Item 2
\tab Value 2
Item 3
\tab Value 2
Item 4 with a very long name that needs two lines
\tab Value 4
& Item 5
% rest of table code
两种情况下编译的结果是相同的: