【注】笔记来自《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][0,1] 之间的数值来表示具体颜色。
代码语言:javascript复制% 命令解释见下文
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``% 的淡紫色:
代码语言:javascript复制% 导言区
uspackage[usenames]{color}
% ……
% 使用 latex dvips 编译
color[named]{Purple,0.6}
此外,还可以使用 dvipsnames
选项来获得更多的色彩名,而不必考虑使用的输出驱动。dvipsnames
选项调入的色彩名默认以 cmyk 色彩模型给出。
% 导言区
usepackage[dvipsnames]{color}
% ……
textcolor{Purple}{紫色文字}
类似的色彩名称也可以用户自己定义,其语法格式如下:
代码语言:javascript复制definecolor{<色彩名>}{<模型>}{<分量值>}
% 比如定义紫色
definecolor{Purple}{cmyk}{0.45,0.86,0,0}
2.2 文字
在 color
宏包中,使用彩色的基本命令是 color
和 textcolor
:
color{<颜色>}
textcolor{<颜色>}{<文字>}
其中,color
是生命式命令,它使(同一分组内)后面的内容都使用指定的颜色输出,而 textcolor
则将参数 <文字>
以指定的颜色输出。
2.3 背景和线框
color
宏包还提供页面背景色以及彩色盒子的命令,其语法格式如下:
pagecolor{<页面颜色>}
colorbox{<盒子颜色>}{<文字>}
fcolorbox{<线框颜色>}{<盒子颜色>}{<文字>}
和 fbox
类似,盒子外框的间距与线框粗细由长度变量 fboxsep
和 fboxrule
控制。
3. 扩展
3.1 xcolor
宏包
xcolor
宏包支持更多的色彩模型,诸如 rgb、cmy、cmyk、hsb、gray 等。使用这些模型可以更方便地定义各色色彩,而且将这些色彩模型作为宏包选项,则可以将整个文档的所有色彩都转换到指定的模型去,比如制作印刷稿时:
% 将所有色彩转换为 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」节表格)外,还可以使用 svgnames
和 x11names
访问 svg 格式或者是 unix x11 库中预定义的大量色彩名称。尤其有用的是,xcolor
还支持颜色表达式的记法,常用的有:
- 半色调:
<颜色>!<百分数>
- 混合色:
<颜色>!<百分数>!<颜色>
- 互补色:
-<颜色>
这样可以方便地表示出 50PP% 的紫色或者是更复杂的将不同颜料按比例混合的中间色调。
代码语言:javascript复制textcolor{purple!70}{淡紫色}
{color{blue!60!black} 60% 蓝与 40% 黑混合的深蓝色}
colorbox{-red}{青色与红色互补}
xcolor
宏包也提供了许多新的命令来支持更丰富的命令,比如 colorlet
可以使用色彩表达式来定义新色彩名:
colorlet{darkred}{red!50!black}
textcolor{darkred}{定义暗红色}
更多相关的命令可以参见官方手册。
代码语言:javascript复制texdoc xcolor
3.2 transparent
宏包
color
和 xcolor
宏包都不提供透明颜色的支持,使用 pdfTeX 引擎时,可以使用 transparent
宏包实现颜色透明度的支持。它提供了 transparent
与 texttransparent
命令,用法与 color
和 textcolor
类似。transparent
宏包不支持 pdfTeX 以外的其他图形驱动,不过 LaTeX 中更为复杂的绘图语言 PSTricks 和 TikZ 都支持透明色,如果需要可以调用它们实现。