LaTex 写演示文稿 - Beamer 入门 之 彩色表格


本节内容给大家分享如何绘制彩色表格,大致的效果如下:
在这里插入图片描述
该节的内容主要包括(链接可跳至 B站视频链接):

背景颜色

调整表格颜色可以使用 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 \LaTeX 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 查看。

  • 4
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一段使用Qt5.12.12绘制播放音乐动态直方图的源代码: ```cpp #include <QtWidgets> class MusicWidget : public QWidget { public: MusicWidget(QWidget *parent = nullptr) : QWidget(parent) { setFixedSize(400, 300); } void setAudioData(const QVector<double> &data) { audioData = data; update(); } protected: void paintEvent(QPaintEvent *event) override { Q_UNUSED(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); int columnWidth = width() / audioData.size(); // 绘制直方图 for (int i = 0; i < audioData.size(); ++i) { int columnHeight = height() * audioData[i]; QPoint topLeft(i * columnWidth, height() - columnHeight); QColor columnColor(Qt::red); columnColor.setAlphaF(0.5); painter.setBrush(columnColor); painter.drawRect(QRect(topLeft, QSize(columnWidth, columnHeight))); } } private: QVector<double> audioData; }; int main(int argc, char *argv[]) { QApplication app(argc, argv); // 生成随机音频数据 QVector<double> audioData; for (int i = 0; i < 100; ++i) { double value = qrand() / static_cast<double>(RAND_MAX); audioData.append(value); } MusicWidget musicWidget; musicWidget.setAudioData(audioData); musicWidget.show(); return app.exec(); } ``` 这段代码创建了一个名为`MusicWidget`的QWidget子类,用于绘制动态直方图。在构造函数中,设置了窗口的固定大小。`setAudioData`函数用于设置音频数据,当音频数据改变时,调用`update`函数触发重新绘制。 在`paintEvent`函数中,通过QPainter类进行绘制操作。首先,设置了绘制抗锯齿效果。然后,根据音频数据的大小,计算出每个直方图列的宽度。接着,使用循环遍历音频数据并绘制每个直方图列。绘制使用了Qt引擎中的QPainter类的drawRect函数,根据数据值计算出直方图的高度,并设定矩形的位置和尺寸。绘制完成后,显示窗口。 在main函数中,首先生成了一个随机音频数据,然后创建MusicWidget对象,并将音频数据设置到该对象中,最后显示窗口并启动应用程序的事件循环。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值