大家好,
我对 LaTeX 还不太熟悉,我想定义一个根据输入生成 RGB 颜色的函数;
例如,假设输入参数x
是[0,100]
,我想分配颜色{RGB,1:red,(1-x/100); green,(0+x/100); blue,1}
当然,我可以手动计算正确的颜色,但我想定义一个函数,假设\myrgb{10}
它自动输出正确的颜色,我可以按以下方式使用:
\documentclass{article}
\usepackage[dvipsnames]{xcolor}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[main node/.style={circle,draw,font=\bfseries,minimum size=0.6cm,
inner sep=0cm}]
\node[main node] (1)[fill=\myrgb{13}] {1};
\node[main node] (2)[fill=\myrgb{27}] {2};
\end{tikzpicture}
\end{document}
我该怎么做?非常感谢
答案1
由于您正在加载 Ti钾Z,为什么不用它来计算你的颜色pgfmathparse
?
\documentclass{article}
\usepackage{tikz}
\usepackage{xcolor}
\newcommand{\textcol}[2]{%
\pgfmathparse{1-0.01*#1)}\edef\rcolor{\pgfmathresult}%
\pgfmathparse{0.01*#1)}\edef\gcolor{\pgfmathresult}%
\definecolor{mycolour}{rgb}{\rcolor, \gcolor, 1}%
\textcolor{mycolour}{#2}%
}
\begin{document}
Hello, my colour is \textcol{60}{very nice} in this text!
\end{document}
编辑
因为您首先想要填充一个节点,所以这里有一个解决方案:
\documentclass{article}
\usepackage{tikz}
\usepackage{xcolor}
\tikzset{
myfillrgb/.code args={#1}{
\pgfmathparse{1-0.01*#1)}\edef\rcolor{\pgfmathresult}%
\pgfmathparse{0.01*#1)}\edef\gcolor{\pgfmathresult}%
\definecolor{mycolour}{rgb}{\rcolor, \gcolor, 1}%
\pgfkeysalso{/tikz/fill=mycolour}
}
}
\begin{document}
\begin{tikzpicture}[main node/.style={circle,draw,font=\bfseries,minimum size=0.6cm,
inner sep=0cm}]
\node[main node,myfillrgb={10}] (1) {1};
\node[right of = 1,main node,myfillrgb={50}] (2) {2};
\node[right of = 2,main node,myfillrgb={90}] (3) {3};
\end{tikzpicture}
\end{document}
答案2
xcolor
这可以通过使用自身的功能(在本例中为扩展颜色表达式)非常直接地完成。唯一缺少的是一种可扩展的方法来评估100-#1
。如果#1
始终为整数,我们可以简单地使用\the\numexpr100-#1\relax
。但为了尽可能通用,请使用以下用途\fpeval
。
它定义了一个宏\myrgb
,可以在任何xcolor
需要颜色的地方使用。作为一个小缺点,Ti钾Z 不会理解那\myrgb{10}
是一种颜色,所以如果您想改变笔触颜色,\myrgb
您必须使用color
键。
\documentclass[]{article}
\usepackage{xfp}
\usepackage{xcolor}
\usepackage{tikz}
\newcommand\myrgb[1]
{rgb,100:red,\fpeval{100-#1};green,\fpeval{#1};blue,100}
% compare the results of \myrgb with the direct usage of [rgb]
\newcommand\compare[1]
{%
\textcolor{\myrgb{#1}}{\rule{5pt}{5pt}}%
\textcolor[rgb]{\fpeval{(100-#1)/100},\fpeval{(#1)/100},1}{\rule{5pt}{5pt}}%
}
\begin{document}
\begin{tikzpicture}
\draw[color=\myrgb{100}, fill=\myrgb{0}, ultra thick] circle[radius=5pt];
\end{tikzpicture}
\compare{0}
\compare{10}
\compare{20}
\compare{30}
\compare{40}
\compare{50}
\compare{60}
\compare{70}
\compare{80}
\compare{90}
\compare{100}
\end{document}
答案3
可以使用newcommand
, \newcommand{\colour}[1]{\color[RGB]{#1,#1,1}}
。
red,green,blue
;每种颜色的数量用0到255之间的数字表示。
\documentclass{article}
\usepackage{xcolor}
\newcommand{\colour}[1]{\color[RGB]{#1,#1,1}}
\newcommand{\textcolour}[2]{\textcolor[RGB]{#1,#1,1}{#2}}
\begin{document}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras erat orci,
{\colour{233}interdum vel est ac, posuere ullamcorper erat}.
Proin condimentum, quam a convallis sagittis, est nunc egestas dui, a tincidunt metus enim in arcu. Morbi suscipit diam sodales mauris sodales vestibulum. Donec eget scelerisque lorem. Proin pellentesque nisi eget massa ullamcorper euismod. Donec nisi enim, dignissim pharetra sodales ac, mattis ac dolor. Mauris mauris nibh, maximus sed dolor vitae, scelerisque luctus mauris. Ut non finibus massa, sed faucibus leo. Curabitur condimentum magna id ultrices molestie. Curabitur consectetur sollicitudin ipsum.
\textcolour{59}{Sed hendrerit, lectus quis egestas semper, odio odio condimentum nibh}, nec efficitur felis sapien vel diam.
\end{document}