将当前列宽传递给宏(用于表头)

将当前列宽传递给宏(用于表头)

为了将表格的格式(特别是表格的标题)与内容分开,我编写了以下代码:

\documentclass{article}
\usepackage{array}
\usepackage{colortbl}
\usepackage{xcolor}


\newcolumntype{L}{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}}
\newcolumntype{C}{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}}

\newcommand{\vheader}[1]{\multicolumn{1}{>{\bfseries}c}{#1}}
\newcommand{\fheader}[2]{\multicolumn{1}{>{\bfseries}Cb{#1}}{#2}}

\begin{document}

\begin{tabular}{cLp{50mm}lr}
  \rowcolor{black!20}
  \vheader{Rank} & 
  \fheader{50mm}{Venerable Institution of Higher Education} &
  \vheader{Location} &
  \vheader{Score} \\

  1 & California Institute of Technology (Caltech) & United States & 94.9 \\
  \multicolumn{4}{c}{\ldots}\\
  12 & University of California, Los Angeles (UCLA) & United States & 86.3 \\
  13 & Columbia University & United States & 85.2 \\
  14 & ETH Z\"urich -- Swiss Federal Institute of Technology Z\"urich & Switzerland & 84.5 \\
\end{tabular}

\end{document}

(数据取自泰晤士高等教育(选择一些名字较长的大学)

这个想法是,表头应该

  • 黑体
  • 居中
  • 底部对齐

但这些选择应该很容易全局更改。因此,我使用宏标记了标题单元格,用于\vheader可变宽度的列,例如c,,,以及固定宽度的列,例如,,。它的工作原理如下:lr\fheaderpmb

在此处输入图片描述

但有三点我不喜欢:

  • 对于固定宽度的列,需要重复列的宽度。我发现\hsize将设置为列宽。但我尝试检索它并在多列序言中使用它的所有尝试都失败了,一直抱怨放错位置\omit之类的问题。
  • 需要明确说明这是一个固定宽度列还是可变宽度列。再次,我尝试了检查\hsize表格外部的值是否发生变化的代码,并根据该代码使用不同的多列前导码,但它不符合多列处理的要求。
  • 需要对每个单元格都说一遍,而不是对整行说一遍。例如,该tabu包有一个\rowfont宏,它至少可以处理粗体和居中,但不能处理底部对齐。但是tabu没有维护,并且查看源代码,这是一个非常脆弱的业务,它涉及序言中的代码来删除先前的列粘合,这取决于是否使用colortbl

欢迎针对每个问题提出建议——抱歉我一次问了三个问题!

编辑:booktabs用灰色背景替换colortbl标题行。设计师经常要求使用彩色背景,因此确保行能正常使用非常重要。但这colortbl可能比较困难,因为背景不能填满整个单元格。

答案1

\documentclass{article}
\usepackage{array}
\usepackage{colortbl}
\usepackage{xcolor}


\newcolumntype{L}{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}}
\newcolumntype{C}{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}}



\newcommand{\header}[1]{%
  \multicolumn{1}{c}{%
    \cellcolor{black!20}\bfseries\begin{tabular}[b]{@{}c@{}}#1\end{tabular}}}


\begin{document}

\begin{tabular}{cLp{50mm}lr}
  \header{Rank} & 
  \header{Venerable Institution of\\ Higher Eductation} &
  \header{Location} &
  \header{Score} \\

  1 & California Institute of Technology (Caltech) & United States & 94.9 \\
  \multicolumn{4}{c}{\ldots}\\
  12 & University of California, Los Angeles (UCLA) & United States & 86.3 \\
  13 & Columbia University & United States & 85.2 \\
  14 & ETH Z\"urich -- Swiss Federal Institute of Technology Z\"urich & Switzerland & 84.5 \\
\end{tabular}

\end{document}

或者,如果你不想指定宽度或手动换行,你可以使用varwidth

\documentclass{article}
\usepackage{array}
\usepackage{colortbl}
\usepackage{xcolor}
\usepackage{varwidth}


\newcolumntype{L}{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}}
\newcolumntype{C}{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}}

\newcommand{\header}[1]{%
\cellcolor{black!20}\bfseries\begin{varwidth}[b]{\hsize}\centering\let\newline\\\arraybackslash#1\end{varwidth}}


\begin{document}

\begin{tabular}{cLp{50mm}lr}
  \header{Rank} & 
  \header{Venerable Institution of Higher Eductation} &
  \header{Location} &
  \header{Score} \\

  1 & California Institute of Technology (Caltech) & United States & 94.9 \\
  \multicolumn{4}{c}{\ldots}\\
  12 & University of California, Los Angeles (UCLA) & United States & 86.3 \\
  13 & Columbia University & United States & 85.2 \\
  14 & ETH Z\"urich -- Swiss Federal Institute of Technology Z\"urich & Switzerland & 84.5 \\
\end{tabular}

\end{document}

答案2

只需使用\parbox[b]{\hsize}{...}

\documentclass{article}
\usepackage{array}
\usepackage{colortbl}
\usepackage{xcolor}


\newcolumntype{L}[1]{%
  >{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}%
  p{#1}%
}

\newcommand{\vheader}[1]{%
   \multicolumn{1}{>{\bfseries}c}{#1}
}
\newcommand{\fheader}[1]{%
  \parbox[b]{\hsize}{%
    \centering\arraybackslash\bfseries\strut#1\strut
  }%
}

\begin{document}

\begin{tabular}{cL{50mm}lr}
  \rowcolor{black!20}
  \vheader{Rank} &
  \fheader{Venerable Institution of Higher Eductation} &
  \vheader{Location} &
  \vheader{Score} \\

  1 & California Institute of Technology (Caltech) & United States & 94.9 \\
  \multicolumn{4}{c}{\ldots}\\
  12 & University of California, Los Angeles (UCLA) & United States & 86.3 \\
  13 & Columbia University & United States & 85.2 \\
  14 & ETH Z\"urich -- Swiss Federal Institute of Technology Z\"urich & Switzerland & 84.5 \\
\end{tabular}

\end{document}

在此处输入图片描述

相关内容