如何在 TeX 中根据已定义的颜色定义更浅/更深的颜色?

如何在 TeX 中根据已定义的颜色定义更浅/更深的颜色?

我是 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 宏包,其中实现了颜色。但\defdarkerOPmac 的颜色管理宏会略有不同。也许我会把它添加到我的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}

平均能量损失

相关内容