使用 tikz 和 xcolor 制作彩虹色的字母

使用 tikz 和 xcolor 制作彩虹色的字母

我正在尝试定义彩虹色以仅用于一个字母。我做了一些挖掘。当然可以为每个字母赋予不同的颜色。但我打算这样做:

信函1

信件2

很抱歉,我没有试用代码。我到处找,但我不知道从哪里开始。你能帮忙吗?

答案1

收集一些其他问题:制作可拉伸阴影如何为文本添加阴影

我们可以定义可拉伸彩虹阴影并将其应用于文本:

在此处输入图片描述

\documentclass{article} 
\usepackage{tikz}
\usetikzlibrary{fadings, shadings}
\newcounter{fadcnt}\setcounter{fadcnt}{0}
\newcommand\fadingtext[3][]{%
\stepcounter{fadcnt}
  \begin{tikzfadingfrompicture}[name=fading letter\thefadcnt]
    \node[text=transparent!0,inner xsep=0pt,outer xsep=0pt,#1] {#3};
  \end{tikzfadingfrompicture}%
  \begin{tikzpicture}[baseline=(textnode.base)]
    \node[inner sep=0pt,outer sep=0pt,#1](textnode){\phantom{#3}}; 
    \shade[path fading=fading letter\thefadcnt,#2,fit fading=false]
    (textnode.south west) rectangle (textnode.north east);% 
  \end{tikzpicture}% 
}
\usetikzlibrary{calc}
\newbox\shbox
\tikzset{%
  path picture shading/.style={%
  path picture={%
%
\pgfpointdiff{\pgfpointanchor{path picture bounding box}{south west}}%
  {\pgfpointanchor{path picture bounding box}{north east}}%
\pgfgetlastxy\pathwidth\pathheight%
\pgfinterruptpicture%
   \global\setbox\shbox=\hbox{\pgfuseshading{#1}}%
 \endpgfinterruptpicture%
\pgftransformshift{\pgfpointanchor{path picture bounding box}{center}}%
\pgftransformxscale{\pathwidth/(\wd\shbox)}%
\pgftransformyscale{\pathheight/(\ht\shbox)}% \dp will (should) be 0pt
\pgftext{\box\shbox}%
%
    }
  }
}
\pgfdeclarehorizontalshading{rainbow}{10bp}{color(0bp)=(violet);
            color(1.6667bp)=(blue);
            color(3.3333bp)=(cyan);
            color(5bp)=(green);
            color(6.6667bp)=(yellow);
            color(8.3333bp)=(orange);
            color(10bp)=(red)}
\begin{document} 
 \fadingtext[scale=10, font=\bfseries]{upper left=red, upper right=green, lower left=blue,lower right=yellow}{\LaTeX}

\fadingtext[scale=10, font=\bfseries]{path picture shading=rainbow}{\LaTeX}

\fadingtext[scale=10, font=\bfseries]{path picture shading=rainbow}{X}
\end{document}

答案2

如果您制作一个阴影100bp方块(或100bp径向阴影的半径),并记住(对于水平或垂直阴影)中间方块中只有九分之一的区域可见(最多),则阴影将缩放as expected。也就是说,它将按照常规预定义阴影缩放的方式缩放。因此,最好始终指定100bp宽度/高度并安排颜色以覆盖高度/宽度100bp

我定义了 2 种这种阴影,rainbowrainbow steps。后者使用离散条纹的颜色。前者是“真实”阴影。

然后,我my <capital letter>为每个<capital letter>英文字母定义 26 种淡入淡出。

这些阴影和褪色可以在 s 内使用tikzpicture。例如:

\begin{tikzpicture}
  \shade [shading=rainbow] (1,-1) rectangle (8,-2);
  \shade [shading=rainbow steps] (1,-1) rectangle (8,0);
  \shade [shading=rainbow, shading angle=90] (1,0) rectangle (3,2);
  \shade [shading=rainbow steps, shading angle=90] (6,0) rectangle (8,2);
  \shade [shading=rainbow, shading angle=-90] (3,1) rectangle (6,2);
  \shade [shading=rainbow, shading angle=90, path fading=my Y, fit fading=true] (4.5,.25) rectangle (5,.75);
  \shade [shading=rainbow steps, shading angle=-90, path fading=my X, fit fading=true] (4,.25) rectangle (4.5,.75);
\end{tikzpicture}

彩虹变化

最后,我定义了两个新命令

\rainbowletter(<dimension>)[<tikz keys>]{<capital letter>}
\rainbowletter*(<dimension>)[<tikz keys>]{<capital letter>}

每个参数都有 2 个可选参数和一个强制参数。第一个可选参数(如果指定)应为维度或数字 TiZ 可以理解为维度,例如0.7810pt。生成的字母将位于边长为该长度的方框中。如果指定了第二个可选参数,则可以指定 TiZ 键用于创建字母的背景\path。这些可用于填充背景或更改彩虹的阴影角度。

带星号的形式使用离散条纹。无星号的形式使用常规阴影。

所以,

\rainbowletter(.75)[inner color=white, outer color=black, shading angle=-90]{Y}

将使用一个 7.5 毫米 x 7.5 毫米的盒子,背景阴影中心为白色,边缘为黑色。它将使用标准彩虹阴影,但会将其旋转 -90 度。它将产生彩虹 Y。

彩虹Y

\rainbowletter*(1){A}

这将使用大小相当于默认值1(即 10 毫米见方)的离散条纹,并且仅显示 A,没有其他内容。

彩虹A

\rainbowletter[top color=black, bottom color=black, middle color=white, shading angle=90,]{X}

这将为我们提供一个阴影背景,左边和右边是黑色,中间是白色,并且彩虹阴影旋转了 90 度。

彩虹十

请注意,shading angle也会影响背景阴影,因此我们使用topbottom来获得leftright

完整代码:

\documentclass[border=10pt,multi,tikz]{standalone}
\usetikzlibrary{fadings}
\usepackage{xparse}
\pgfdeclarehorizontalshading{rainbow}{100bp}{%
  rgb(0bp)=(1,0,0);
  rgb(26bp)=(1,0,0);
  rgb(33bp)=(1,.5,0);
  rgb(40bp)=(1,1,0);
  rgb(47bp)=(0,1,0);
  rgb(54bp)=(0,1,1);
  rgb(61bp)=(0,0,1);
  rgb(68bp)=(1,0,1);
  rgb(75bp)=(.5,0,.5);
  rgb(100bp)=(.5,0,.5)}
\pgfdeclarehorizontalshading{rainbow steps}{100bp}{%
  rgb(0bp)=(1,0,0);
  rgb(32.1bp)=(1,0,0);
  rgb(32.1bp)=(1,.5,0);
  rgb(39.2bp)=(1,.5,0);
  rgb(39.2bp)=(1,1,0);
  rgb(46.4bp)=(1,1,0);
  rgb(46.4bp)=(0,1,0);
  rgb(53.5bp)=(0,1,0);
  rgb(53.5bp)=(0,1,1);
  rgb(60.7bp)=(0,1,1);
  rgb(60.7bp)=(0,0,1);
  rgb(67.9bp)=(0,0,1);
  rgb(67.9bp)=(.75,0,.75);
  rgb(100bp)=(.75,0,.75)}
\foreach \i in {A,B,...,Z}
{%
  \begin{tikzfadingfrompicture}[name=my \i]
    \node [text=transparent!0, inner sep=0pt, transform shape] {\fontfamily{Roboto-TLF}\fontsize{60pt}{60pt}\bfseries\selectfont \i};
  \end{tikzfadingfrompicture}%
}
\NewDocumentCommand \rainbowletter { s D() {1} O {} m }{%
  \IfBooleanTF{#1}{\def\tempa{rainbow steps}}{\def\tempa{rainbow}}%
  \tikz{%
    \path [#3, postaction={shading=\tempa, path fading=my #4, fit fading=true}] (0,0) rectangle (#2,#2);
  }%
}
\begin{document}
\rainbowletter(.75)[inner color=white, outer color=black, shading angle=-90]{Y}
\rainbowletter*(1){A}
\rainbowletter[top color=black, bottom color=black, middle color=white, shading angle=90,]{X}
\begin{tikzpicture}
  \shade [shading=rainbow] (1,-1) rectangle (8,-2);
  \shade [shading=rainbow steps] (1,-1) rectangle (8,0);
  \shade [shading=rainbow, shading angle=90] (1,0) rectangle (3,2);
  \shade [shading=rainbow steps, shading angle=90] (6,0) rectangle (8,2);
  \shade [shading=rainbow, shading angle=-90] (3,1) rectangle (6,2);
  \shade [shading=rainbow, shading angle=90, path fading=my Y, fit fading=true] (4.5,.25) rectangle (5,.75);
  \shade [shading=rainbow steps, shading angle=-90, path fading=my X, fit fading=true] (4,.25) rectangle (4.5,.75);
\end{tikzpicture}
\end{document}

相关内容