LaTex 写演示文稿 - Beamer 入门 之 彩色表格
Beamer 入门 之 彩色表格
本节内容给大家分享如何绘制彩色表格,大致的效果如下:
背景颜色
调整表格颜色可以使用 colortbl 宏包,该宏包提供了可以控制行和列的颜色的命令。该宏包还默认加载了 color 以及 array 宏包所以不需要重复加载。color 宏包用来调整颜色,array宏包用来控制表格相关属性。
此外如果想实现三线表形式的单元格,可以使用 booktabs 宏包;如果想在单元格内插入斜线,来分隔单元格内容,可以使用 diagbox 宏包,但是由于三线表形式的线性在插入斜线之后并不连续,因此不建议一起使用,如果需要 在单元格内插入斜线的话,其实也就默认了我们需要的并不是三线表。因此表格内横线使用 \hinle 命令即可。其次实现合并单元格,则需要使用到 multirow 宏包。
单元格插入斜线
使用 \diagbox
命令,后面需要分成多少部分,就加几个花括号。
如需分成三个个部分就是用
\begin{tabular}{|c|}
\hline
\diagbox{左边}{中间}{右边}\\
\hline
\end{tabular}
该宏包还提供了各种更改斜线方向,单元格大小,字体等相关设置,如有需要可自行查看该宏包的说明文件。
更改行、列及单元格颜色
使用 colortbl 宏包
更改列的背景颜色
需要使用到命令
\columncolor[颜色模式]{颜色}[左侧悬挂距离][右侧悬挂距离]
如果不需要设置悬挂距离,可以直接使用命令 \columncolor{颜色}
而默认的悬挂距离为 \tabcolsep 即单元格列间距。
即背景颜色是填充整个单元格的,如果将其设置成 0 则背景颜色紧贴字体左右两侧。
如果仅设置左侧悬挂距离,右侧也会与左侧距离保持一致。
让该命令对 某一列产生影响,需要在定义该列位置的命令(l、c、r) 前面使用 >{ } 将对控制列属性的命令放在花括号内,该种方式是通过 array 宏包实现的,想知道更多相关用法可以自行查看 array 的宏包说明。
而对于颜色,我们可以使用color 宏包提供的颜色命令,也可以通过其他的颜色模式,例如通过使用RGB 值定义颜色。
比如我们要定义一个海蓝色的的命令。可以使用以下方法:
\definecolor{Ocean}{RGB}{129,194,234}
即定义了一个海蓝色,其名字为 Ocean 使用的时候只需要和一般颜色一样,使用 \color{Ocean} 注意 LaTeX
是区分大小写的。
当设置某一列颜色的时候可以使用
\columncolor{Ocean}
也可以使用
\columncolor[RGB]{129,194,234}
因此如果想将对一个二行三列的表格,将第一列设置成红色,将第三列设置成海蓝色,可以使用下面代码:
\begin{tabular}{>{\columncolor{red}}c c >{\columncolor{Ocean}}c}
元素1&元素2&元素3\\
元素a&元素b&元素c\\
\end{tabular}
当我们需要多次定义这样的列的样式的时候,使用这么长的命令肯定不方便,因此我们也可以定义一个自己的 类似于 l c r 一样的列属性,使用命令
\newcolumntype{新属性名称}{该列相关属性设置}
如想使用字母 g 作为新的样式,列左对齐,且背景颜色为 灰度为0.8 的颜色
可以使用:
\newcolumntype{g}{>{\columncolor[gray]{0.8}}l}
使用方法如下:
\begin{tabular}{l r c g}
其中第四列就是我们定义的列的样式
更改行的背景颜色
行的背景颜色的命令同列的类似:
\rowcolor[颜色模式]{颜色}[左侧悬挂距离][右侧悬挂距离]
以及\rowcolor{颜色}
使用方法,就是在每一行前面使用该命令,
如: 第一行背景为红色,第二行背景为海蓝色
\begin{tabular}{ccc}
\rowcolor{red}元素1&元素2&元素3\\
\rowcolor{Ocean}元素a&元素b&元素c\\
\end{tabular}
定义单元格背景颜色
其命令与前面的行列背景颜色的定义也是类似的
\cellcolor[颜色模式]{颜色}[左侧悬挂距离][右侧悬挂距离]
以及\cellcolor{颜色}
使用方法,仅需在对应的单元格使用此命令即可。
实现合并单元格
如果使用单元格合并,以及添加表格的横竖线条,可能会遇到的有两个问题:
合并后单元格上下颜色不一致 并且单元格文本内容会被遮盖掉
如果添加横线,合并单元格后,并不能消除上下两个单元格之间的横线
会出现两种问题的代码和效果如下所示:
代码:
\documentclass{ctexart}
\usepackage{array,multirow,diagbox}%设置表格属性,合并单元格,单元格内斜线
\usepackage{colortbl}%彩色表格
\newcolumntype{g}{>{\columncolor[gray]{0.8}}l}%定义新的 列类型
\definecolor{Ocean}{RGB}{129,194,234}%定义海蓝色
\begin{document}
\begin{table}[htbp]
\centering
\caption{随随便便一张表}
\begin{tabular}{|l|g|g|g|g|g|}
\hline
\rowcolor{white}\diagbox{项目}{指标} &指标一&指标二&指标三&指标四&指标五\\\hline%标题行
\multirow{2}{*}{项目A}
&abc123&abc123&abc123&abc123&abc123\\\hline%第一行
\rowcolor{white}
&abc123&abc123&abc123&abc123&abc123\\\hline %第二行
\multirow{2}{*}{项目B}
&abc123&abc123&abc123&abc123&abc123\\\hline%第三行
\rowcolor{white}
&abc123&abc123&abc123&abc123&abc123\\\hline %第四行
\multirow{2}{*}{项目C}
&abc123&abc123&abc123&abc123&abc123\\\hline%第五行
\rowcolor{Ocean}
&abc123&abc123&abc123&abc123&abc123\\\hline %第六行
\end{tabular}
\end{table}
\end{document}
解决单元格合并后字体显示不全问题
其实这个问题出现的原因是,我们希望奇数行是灰色偶数行是其他颜色(例如白色和海蓝色),但是我们只能控制每一列都是灰色,所以只能通过单独再控制偶数行的颜色来实现效果,但是偶数行改成白色之后,颜色会直接覆盖掉奇数行合并单元格之后的内容。 所以我们不能从奇数行合并单元格而应该从偶数行合并,因此要从原来的向下合并变成向上合并。 因此我们只需要 \\multirow{2}{*}{文本内容} 命令从奇数行移动到偶数行,并将 2 改为 -2 即改为向上合并。另外需要注意这里面的 * 号,是保持一个默认宽度。
解决列表横线覆盖字体问题
由于合并单元格只能合并其中的内容,而我们的横线是直接再文本上方插入的,因此要想消除某一列的横线,我们可以用 hhline 宏包提供的hhline命令,具体用法可以参考其红包说明。
具体用法是使用hhline 宏包,并将奇数行后的hline 改为 \hhline{|~|-----}
该命令后面的 参数使用方法大致如下:
有多少列内容我们就要添加多少列的横线类型,如果是 ‘-’ 即表示插入横线,如果是 ‘~’ 即表示为空,因此上面的命令表示为该行第一列单元格下的横线是空的,后面所有列的单元格下面添加横线,
第一列需要使用 ‘|~|’ 是因为,如果只使用 ’ ~’ 的话,由于表格的每一列都添加了竖线,第一个单元格为空的横线,会使两侧竖线变得不连续(间断的)。因此需要保留两侧竖线,就需要在两侧 添加‘|’ 最终代码如下:效果见最开始的图片。
\documentclass{ctexart}
\usepackage{array,multirow,diagbox}
\usepackage{colortbl,hhline}
\newcolumntype{g}{>{\columncolor[gray]{0.8}}l}
\definecolor{Ocean}{RGB}{129,194,234}
\begin{document}
\begin{table}[htbp]
\centering
\caption{随随便便一张表}
\begin{tabular}{|l|g|g|g|g|g|}
\hline
\rowcolor{white}\diagbox{项目}{指标} &指标一&指标二&指标三&指标四&指标五\\\hline%标题行
&abc123&abc123&abc123&abc123&abc123\\\hhline{|~|-----} %第一行
\rowcolor{white} \multirow{-2}{*}{项目A} &abc123&abc123&abc123&abc123&abc123\\\hline %第二行
&abc123&abc123&abc123&abc123&abc123\\\hhline{|~|-----} %第三行
\rowcolor{white}\multirow{-2}{*}{项目B} &abc123&abc123&abc123&abc123&abc123\\\hline %第四行
&abc123&abc123&abc123&abc123&abc123\\\hhline{|~|-----}%第五行
\rowcolor{Ocean}\multirow{-2}{*}{项目C} &abc123&abc123&abc123&abc123&abc123\\\hline %第六行
\end{tabular}
\end{table}
\end{document}
定义表格字体颜色
可以在定义列样式的时候添加颜色选项,即可定义每一列颜色,而定义每行颜色则需要借助其他宏包(例如:tabu 宏包), 但是由于此宏包与本节分享的其他宏包可能冲突,因此不再介绍,有需要的自行查看。
更改列颜色在列样式前 使用 >{\color{目标颜色}} 具体内容如下:
同是,如果想更改单个单元格的颜色,可以使用 \textcolor{目标颜色}{字体内容} 好处是不会超出页边距。
\documentclass{ctexart}
\usepackage{array,colortbl}%需要用到的宏包
\begin{document}
\begin{tabular}{| >{\color{red}} c | c |}
\hline
红色字体&文本内容\\ \hline
红色字体&\textcolor{white}{蓝色字体}\\ \hline
\end{tabular}
\end{document}
更改表格线形和颜色
使用到两个主要命令,
添加横线使用:
\hrule width <宽度> height <高度>
注意:宽度和高度都要有单位,这里面的高度是横线的粗细
添加竖线使用:
\hrule width <宽度> height <高度>
注意:这里的宽度是指竖线的粗细。
在这两个命令前面添加 \color{目标颜色} 可以更改 线条颜色
如何用这两个命令替换掉表格中的线条需要注意以下 几点:
在表格某一行后插入横线时,需要使用 \noalign{ <线条命令> } 命令。这样插入的线条才不会当成第二行的单元格内的内容。
将表格竖线 “|” 换成制定形式的竖线的时候,需要使用 !{ <线条命令>} 具体用法参考array 宏包
因此加入到原来的代码如下:
\documentclass{ctexart}
\usepackage{array,colortbl}%需要用到的宏包
\begin{document}
\begin{tabular}{ !{\color{cyan}\vrule width 10pt} >{\color{red}} c | c |}
\hline
红色字体&文本内容\\ \noalign{{\color{green}\hrule height 10pt}}
红色字体&\textcolor{white}{蓝色字体}\\ \hline
\end{tabular}
\end{document}
即:将第一条竖线改为 青色 粗为10 pt 的竖线,因为有表格限定线条长度,所以长度 height 不用设置。
将表格中间的横线,设置成 绿色 粗为10pt 的横线,因为表格也有限定的表宽,因此 宽度 width 不用设置。
任何建议,希望可以批评指正,该文内容相关视频可去 B 站 搜索用户 joefsong 查看。