我是 TeX 新手,所以问题可能有点愚蠢。有没有可能使用已经定义的颜色来定义新颜色,颜色会更暗或更亮?我只想使用 TeX。所以我这样定义了颜色:
\def\mainColor{\pdfliteral{0.1 0.5 1 rg}}
我如何从这种颜色定义新的颜色(更浅)?
答案1
如果您直接使用颜色,\pdfliteral
如您的帖子中所述,并且仅在表格中,num num num rg
则应\defdarker
定义。用法是\defdarker\newColor\oriColor{coefficient}
。宏\oriColor
必须已定义为\pdfliteral{num1 num2 num3 rg}
,\defdarker
定义\newColor
为,\pdfliteral{c*num1 c*num2 c*num3 rg}
其中nums
乘以系数c
。这意味着\defdarker\newColor\oriColor{.5}
将新颜色设置为更深的颜色(将 .5 乘以 RGB 中的所有光源)。
{\lccode`\?=`\p \lccode`\!=`\t \lowercase{\gdef\ignorept#1?!{#1}}}
\newdimen\tmpdim
\def\defdarker#1#2#3{\expandafter\defdarkerA#2#1{#3}}
\def\defdarkerA#1#2{\defdarkerB#2\end}
\def\defdarkerB#1 #2 #3 #4\end#5#6{%
\tmpdim=#1pt \tmpdim=#6\tmpdim
\edef\tmp{\expandafter\ignorept\the\tmpdim}%
\tmpdim=#2pt \tmpdim=#6\tmpdim
\edef\tmp{\tmp\space \expandafter\ignorept\the\tmpdim}%
\tmpdim=#3pt \tmpdim=#6\tmpdim
\edef\tmp{\tmp\space \expandafter\ignorept\the\tmpdim}%
\edef#5{\pdfliteral{\tmp\space rg}}%
}
\def\Black{\pdfliteral{0 g}}
\def\mainColor{\pdfliteral{0.1 0.5 1 rg}}
\defdarker\newColor\mainColor{.5}
\defdarker\darkColor\newColor{.5}
\mainColor AAA
\newColor BBB
\darkColor CCC
\Black
\end
问题是这种颜色操作只能在页面本地进行,也就是说,必须在\Black
同一页面上设置和重置颜色。如果你真的在使用纯 TeX,那么我建议使用 OPmac 宏包,其中实现了颜色。但\defdarker
OPmac 的颜色管理宏会略有不同。也许我会把它添加到我的OPmac 技巧页。
答案2
如果您使用,\pdfliteral
那么 TeX 只会将字符串直接传递给 pdf,因此问题就会解决为 pdf 颜色语法之一。在这里,我通过将 rgb 分量和 1(白色)之间的差异减半来制作一个变体,以产生更浅的阴影。
如果您使用已开发的现有宏集(例如 xcolor),则可以使用更自然的语法来混合颜色,这里我只混合白色和黑色,而且您不限于 pdftex,并且相同的语法可以用于 tex/dvips 或 xetex。
\documentclass{article}
\usepackage{xcolor}
\def\mainColor{\pdfliteral{0.1 0.5 1 rg}}
\def\subColor{\pdfliteral{.55 .75 1 rg}}
\definecolor{maincolor}{rgb}{0.1,0.5,1}
\definecolor{black}{rgb}{0,0,0}
\begin{document}
{\mainColor one two three}
{\subColor one two three}
\bigskip
\textcolor{maincolor}{one two three}
\textcolor{maincolor!50}{one two three}
\textcolor{maincolor!50!black!50}{one two three}
\end{document}
答案3
这是David Carlisle 的xcolor
解决方案它展示了如何使用\colorlet
来定义额外的阴影以方便使用。
\documentclass{article}
\usepackage{xcolor}
\definecolor{maincolor}{rgb}{0.1,0.5,1}
\colorlet{lightmain}{maincolor!75}
\colorlet{lightermain}{maincolor!50}
\colorlet{lightestmain}{maincolor!25}
\colorlet{darkmain}{maincolor!75!black}
\colorlet{darkermain}{maincolor!50!black}
\colorlet{darkestmain}{maincolor!25!black}
\begin{document}
\textcolor{darkestmain}{one two three}
\textcolor{darkermain}{one two three}
\textcolor{darkmain}{one two three}
\textcolor{maincolor}{one two three}
\textcolor{lightmain}{one two three}
\textcolor{lightermain}{one two three}
\textcolor{lightestmain}{one two three}
\end{document}
答案4
与其说是答案,不如说是一条长评论。对于自定义颜色的渐变,比如“ thecolor
”,最简单的方法不是定义更多thecolor
任何人都记不住的变体名称,而是简单地使用该颜色的百分比,例如thecolor!75
。
想象一下淡出或过渡到另一种颜色……十种颜色。你能为每种色调找到正确的名称吗?但这种方式非常简单:
\documentclass{article}
\usepackage{xcolor}
\definecolor{thecolor}{rgb}{0.1,0.5,1}
\begin{document}
\textcolor{black}{one two three}
\textcolor{thecolor!25!black}{one two three}
\textcolor{thecolor!50!black}{one two three}
\textcolor{thecolor!75!black}{one two three}
\textcolor{thecolor}{one two three}
\textcolor{thecolor!75}{one two three}
\textcolor{thecolor!50}{one two three}
\textcolor{thecolor!25}{one two three}
\textcolor{green}{one two three}
\textcolor{thecolor!25!green}{one two three}
\textcolor{thecolor!50!green}{one two three}
\textcolor{thecolor!75!green}{one two three}
\textcolor{thecolor}{one two three}
\end{document}