So baust du einen Longtable mit Booktabs und einer farbigen (Kopf-)Reihe auf

So baust du einen Longtable mit Booktabs und einer farbigen (Kopf-)Reihe auf

Ich möchte eins machen, longtablebei dem die erste (Kopf-)Reihe grau gefärbt ist.

Da unter und über dem booktabsLeerzeichen eingefügt werden , muss ich eine farbige Regel einfügen:\toprule\midrule

\newcommand*{\belowrulesepcolor}[1]{%
  \noalign{%
    \kern-\belowrulesep
    \begingroup
      \color{#1}%
      \hrule height\belowrulesep
    \endgroup
  }%
}
\newcommand*{\aboverulesepcolor}[1]{%
  \noalign{%
    \begingroup
      \color{#1}%
      \hrule height\aboverulesep
    \endgroup
    \kern-\aboverulesep
  }%
}

Dies funktioniert innerhalb der tabularUmgebung gut. Wenn ich die longtableUmgebung jedoch verwende, \hrulewird es zu lang.

Hier ist mein MWE mit einem Bild der Ausgabe:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage[T1]{fontenc}

\usepackage{geometry}                           
\geometry{paperwidth=5cm,paperheight=5cm}       % small page
\pagestyle{empty}

\usepackage{booktabs, longtable}
\usepackage[table]{xcolor}

\newcommand*{\belowrulesepcolor}[1]{%   fills the white space with a colored rule
  \noalign{%
    \kern-\belowrulesep
    \begingroup
      \color{#1}%
      \hrule height\belowrulesep
    \endgroup
  }%
}
\newcommand*{\aboverulesepcolor}[1]{%
  \noalign{%
    \begingroup
      \color{#1}%
      \hrule height\aboverulesep
    \endgroup
    \kern-\aboverulesep
  }%
}

\definecolor{headcolor}{gray}{0.8}


\begin{document}

\centering

\begin{longtable}{lll}

\toprule \belowrulesepcolor {headcolor}                         
\rowcolor{headcolor}
Col1 & Col2 \\ \aboverulesepcolor{headcolor} \midrule \endfirsthead
\toprule \belowrulesepcolor {headcolor}                         
\rowcolor{headcolor}
Col1 & Col2 \\ \aboverulesepcolor{headcolor} \midrule \endhead
\bottomrule
\endfoot
\bottomrule
\endlastfoot


A&B \\
A&B \\
A&B \\
A&B \\
A&B \\
A&B \\
A&B \\
A&B \\
A&B \\
A&B \\
A&B \\
A&B \\


\end{longtable}

\end{document}

Ausgabe des MWE

Antwort1

Die anderen Antworten verwirren mich. Was ist falsch an etwas viel Einfacherem? Keine zusätzlichen Pakete nötig

\documentclass{article}
\usepackage{geometry}                           
\geometry{paperwidth=5cm,paperheight=5cm}       % small page
\pagestyle{empty}

\usepackage{booktabs, longtable}
\usepackage[table]{xcolor}


\colorlet{tableheadcolor}{gray!35} % Table header colour = 25% gray
\newcommand{\topline}{\arrayrulecolor{black}\specialrule{\heavyrulewidth}{\abovetopsep}{0pt}%
            \arrayrulecolor{tableheadcolor}\specialrule{\belowrulesep}{0pt}{0pt}%
            \arrayrulecolor{black}}
\newcommand{\midline}{\arrayrulecolor{tableheadcolor}\specialrule{\aboverulesep}{0pt}{0pt}%
            \arrayrulecolor{black}\specialrule{\lightrulewidth}{0pt}{0pt}%
            \arrayrulecolor{white}\specialrule{\belowrulesep}{0pt}{0pt}%
            \arrayrulecolor{black}}


\begin{document}

\centering

\begin{longtable}{ll}

\topline
\rowcolor{tableheadcolor}
Col1 & Col2 \\ \midline
\endfirsthead
\topline
\rowcolor{tableheadcolor}
Col1 & Col2 \\ 
\midline
\endhead
\bottomrule
\endfoot
\bottomrule
\endlastfoot


A&B \\
A&B \\
A&B \\
A&B \\
A&B \\
A&B \\
A&B \\
A&B \\
A&B \\
A&B \\
A&B \\
A&B \\


\end{longtable}

\end{document}

Bildbeschreibung hier eingeben

Antwort2

Ich würde Tikz verwenden, um den Hintergrund zu zeichnen. So etwas wie das hier (ich habe es nicht gründlich getestet, daher sind in Ihrem tatsächlichen Fall möglicherweise einige Anpassungen erforderlich):

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage[T1]{fontenc}

\usepackage{geometry}
\geometry{paperwidth=5cm,paperheight=5cm}       % small page
\pagestyle{empty}

\usepackage{booktabs}
\usepackage{longtable}
\usepackage[table]{xcolor}
\usepackage{tikz}
\usetikzlibrary{tikzmark}


\makeatletter
\newcommand\LastLTentrywidth{1em}
\newlength\longtablewidth
\setlength{\longtablewidth}{1in}
\newcommand\getlongtablewidth{%
 \begingroup
  \ifcsname LT@\roman{LT@tables}\endcsname
  \global\longtablewidth=0pt
  \renewcommand\LT@entry[2]{\global\advance\longtablewidth by ##2\relax\gdef\LastLTentrywidth{##2}}%
  \@nameuse{LT@\roman{LT@tables}}%
  \fi
\endgroup}
\newcommand*{\topheadermark}{%   
  \noalign{\tikzmark{beforeheader\the\c@LT@tables}}}%
\newcommand*{\bottomheadermark}{%
  \noalign{\tikzmark{belowheader\the\c@LT@tables}}}%  
\newcommand\drawheaderbackground{%
 \tikz[overlay,remember picture]
  \fill[headcolor]([xshift=-0.5\longtablewidth,yshift=-\aboverulesep]pic cs:belowheader\the\c@LT@tables)
 rectangle ([yshift=\belowrulesep,xshift=0.5\longtablewidth]pic cs:beforeheader\the\c@LT@tables);}
\makeatother

\definecolor{headcolor}{gray}{0.8}


\begin{document}

\centering

\begin{longtable}{lll}\noalign{\getlongtablewidth}

\toprule \topheadermark
\drawheaderbackground
Col1111 & Col2 \\\bottomheadermark\midrule \endfirsthead
\toprule \topheadermark
\drawheaderbackground
Col1 & Col2 \\\bottomheadermark\midrule  \endhead
\bottomrule
\endfoot
\bottomrule
\endlastfoot


A&B \\
A&B \\
A&B \\
A&B \\
A&B \\
A&B \\
A&B \\
A&B \\
A&B \\
A&B \\
A&B \\
A&B \\


\end{longtable}

\end{document}

Bildbeschreibung hier eingeben

Antwort3

Hier ist eine Lösung mit dem makecellPaket: Sie besteht darin, die Werte von \above/belowrulesepauf zu setzen 0ptund sie durch einen \GapeBefehl von Makecell zu ersetzen, der an den entsprechenden Stellen die Standardwerte von \above/belowrulesep verwendet.

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage[T1]{fontenc}

\usepackage{geometry}
\geometry{paperwidth=5cm,paperheight=5cm} % small page
\pagestyle{empty}

\usepackage{booktabs, longtable}
\usepackage[table]{xcolor}

\definecolor{headcolor}{gray}{0.8}
\newlength\defaultaboverulesep
\setlength\defaultaboverulesep{\aboverulesep}
\newlength\defaultbelowrulesep
\setlength\defaultbelowrulesep{\belowrulesep}
\setlength\aboverulesep{0pt}
\setlength\belowrulesep{0pt}
\usepackage{makecell}

\begin{document}

\centering

\begin{longtable}{lll}

  \toprule
  \rowcolor{headcolor}
  \Gape[\defaultbelowrulesep][\defaultaboverulesep]{Col1} & Col2 \\
  \midrule
  \addlinespace[\defaultbelowrulesep]
  \endfirsthead
  \toprule
  \rowcolor{headcolor}
  \Gape[\defaultbelowrulesep][\defaultaboverulesep]{Col1} & Col2 \\ %\aboverulesepcolor{headcolor}
  \midrule\addlinespace[\defaultbelowrulesep]
  \endhead
  \addlinespace[\defaultaboverulesep]
  \bottomrule
  \endfoot
  \addlinespace[\defaultaboverulesep]
  \bottomrule
  \endlastfoot

  A & B \\
  A & B \\
  A & B \\
  A & B \\
  A & B \\
  A & B \\
  A & B \\
  A & B \\
  A & B \\
  A & B \\
  A & B \\
  A & B \\


\end{longtable}

\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen