调整节点中阴影的大小

调整节点中阴影的大小

我根据以下内容定义了阴影:

\pgfdeclarehorizontalshading{spindiff}{0.5 cm}
    {color(0 cm)=(gray); color(3 cm)=(black); color(7 cm)=(gray)}
\pgfuseshading{spindiff}

现在我想多次使用相同的阴影并更改阴影的高度。我尝试将其包裹在 中\newcommand,但这不起作用。请参阅下面的 MWE。我如何定义一次阴影并多次使用它从而改变高度。

平均能量损失

\documentclass{standalone}
\usepackage{tikz}
\newcommand\shading[1]{
    \pgfdeclarehorizontalshading{spindiff}
    {#1}{color(0 cm)=(gray); color(3 cm)=(black); color(7 cm)=(gray)}
    \pgfuseshading{spindiff}
    }
\begin{document}
    \begin{tikzpicture}
        \shading{0.5 cm}
        \node (channelside) {\pgfuseshading{spindiff}}; 
        \shading{2 cm}
        \node[yshift=-3 cm] (channelside) {\pgfuseshading{spindiff}};
    \end{tikzpicture}
\end{document}

结果

顶部应该比底部小 4 倍,但事实并非如此。

在此处输入图片描述

答案1

让阴影自动缩放的诀窍实际上只是一个仔细思考 Ti 中细节的问题Z 手册。要记住的是,通常只会显示阴影的中心部分。

为了正确缩放,我们要声明一个100bp x 100bp阴影,并假设只显示从(25bp,25bp)到的部分(75bp,75bp)。(有时,会显示更多或更少,但我们不会旋转或做任何事情,因此我们可以忽略这些复杂性。)

然后你就可以说出节点应该有多大,并让 TiZ 轴适当缩放阴影。

例如:

\pgfdeclarehorizontalshading{spindif}{100bp}{color(0bp)=(gray); color(25bp)=(gray); color(46bp)=(black); color(75bp)=(gray); color(100bp)=(gray)}

0bp请注意,从到 的部分25bp不会显示出来,因此我们把它弄得简单些,对于从到 的gray部分也是如此。大约是和之间距离的 3/7,也就是 阴影可见部分的 3/7。75bp100bp46bp25bp75bp

为了方便起见,我们可以为节点定义一种样式,将宽度设置为70mm,根据参数调整高度,并用阴影填充节点。

\tikzset{%
  spin diff/.style={minimum height=#1, minimum width=70mm, shading=spindif},
}

然后我们可以写,例如,

\begin{tikzpicture}
  \node (channelside 1) [spin diff=5mm] {};
  \node (channelside 2) [spin diff=20mm, yshift=-30mm] {};
\end{tikzpicture}

生产

缩放阴影

完整代码:

\documentclass[border=10pt,tikz]{standalone}
\pgfdeclarehorizontalshading{spindif}{100bp}{color(0bp)=(gray); color(25bp)=(gray); color(46bp)=(black); color(75bp)=(gray); color(100bp)=(gray)}
\tikzset{%
  spin diff/.style={minimum height=#1, minimum width=70mm, shading=spindif},
}
\begin{document}
\begin{tikzpicture}
  \node (channelside 1) [spin diff=5mm] {};
  \node (channelside 2) [spin diff=20mm, yshift=-30mm] {};
\end{tikzpicture}
\end{document}

答案2

事实证明这很简单:\pgfuseshading{spindiff}里面的东西\newcommand把事情搞砸了。

平均能量损失

\documentclass{standalone}
\usepackage{tikz}
\newcommand\shading[1]{
        \pgfdeclarehorizontalshading{spindiff}{#1}
            {color(0 cm)=(gray); color(3 cm)=(black); color(7 cm)=(gray)
        }
    }
\begin{document}
    \begin{tikzpicture}
        \shading{0.5 cm}
        \node (channelside) {\pgfuseshading{spindiff}}; 
        \shading{2 cm}
        \node[yshift=-3 cm] (channelside) {\pgfuseshading{spindiff}};
    \end{tikzpicture}
\end{document}

结果

在此处输入图片描述

相关内容