【注】笔记来自《LaTeX入门》——刘海洋。

1. 简介

原始的 TeX 引擎不支持彩色,有关彩色的功能都是由输出 PS、PDF 格式的 TeX 引擎或驱动提供的,有关命令是在绘图相关的扩展宏包中定义的。基本的彩色支持工具是 color 宏包,它是 LaTeX 的基本组件,graphics 工具包的一部分。

2. 基础

2.1 预定义颜色

在标准的 color 宏包中只有几种原色是预定义的,分别是:

  • 黑白颜色:black(黑)、white(白)
  • 色光三原色:red(红)、green(绿)、blue(蓝)
  • 印刷三原色:cyan(青)、magenta(品红)、yellow(黄)

这三类原色分别使用三种不同的色彩模型:gray(灰度)、rgb(红绿蓝)和 cmyk(青品红黄黑)。在使用颜色时,除了可以使用预定义的颜色外,还可以给颜色命令指定模型,然后使用色彩模型下的几个分量 [0,1][0,1] 之间的数值来表示具体颜色。

1
2
3
% 命令解释见下文
\textcolor[gray]{0.5}{50\% 灰色}
\color[rgb]{0.6,0.6,0} 暗黄色

还有一种由输出驱动直接支持的 named 名称模型,比如在 Dvips 驱动下,可以给用 usenames 宏包选项直接调用下图中的各种色彩名,并加以色彩强度。

名称 颜色 数值 名称 颜色 数值
Apricot #FBB982 Aquamarine #00B5BE
Bittersweet #C04F17 Black #221E1F
Blue #2D2F92 BlueGreen #00B3B8
BlueViolet #473992 BrickRed #B6321C
Brown #792500 BurntOrange #F7921D
CadetBlue #74729A CarnationPink #F282B4
Cerulean #00A2E3 CornflowerBlue #41B0E4
Cyan #00AEEF Dandelion #FDBC42
DarkOrchid #A4538A Emerald #00A99D
ForestGreen #009B55 Fuchsia #8C368C
Goldenrod #FFDF42 Gray #949698
Green #00A64F GreenYellow #DFE674
JungleGreen #00A99A Lavender #F49EC4
LimeGreen #8DC73E Magenta #EC008C
Mahogany #A9341F Maroon #AF3235
Melon #F89E7B MidnightBlue #006795
Mulberry #A93C93 NavyBlue #006EB8
OliveGreen #3C8031 Orange #F58137
OrangeRed #ED135A Orchid #AF72B0
Peach #F7965A Periwinkle #7977B8
PineGreen #008B72 Plum #92268F
ProcessBlue #00B0F0 Purple #99479B
RawSienna #974006 Red #ED1B23
RedOrange #F26035 RedViolet #A1246B
Rhodamine #EF559F RoyalBlue #0071BC
RoyalPurple #613F99 RubineRed #ED017D
Salmon #F69289 SeaGreen #3FBC9D
Sepia #671800 SkyBlue #46C5DD
SpringGreen #C6DC67 Tan #DA9D76
TealBlue #00AEB3 Thistle #D883B7
Turquoise #00B4CE Violet #58429B
VioletRed #EF58A0 White #FFFFFF
WildStrawberry #EE2967 Yellow #FFF200
YellowGreen #98CC70 YellowOrange #FAA21A

比如可以选定 60%60\% 的淡紫色:

1
2
3
4
5
% 导言区
\uspackage[usenames]{color}
% ……
% 使用 latex + dvips 编译
\color[named]{Purple,0.6}

此外,还可以使用 dvipsnames 选项来获得更多的色彩名,而不必考虑使用的输出驱动。dvipsnames 选项调入的色彩名默认以 cmyk 色彩模型给出。

1
2
3
4
% 导言区
\usepackage[dvipsnames]{color}
% ……
\textcolor{Purple}{紫色文字}

类似的色彩名称也可以用户自己定义,其语法格式如下:

1
2
3
\definecolor{<色彩名>}{<模型>}{<分量值>}
% 比如定义紫色
\definecolor{Purple}{cmyk}{0.45,0.86,0,0}

2.2 文字

color 宏包中,使用彩色的基本命令是 \color\textcolor

1
2
\color{<颜色>}
\textcolor{<颜色>}{<文字>}

其中,\color 是生命式命令,它使(同一分组内)后面的内容都使用指定的颜色输出,而 \textcolor 则将参数 <文字> 以指定的颜色输出。

2.3 背景和线框

color 宏包还提供页面背景色以及彩色盒子的命令,其语法格式如下:

1
2
3
\pagecolor{<页面颜色>}
\colorbox{<盒子颜色>}{<文字>}
\fcolorbox{<线框颜色>}{<盒子颜色>}{<文字>}

\fbox 类似,盒子外框的间距与线框粗细由长度变量 \fboxsep\fboxrule 控制。

3. 扩展

3.1 xcolor 宏包

xcolor 宏包支持更多的色彩模型,诸如 rgb、cmy、cmyk、hsb、gray 等。使用这些模型可以更方便地定义各色色彩,而且将这些色彩模型作为宏包选项,则可以将整个文档的所有色彩都转换到指定的模型去,比如制作印刷稿时:

1
2
% 将所有色彩转换为 cmyk 模型
\usepackage[cmyk]{xcolor}

xcolor 宏包比 color 宏包支持更多的基本色彩,下表中的颜色在调用 xcolor 宏包后即可任意使用:

名称 颜色
black \colorbox{black}{}
blue \colorbox{blue}{}
brown \colorbox{brown}{}
cyan \colorbox{cyan}{}
darkgray \colorbox{darkgray}{}
gray \colorbox{gray}{}
green \colorbox{green}{}
lightgray \colorbox{lightgray}{}
lime \colorbox{lime}{}
magenta \colorbox{magenta}{}
olive \colorbox{olive}{}
orange \colorbox{orange}{}
pink \colorbox{pink}{}
purple \colorbox{purple}{}
red \colorbox{red}{}
teal \colorbox{teal}{}
violet \colorbox{violet}{}
white \colorbox{white}{}
yellow \colorbox{yellow}{}

同时除了可以使用 dvipsnames 选项可以访问 PostScript 预定义的色彩名称(见「2.1」节表格)外,还可以使用 svgnamesx11names 访问 svg 格式或者是 unix x11 库中预定义的大量色彩名称。尤其有用的是,xcolor 还支持颜色表达式的记法,常用的有:

  • 半色调:<颜色>!<百分数>
  • 混合色:<颜色>!<百分数>!<颜色>
  • 互补色:-<颜色>

这样可以方便地表示出 50%50\% 的紫色或者是更复杂的将不同颜料按比例混合的中间色调。

1
2
3
\textcolor{purple!70}{淡紫色}
{\color{blue!60!black} 60\% 蓝与 40\% 黑混合的深蓝色}
\colorbox{-red}{青色与红色互补}

xcolor 宏包也提供了许多新的命令来支持更丰富的命令,比如 \colorlet 可以使用色彩表达式来定义新色彩名:

1
2
\colorlet{darkred}{red!50!black}
\textcolor{darkred}{定义暗红色}

更多相关的命令可以参见官方手册。

1
texdoc xcolor

3.2 transparent 宏包

colorxcolor 宏包都不提供透明颜色的支持,使用 pdfTeX 引擎时,可以使用 transparent 宏包实现颜色透明度的支持。它提供了 \transparent\texttransparent 命令,用法与 \color\textcolor 类似。transparent 宏包不支持 pdfTeX 以外的其他图形驱动,不过 LaTeX 中更为复杂的绘图语言 PSTricks 和 TikZ 都支持透明色,如果需要可以调用它们实现。