使用 longtable 和 makecell,如何获得不同列的不同对齐方式?

使用 longtable 和 makecell,如何获得不同列的不同对齐方式?

我有一张两页(长)表格,横向显示。我希望第一列居中,其余列位于左上角(使用 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

两种情况下编译的结果是相同的:

在此处输入图片描述

相关内容