我需要建立这种类型的表:
材料 | 颜色 | 图片 | 颜色定义
为了检索颜色定义,我尝试使用,\extractcolorspecs
期望第三个参数{ color-cmd }
允许我打印所需的内容。问题是我在 HTML 中定义了颜色,而命令在输出中给出了 RGB 格式。这是一个 MWE:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usepackage{booktabs}
\usepackage{xcolor}
\definecolor{mapblue}{HTML}{0000FF}%
\definecolor{maproyalblue}{HTML}{0088FF}%
\definecolor{mapskyblue}{HTML}{00CCFF}%
\definecolor{mapgreen}{HTML}{00CC00}%
\definecolor{mapdandelion}{HTML}{FFCC00}%
\definecolor{maporange}{HTML}{FF8800}%
\definecolor{mapred}{HTML}{FF0000}%
\newcommand{\colpic}[1]{\tikz \draw[#1,fill=#1,draw](0,0)circle(0.1cm);}
\newcommand{\colrow}[1]{#1 & \colpic{#1} & \extractcolorspecs{#1}{\model}{\mycolor}\mycolor}
\begin{document}
\begin{tabular}{cccc}
\toprule
\multicolumn{1}{c|}{\textsc{Relevance Interval}} &
\multicolumn{1}{c|}{\textsc{Color}} &
\multicolumn{1}{c|}{\textsc{Picture}} &
\multicolumn{1}{c}{\textsc{ Color Definition}}\\
\midrule
0 - 5 & \colrow{mapblue}\\
5 - 10 & \colrow{maproyalblue}\\
10 - 25 & \colrow{mapskyblue}\\
25 - 50 & \colrow{mapgreen}\\
50 - 100 & \colrow{mapdandelion}\\
100 - 200 & \colrow{maporange}\\
>200 & \colrow{mapred}\\
\bottomrule
\end{tabular}
\end{document}
输出结果如下:
如何在 HTML 中获取颜色定义?
答案1
我们可以将存储的颜色定义版本(以 rgb 表示)转换为 HTML,方法是:
\newcommand{\colrow}[1]{%
#1 & \colpic{#1} & \extractcolorspecs{#1}{\model}{\mycolor}%
\convertcolorspec{\model}{\mycolor}{HTML}\tmp\tmp
}
\somecolorhtml
我们还可以通过一些额外的编码来压缩命令的定义。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{tikz,booktabs,xcolor}
\newcommand{\definemycolor}[2]{%
\definecolor{#1}{HTML}{#2}%
\expandafter\def\csname#1html\endcsname{#2\relax} %Which defines \colornamehtml
}
\newcommand{\colpic}[1]{\tikz \draw[#1,fill=#1,draw](0,0)circle(0.1cm);}
\newcommand{\colrow}[1]{#1 & \colpic{#1} &\csname#1html\endcsname}
\definemycolor{mapblue}{0000FF}%
\definemycolor{maproyalblue}{0088FF}%
\definemycolor{mapskyblue}{00CCFF}%
\definemycolor{mapgreen}{00CC00}%
\definemycolor{mapdandelion}{FFCC00}%
\definemycolor{maporange}{FF8800}%
\definemycolor{mapred}{FF0000}%
\begin{document}
\begin{tabular}{cccc}
\toprule
\multicolumn{1}{c|}{\textsc{Relevance Interval}} &
\multicolumn{1}{c|}{\textsc{Color}} &
\multicolumn{1}{c|}{\textsc{Picture}} &
\multicolumn{1}{c}{\textsc{ Color Definition}}\\ \midrule
0 - 5 & \colrow{mapblue}\\
5 - 10 & \colrow{maproyalblue}\\
10 - 25 & \colrow{mapskyblue}\\
25 - 50 & \colrow{mapgreen}\\
50 - 100 & \colrow{mapdandelion}\\
100 - 200 & \colrow{maporange}\\
>200 & \colrow{mapred}\\
\bottomrule
\end{tabular}
Since we defined the \verb|\colornamehtml| command versions of the colors,
\verb|\mapbluehtml| gives \textcolor{mapblue}{\mapbluehtml} and
\verb|\mapdandelionhtml| gives \textcolor{mapdandelion}{\mapdandelionhtml}.
\end{document}
另外,我认为等宽字体在最后一列会更受欢迎,因此colrow
用以下命令替换
\newcommand{\colrow}[1]{#1 & \colpic{#1} &\expandafter\texttt{\csname#1html\endcsname}}
会导致
答案2
这个问题始于 2012 年左右,最初的答案体现了社区专家的先见之明。
2016 年,Uwe Kern 博士介绍了 xcolor 软件包 (v2.12)(2016 年 5 月 11 日)。
在 xcolor.pdf 第 23 页上,https://ctan.org/pkg/xcolor?lang=en中,他谈到了该包的“颜色测试”功能。¶ 2.6.4。
在第 31 页,有一个代码片段,这里将其放入 MWE 中以提供工作上下文。通过输入各种颜色识别方式的宏,输出是带有 rgb、cmyk、hsb、HTML 和灰色的表格。他建议将此宏放在自己的环境中。
\documentclass[12pt]{article}
\usepackage[margin=0.5in]{geometry}
\usepackage[dvipsnames*, x11names, svgnames, hyperref]{xcolor}
\AtBeginDocument{\colorlet{defaultcolor}{.}}
\begin{document}
\sffamily
\begin{testcolors}[rgb,cmyk,hsb,HTML,gray]
\testcolor{olive}
\testcolor{red!50!green}
\testcolor{-cyan!50!magenta}
\testcolor[cmyk]{0,0,1,0.5}
\testcolor[cmyk]{0,0,.5,.5}
\testcolor[rgb:cmyk]{0,0,.5,.5}
\end{testcolors}
\end{document}
简而言之,原始答案中的分析现在基本上是xcolor
包中的一个宏。