我正在组装几个矩形来制作特殊的阴影。
这是我的代码:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{fadings}
\begin{document}
\begin{tikzpicture}
\coordinate(A) at (1.5,4);
\coordinate(I) at (1.6,4);
\coordinate(J) at (2,4);
\coordinate(K) at (2.45,4);
\foreach \x in {0}
\fill ([shift=(A)]6*\x,0) rectangle +(1,-0.3);
\foreach \x in {0}
\tikzfading[name=F1, left color=transparent!60, right color=transparent!5]
\fill [white, path fading=F1] ([shift=(A)]6*\x,0) rectangle +(0.1,-0.3);
\foreach \x in {0}
\tikzfading[name=F2, left color=transparent!5, right color=transparent!5]
\fill [white, path fading=F2] ([shift=(I)]6*\x,0) rectangle +(0.4,-0.3);
\foreach \x in {0}
\tikzfading[name=F3, left color=transparent!5, right color=transparent!70]
\fill [white, path fading=F3] ([shift=(J)]6*\x,0) rectangle +(0.45,-0.3);
\foreach \x in {0}
\tikzfading[name=F4, left color=transparent!70, right color=transparent!100]
\fill [white, path fading=F4] ([shift=(K)]6*\x,0) rectangle +(0.05,-0.3);
\foreach \x in {0}
\draw [thick] ([shift=(A)]6*\x,0) rectangle +(1,-0.3);
\end{tikzpicture}
\end{document}
问题在于矩形之间存在不连续性,如下图所示(参见红色箭头)。我该如何解决这个问题?
我尝试了非常小的重叠,但要么是不够,有时我仍然可以看到间隙(取决于放大倍数),要么我可以看到重叠并且看起来很丑陋......
答案1
我认为,正确的方法是定义一个自定义阴影,它可以用来直接为矩形添加阴影或创建淡入淡出效果。
但是,我不确定以下示例是否是定义自定义阴影的正确方法。我以前只创建过自定义径向阴影,它们总是让我感到困惑!
买者自负!
请注意,当使用阴影填充矩形时,仅显示阴影的中心四分之一,而正常使用的阴影应为100x100 bp
。因此,自定义阴影实际上从 开始25 bp
,到 结束75 bp
。我为两个极端使用了合理的颜色(在某些旋转等情况下可能会显示),但如果需要考虑,则可能需要进行调整。
\documentclass[border=10pt,multi,tikz]{standalone}
\usetikzlibrary{fadings}
\pgfdeclarehorizontalshading[f0col,f1col,f2col,f3col,f4col,f5col]{special shading}{100bp}{%
color(0bp)=(f0col);
color(25bp)=(f1col);
color(30bp)=(f2col);
color(50bp)=(f3col);
color(72bp)=(f4col);
color(75bp)=(f5col);
color(100bp)=(f5col)
}
\tikzset{%
special colour 0/.code={%
\colorlet{f0col}{#1}%
},
special colour 1/.code={%
\colorlet{f1col}{#1}%
},
special colour 2/.code={%
\colorlet{f2col}{#1}%
},
special colour 3/.code={%
\colorlet{f3col}{#1}%
},
special colour 4/.code={%
\colorlet{f4col}{#1}%
},
special colour 5/.code={%
\colorlet{f5col}{#1}%
},
special colours/.style args={#1,#2,#3,#4,#5,#6}{%
special colour 0=#1,
special colour 1=#2,
special colour 2=#3,
special colour 3=#4,
special colour 4=#5,
special colour 5=#6,
},
special colours={black!0,black!60,black!5,black!5,black!70,black!100},
special shading/.style={%
shading=special shading,
},
}
\tikzfading[name=special fading, special shading, special colours={transparent!0,transparent!60,transparent!5,transparent!5,transparent!70,transparent!100}]
\begin{document}
\begin{tikzpicture}
\fill \foreach \i in {-.3,.3,...,1.6} {(0,\i) rectangle +(1,.3)};
\path [special shading] (0,0) rectangle (1,-.3);
\path [special shading, special colour 2=red] (0,.3) rectangle +(1,.3);
\path [special shading, special colours={red,orange,yellow,green,blue,purple,violet}] (0,.9) rectangle +(1,.3);
\fill [path fading=special fading, white] (0,1.5) rectangle +(1,.3);
\draw [thick] \foreach \i in {-.3,.3,...,1.6} {(0,\i) rectangle +(1,.3)};
\end{tikzpicture}
\end{document}
这是结果。顶部矩形使用阴影来创建淡入淡出效果,使白色淡入淡出覆盖黑色,就像问题中那样。底部阴影直接填充矩形。中间的两个阴影说明了可以自定义一种或多种或所有颜色的方式。(transparent
当然,在创建淡入淡出效果时,这也与颜色一起使用。)
我无法分辨出这与 OP 生成的结果之间的区别,因为即使放大到最大 1,600%,我也看不到原始缺陷。但是,由于这使用封闭路径进行填充,我认为它应该完全避免这个问题。