使用 Tikz 填充适合背景的文本颜色

使用 Tikz 填充适合背景的文本颜色

我想用适合图形背景的颜色填充阴影矩形中的文本背景以覆盖虚线箭头。

在此处输入图片描述

我想我应该使用fill背景渐变色选项,但如何选择正确的值?是否有用透明色填充的选项?

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows}

\begin{document}
    \begin{tikzpicture} 

    \shade[bottom color=gray!10, top color=gray!80] (0,0) --++ (5,0) --++ (0,4) --++ (-5,0) -- cycle;
    \draw (0,0) --++ (5,0) --++ (0,4) --++ (-5,0) -- cycle;

    \foreach \y [count =\c] in {0.5,1.5,2.5,3.5}{
        \draw [-open triangle 60 reversed,thick](5,\y) --++ (1,0) --++ (0,0.5) node[below right]{$s_\c(\theta_0, t)$};
        \draw [dashed] (5,\y) -- (0,2) node[midway, sloped] {$h_\c(t)$};
    }

    \foreach \y/\couleur [count = \c] in {0.5/red,1.5/purple,2.5/violet,3.5/blue}{
        \pgfmathsetseed{\y+11}
        \draw[\couleur] plot[domain=0:1.5, samples = 500] (\x-5,{rand*0.5*sin(\x*2000)*exp(-3.5*(-\x+1.5))+\y});
        \draw (-6,\y) node {$h_{\c}^*(-t)$};
        \draw [->, shorten >=1cm](-3,\y) -- (0,2);
    }

    \draw (-0.5,2) circle (0.4) node {\Large $\Sigma$};

    \end{tikzpicture}
\end{document}

答案1

另一种方法是

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows}

\begin{document}
    \begin{tikzpicture} 

    \shadedraw [bottom color=gray!10, top color=gray!80]
               (0,0) --++ (5,0) --++ (0,4) --++ (-5,0) -- cycle;

    \foreach \y [count =\c] in {0.5,1.5,2.5,3.5}{
        \path (0,2) -- (5,\y) node[midway, sloped] (tmp) {$h_\c(t)$};
        \draw [dashed]  (0,2) --(tmp.west) (tmp.east) -- (5,\y);
}


    \end{tikzpicture}
\end{document}

备注:使用\shaddraw可避免矩形坐标重复。然后放置节点,然后绘制虚线。

在此处输入图片描述

答案2

我的解决方案:

  • 按照你曾经做过的那样去做。
  • 剪裁文本节点的矩形路径。
  • 使用相同的阴影再次填充剪切区域。
  • 再次创建带有文本节点的路径,但不要绘制它们。

因为重复,我把阴影和带有文本节点的路径放入宏中。

由于节点部分重叠,您必须在文本上方创建一个新层。否则,重复的阴影会覆盖文本的某些部分。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows}
\pgfdeclarelayer{text}
\pgfsetlayers{main,text}
\newcommand{\shadingmacro}{%
\shade[bottom color=gray!10, top color=gray!80] (0,0) --++ (5,0) --++ (0,4) --++ (-5,0) -- cycle;
}
\newcommand{\pathmacro}[1]{%
\path [dashed,#1] (5,\y) -- (0,2) node(nod\c)[midway,sloped] {$h_\c(t)$};
}
\begin{document}
    \begin{tikzpicture} 

    \shadingmacro
    \draw (0,0) --++ (5,0) --++ (0,4) --++ (-5,0) -- cycle;

    \foreach \y [count =\c] in {0.5,1.5,2.5,3.5}{
        \draw [-open triangle 60 reversed,thick](5,\y) --++ (1,0) --++ (0,0.5) node[below right]{$s_\c(\theta_0, t)$};
        \pathmacro{draw}
    }

    \foreach \y/\couleur [count = \c] in {0.5/red,1.5/purple,2.5/violet,3.5/blue}{
        \pgfmathsetseed{\y+11}
        \draw[\couleur] plot[domain=0:1.5, samples = 500] (\x-5,{rand*0.5*sin(\x*2000)*exp(-3.5*(-\x+1.5))+\y});
        \draw (-6,\y) node {$h_{\c}^*(-t)$};
        \draw [->, shorten >=1cm](-3,\y) -- (0,2);
    }

    \draw (-0.5,2) circle (0.4) node {\Large $\Sigma$};
\foreach \y [count =\c] in {0.5,1.5,2.5,3.5}
{
 \begin{scope}
 \clip(nod\c.south west)--(nod\c.north west)--(nod\c.north east)--(nod\c.south east)--cycle;
 \shadingmacro
 \end{scope}
 \begin{pgfonlayer}{text}
 \pathmacro{}
 \end{pgfonlayer}
}

    \end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

您还可以使用连接节点装饰来中断路径并避免对节点进行任何绘制。 定义inner xsep节点文本周围的间距应该有多紧。 其余部分基本相同。

\documentclass[tikz]{standalone}
\usetikzlibrary{arrows,decorations.markings}

\begin{document}

    \begin{tikzpicture}[mydeco/.style = {
                                   decoration={markings,
                                               mark connection node=my node,
                                               mark=at position .5 with
                                               {\node [sloped,inner xsep=2pt] (my node) {#1};}
                                               },
                                   decorate
                                        }
                       ] 
    \shade[bottom color=gray!10, top color=gray!80] (0,0) --++ (5,0) --++ (0,4) --++ (-5,0) -- cycle;
    \draw (0,0) --++ (5,0) --++ (0,4) --++ (-5,0) -- cycle;

    \foreach \y [count =\c] in {0.5,1.5,2.5,3.5}{
        \draw [-open triangle 60 reversed,thick](5,\y) --++ (1,0) --++ (0,0.5) node[below right]{$s_\c(\theta_0, t)$};
        \draw [dashed,mydeco=$h_\c(t)$] (0,2) -- (5,\y);
    }

    \foreach \y/\couleur [count = \c] in {0.5/red,1.5/purple,2.5/violet,3.5/blue}{
        \pgfmathsetseed{\y+11}
        \draw[\couleur] plot[domain=0:1.5, samples = 500] (\x-5,{rand*0.5*sin(\x*2000)*exp(-3.5*(-\x+1.5))+\y});
        \draw (-6,\y) node {$h_{\c}^*(-t)$};
        \draw [->, shorten >=1cm](-3,\y) -- (0,2);
    }
    \draw (-0.5,2) circle (0.4) node {\Large $\Sigma$};

    \end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容