![将当前列宽传递给宏(用于表头)](https://linux22.com/image/288956/%E5%B0%86%E5%BD%93%E5%89%8D%E5%88%97%E5%AE%BD%E4%BC%A0%E9%80%92%E7%BB%99%E5%AE%8F%EF%BC%88%E7%94%A8%E4%BA%8E%E8%A1%A8%E5%A4%B4%EF%BC%89.png)
为了将表格的格式(特别是表格的标题)与内容分开,我编写了以下代码:
\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
,,,以及固定宽度的列,例如,,。它的工作原理如下:l
r
\fheader
p
m
b
但有三点我不喜欢:
- 对于固定宽度的列,需要重复列的宽度。我发现
\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}