Tikz 着色:了解颜色放置的位置

Tikz 着色:了解颜色放置的位置

这是另一个问题的后续问题我在这里问。我觉得另一个问题仍然需要一个正确的答案,希望这个当前更具体的问题将有助于实现这一点。一般目的是充分了解如何指定阴影中的颜色位置以产生所需的结果。虽然很多时候示例很容易使用具有对称图案的阴影,但当我尝试实际控制哪些区域开始和结束某些颜色时,我无法理解这是如何工作的。

下面是一个具体的例子,其中有一个 10 厘米长的条(1 厘米的单位绘制在其正下方),我预期 3 个阴影区域位于中心,但事实并非如此:

Overleaf 上的 MWE

代码:

\documentclass[12pt]{article}
\usepackage{tikz}
\usepackage{calc}
\begin{document}
\pgfdeclarehorizontalshading{grad3}{2cm}{
    color(0cm)=(white);
    color(0.28cm)=(white);color(0.29cm)=(black);color(0.31cm)=(black);color(0.32cm)=(white);
    color(0.48cm)=(white);color(0.49cm)=(black);color(0.51cm)=(black);color(0.52cm)=(white);
    color(0.68cm)=(white);color(0.69cm)=(black);color(0.71cm)=(black);color(0.72cm)=(white);
    color(1cm)=(white)
}
    \begin{tikzpicture}
    \fill[shading=grad3,shading angle=0] (current page.north west) ++ (2cm,-6cm) rectangle ++ (10cm,-2cm);
    \foreach \i in {0,...,10}
        \draw[draw=black] (current page.north west) ++ (2cm+\i cm,-8cm) rectangle ++( 0cm,-1cm);
    \end{tikzpicture}
\end{document}

Overleaf 截图: Overleaf 的 LaTeX 输出截图

PGF/TIKZ 手册确实指定了阴影如何被剪裁(第 114.3 节,第 1199-1201 页),我认为在输入区域的开始和结束时需要考虑这些信息。但这不是当前的问题,因为即使只包括中央区域(在 49%-51% 部分),该区域也不是居中的……为什么?

此外,这三个区域应该占据 4% 的空间(例如从 0.48 厘米到 0.52 厘米),由于阴影裁剪只留下 50% 可见(在我的情况下,没有旋转),因此可能翻倍到 8%。但在这里,可以清楚地看到每个区域占据了超过 1 厘米的缺口,即超过 10%。

注意:如果尝试回答这个问题,请尝试不对称放置,例如 30%-70%,以确保配方有效。


[编辑1] 正如 Rmano 在评论中指出的那样,不同的查看器会产生不同的输出。上面的截图来自 Overleaf;下面是我在计算机上使用 TeXstudio 获得的截图。来自 TeXstudio 的截图: TeXstudio 的 LaTeX 输出的屏幕截图

如您所见,虽然现在每个带的宽度看起来差不多正确,但居中问题仍然存在。

答案1

和你的另一个问题一样。如果你坚持使用 100bp 阴影并且不使用 move-to 操作来扩大路径,那么你可能会得到想要的结果。但请注意,可能会出现舍入误差...

\documentclass[12pt]{article}
\usepackage{tikz}
\usepackage{calc}
\begin{document}
\pgfdeclarehorizontalshading{grad3}{100bp}{
    color(0bp)=(white);
    color(28bp)=(white);color(29bp)=(black);color(31bp)=(black);color(32bp)=(white);
    color(48bp)=(white);color(49bp)=(black);color(51bp)=(black);color(52bp)=(white);
    color(68bp)=(white);color(69bp)=(black);color(71bp)=(black);color(72bp)=(white);
    color(100bp)=(white)
}
    \begin{tikzpicture}
    \fill[shading=grad3,shading angle=0] ([xshift=2cm,yshift=-6cm]current page.north west) rectangle ++ (10cm,-2cm);
    \foreach \i in {0,...,10}
        \draw[draw=black] (current page.north west) ++ (2cm+\i cm,-8cm) rectangle ++( 0cm,-1cm);
    \end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容