我正在尝试做一些我认为相对简单但似乎相当困难的事情。我有一张包含多列的表格,我想让所有标题都以粗体文本显示。显然我可以\textbf
依次添加每个标题,但我认为一定有更好的方法来实现这一点(尤其是对于包含多列的表格)。
据我所知,使用纯 LaTeX 无法很好地完成此操作。是否有任何软件包可以使此操作(以及可能的其他与表格相关的问题)更容易?
答案1
以 apan 的评论为例:
\documentclass{article}
\usepackage{array}
\newcolumntype{$}{>{\global\let\currentrowstyle\relax}}
\newcolumntype{^}{>{\currentrowstyle}}
\newcommand{\rowstyle}[1]{\gdef\currentrowstyle{#1}%
#1\ignorespaces
}
\begin{document}
\begin{tabular}{$l^c^r}
\rowstyle{\bfseries}
a & a & a \\
b & b & b \\
c & c & c \\
\end{tabular}
\end{document}
得出:
当然,您可以为列类型选择不同的标记。
为了解释发生了什么,第一个“列”是类型$
(可以是序言中不需要的任何符号)。这只是设置\currentrowstyle
为不执行任何操作,这意味着在每一行中,除非发生其他事情,否则此命令将为无操作。第一个真实的列(此处l
)将包含使其加粗的命令(如果需要),但其他列则不然。因此,它们前面带有^
,这是用于应用 的另一种虚假列类型\currentrowstyle
。
在普通行中,\currentrowstyle
因此以 开始,\relax
并且永远不会改变,因此^
不执行任何操作,行保持不变。但是,如果第一列设置\rowstyle
,则将其保存为\currentrowstyle
(对于后面的列)并应用(对于此列)。^
然后将其插入到行中每列的开头,因此所有内容都为粗体。
(由于表格单元格形成组,因此所有操作都是全局的。)
答案2
这是我发现 ConTeXt 界面比 LaTeX 好得多的情况之一。要使表格的第一行加粗,你只需要
\setupTABLE[row][1][style=bold]
并且不会改变表格主体中的任何内容。因此,样式和呈现方式有明显的区分。最小示例:
\setupTABLE[row][1][style=bold] \开始文本 \开始表 \NC A \NC B \NC C \NC \NR \NC A \NC B \NC C \NC \NR \NC A \NC B \NC C \NC \NR \停止表 \停止文本
答案3
答案4
对于跨越多页的表格,只需合并array
(如 Joseph Wright 的回答中所述)和longtable
。
\documentclass{article}
\usepackage{array}
\newcolumntype{$}{>{\global\let\currentrowstyle\relax}}
\newcolumntype{^}{>{\currentrowstyle}}
\newcommand{\rowstyle}[1]{\gdef\currentrowstyle{#1}%
#1\ignorespaces
}
\usepackage{longtable}
\begin{document}
Some text.
\vspace{42\baselineskip}
\begin{longtable}{$l^c^r}
\rowstyle{\bfseries}
a & a & a \\
b & b & b \\
c & c & c \\
\end{longtable}
\end{document}