LaTeX で色を扱う標準的な道具が **xcolor** パッケージです。古い color パッケージを置き換える上位互換で、文字や背景に色を付けるだけでなく、red!50!blue のような 色式(color expression) で色そのものを混ぜ合わせられるのが最大の特徴。このページでは、読み込み方からモデル・色名・混色までを順に見ていきます。
パッケージを読み込む
色を使うには、プリアンブルで \usepackage{xcolor} と書くだけです。作者は Uwe Kern(2003〜2021 年、現在は LaTeX Project が保守)で、ドライバに依存せず PDF でも DVI でも同じように色が出るよう設計されています。古い文書では \usepackage{color} を見かけますが、新規に書くなら xcolor を選んでください。混色(色式)や色名の追加セットは color には無く、xcolor だけの機能です。
素のままでも 19 色の基本色名が使えますが、オプションを付けると 定義済みの色名セット が追加で読み込まれます。dvipsnames は PostScript(dvips)由来の 68 色、svgnames は SVG 1.1/CSS の約 151 色、x11names は X11 由来の約 317 色。さらに table オプションを付けると **colortbl** が一緒に読み込まれ、表のセルや行に色を塗れるようになります(詳しくは「色のついた表」のページへ)。
\usepackage{xcolor} % 基本(19 色)/ basics (19 colours)
\usepackage[dvipsnames]{xcolor} % + 68 色 / + 68 PostScript names
\usepackage[svgnames]{xcolor} % + 約151色 / + ~151 SVG names
\usepackage[x11names]{xcolor} % + 約317色 / + ~317 X11 names
\usepackage[dvipsnames,table]{xcolor} % 色名 + 表の着色 / names + colortblオプションは併記でき、[dvipsnames,svgnames] のように複数のセットをまとめて読み込めます。色名は内部で衝突しないよう設計されていますが、混乱を避けるため使うセットだけに絞るのがおすすめです。
色を付ける
最もよく使うのが **\textcolor{色}{文字} で、指定した範囲の文字だけに色を付けます。範囲を波括弧で渡さず、そこから先をまとめて色付けしたいときは、宣言形の {\color{色} … }** をグループ { } の中で使います。\color はそのグループの終わりまで効き続ける「スイッチ」だと考えてください。
これは \textcolor{red}{赤い} 文字です。
{\color{blue} ここから先は青。} ここは元の色に戻ります。背景を塗りたいときは **\colorbox{色}{文字} が、文字の後ろを指定色のベタ塗りボックスにします。枠と背景を別々の色にしたいなら \fcolorbox{枠色}{背景色}{文字}。最初の引数が枠線、2 番目が塗りつぶしの色です。ページ全体の地色を変えるのが \pagecolor{色}**(元に戻すのは \nopagecolor)。これは以降のすべてのページに効くので、表紙だけ黒くしたいなら使う場所に注意してください。
\colorbox{yellow}{ハイライト}
\fcolorbox{red}{yellow}{赤枠・黄背景}
\pagecolor{black} % これ以降、ページ全体が黒地にこれらの命令はどれも、色名の代わりに 色式 やモデル指定を直接受け取れます。たとえば \textcolor{red!50!blue}{…} や、角括弧でモデルを添えた \textcolor[rgb]{1,0,0}{…} のように書けます(モデル指定は次節)。
色を定義する
自分の色に名前を付けるのが **\definecolor{名前}{モデル}{値}** です。一度プリアンブルで定義すれば、以後は普通の色名として \textcolor などに渡せます。たとえば落ち着いた青を myblue として定義するなら次のとおり。
\definecolor{myblue}{rgb}{0.2,0.4,0.8}
% 使う / use it:
\textcolor{myblue}{この文字は myblue}もう一つ、既存の色(や色式)から新しい色名を作るのが **\colorlet{名前}{色}** です。\definecolor がモデルと数値から色を作るのに対し、\colorlet は すでにある色を混ぜて 名前を付けます。たとえば赤を半分白で薄めた色を half と名付けるなら、\colorlet{half}{red!50}。混色の ! 記法は次節で詳しく扱います。
色モデル
\definecolor の 2 番目の引数が 色モデル、すなわち色を数値でどう表すかの方式です。xcolor は複数のモデルに対応していて、印刷向けの cmyk から Web でおなじみの HTML 16 進表記まで、用途に合わせて選べます。よく使うものを挙げます。
| モデル | 値 | 例 |
|---|---|---|
rgb | 赤・緑・青を各 0〜1 | {0.2,0.4,0.8} |
RGB | 赤・緑・青を各 0〜255 の整数 | {51,102,204} |
HTML | 6 桁の 16 進数 RRGGBB | {FF8800} |
cmyk | シアン・マゼンタ・黄・黒を各 0〜1 | {0,0.5,1,0} |
gray | 1 値(0=黒, 1=白) | {0.5} |
named | 既存の色名を参照(dvips 名など) | {Periwinkle} |
同じオレンジ色でも、モデルが違えば書き方が変わるだけで結果は同じです。次の 4 行はいずれもほぼ同色を定義します。HTML は 16 進 6 桁で、Web のカラーコードをそのまま貼れるのが便利。cmyk は印刷(4 色分解)で使います。
\definecolor{o1}{rgb}{1,0.5,0}
\definecolor{o2}{RGB}{255,128,0}
\definecolor{o3}{HTML}{FF8000}
\definecolor{o4}{cmyk}{0,0.5,1,0}モデルは色を「使う」側でも角括弧で直接指定できます。色名を定義せず一度きり使うなら、\textcolor[HTML]{FF8800}{…} や \color[gray]{0.5} のように書くのが手軽です。なお named モデルは、dvipsnames などで読み込んだ既存の色名を参照する特殊なモデルで、ふだんは単に色名を直接書けば足ります。
色式 — 色を混ぜる
ここが xcolor の真価です。色名の代わりに、感嘆符 ! を使った 色式 を、色を期待するあらゆる場所に書けます。基本形は **色A!割合!色B** で、色 A をその割合だけ、残りを色 B にして混ぜます。red!50!blue なら赤 50% と青 50%、red!75!blue なら赤 75% と青 25% です。
色 B を省くと、残りは 白 とみなされます。つまり red!20 は「赤 20% + 白 80%」で、薄い赤(淡い色=ティント)になります。逆に黒と混ぜれば暗くなり、blue!30!black は「青 30% + 黒 70%」の濃紺です。先頭に マイナス記号 を付けた -red は赤の 補色(反転色)を表します。
red!50!blue** — 赤と青を半々に混ぜた紫red!20** — 赤 20%・白 80%。薄い赤(ティント)blue!30!black** — 青 30%・黒 70%。暗い青(シェード)-red** — 赤の補色(シアン寄り)green!40!yellow!60** — 連結も可能。左から順に混ぜる
色式はどこでも使えるので、\textcolor{blue!30!black}{…}、\colorbox{yellow!40}{…}、\definecolor や \colorlet の中でも自由に書けます。混色を一か所で名前にしておけば、文書全体のトーンを 1 行の定義で調整できる、という設計です。
\textcolor{red!50!blue}{半分ずつの紫}
\colorbox{yellow!40}{薄い黄色の背景}
\colorlet{accent}{blue!30!black} % アクセント色を一括管理
\textcolor{accent}{見出しの色}使える色名
オプション無しでも、次の 19 の基本色 はいつでも使えます。
- black, blue, brown, cyan, darkgray, gray, green, lightgray, lime, magenta, olive, orange, pink, purple, red, teal, violet, white, yellow
もっと豊富な色が欲しいときは、前述のオプションで色名セットを足します。dvipsnames なら RoyalBlue・Periwinkle・BurntOrange など 68 色、svgnames なら DarkSlateGray・Tomato など CSS でおなじみの約 151 色が使えます。色名は大文字小文字を区別するので、RoyalBlue を royalblue と書くと未定義エラーになります。どの色がどんな見た目かは、xcolor のドキュメントにある色見本(texdoc xcolor で開けます)が確実です。