我根据以下内容定义了阴影:
\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)
。(有时,会显示更多或更少,但我们不会旋转或做任何事情,因此我们可以忽略这些复杂性。)
然后你就可以说出节点应该有多大,并让 Ti钾Z 轴适当缩放阴影。
例如:
\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。75bp
100bp
46bp
25bp
75bp
为了方便起见,我们可以为节点定义一种样式,将宽度设置为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}