TikZ:带有多个 \draw 命令的图片代码无法按预期进行编译

TikZ:带有多个 \draw 命令的图片代码无法按预期进行编译

对于以下代码,

\documentclass[border=2pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix,positioning,calc}
\usetikzlibrary{decorations.pathmorphing,arrows.meta,backgrounds,hobby}
\tikzset{>={Latex[width=2mm,length=2mm]},
Nozzle/.pic={
    \draw[fill=yellow]
    (0,0)
    -- ++(0.4,0) coordinate(-a)
    -- ++(1,-2) coordinate(-b)
    -- ++(0,-0.2) coordinate(-c)
    -- ++(-0.2,0) coordinate(-d)
    -- ++(0,-0.2) coordinate(-e)
    -- ++(-0.2,0)
    -- ++(0,0.4)
    -- cycle ;

    \draw[fill=brown] (#1-c)
    -- (#1-d)
    -- (#1-e)
    -- ++(0.4,-0.1)
    -- ++(0,0.1)
    -- cycle;

}}

\begin{document}
    \begin{tikzpicture}

    \pic (left) at (0,0) {Nozzle};
    \pic[xscale=-1] (right) at (4,0) {Nozzle};

    \end{tikzpicture}
\end{document}

输出是

在此处输入图片描述

而期望的输出应该是

在此处输入图片描述

答案1

里面正确的坐标名称pic-c,,-d...而不是#1-c,...如果您使用它们并且不让cycle关闭路径,那么您的代码对我有用。

注意:由于系统中的编译错误,我删除了hobby包。无论如何,对于本示例来说,这不是必需的。

\documentclass[border=2pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix,positioning,calc}
\usetikzlibrary{decorations.pathmorphing,arrows.meta,backgrounds}
\tikzset{
    >={Latex[width=2mm,length=2mm]},
    Nozzle/.pic={
        \draw[fill=yellow]
        (0,0)
    -- ++(0.4,0) coordinate(-a)
    -- ++(1,-2) coordinate(-b)
    -- ++(0,-0.2) coordinate(-c)
    -- ++(-0.2,0) coordinate(-d)
    -- ++(0,-0.2) coordinate(-e)
    -- ++(-0.2,0) coordinate(-f)
    -- ++(0,0.4)
    -- cycle;
    \draw[fill=brown] (-c)
        -| (-e)-- ++(0.4,-0.1) -- ++(0,0.1) --(-c);
}
}

\begin{document}
    \begin{tikzpicture}
    \pic (left) at (0,0) {Nozzle};
    \pic[xscale=-1] (right) at (4,0) {Nozzle};
    \end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

这是一个解决方案这个答案。您必须在代码中更改以下内容:

  • 将该选项添加name prefix ..到第二个绘图命令。

  • 您必须#1通过在图片名称后添加参数来为该参数提供一个值:Nozzle=leftNozzle=right

\documentclass[border=2pt]{standalone}
\usepackage{tikz}
\tikzset{
Nozzle/.pic={
    \draw[fill=yellow]
    (0,0)
    -- ++(0.4,0) coordinate(-a)
    -- ++(1,-2) coordinate(-b)
    -- ++(0,-0.2) coordinate(-c)
    -- ++(-0.2,0) coordinate(-d)
    -- ++(0,-0.2) coordinate(-e)
    -- ++(-0.2,0)
    -- ++(0,0.4)
    -- cycle ;

    \draw[fill=brown,name prefix ..] (#1-c) % <<<<<<<<<<<<<<<<<<<<
    -- (#1-d)
    -- (#1-e)
    -- ++(0.4,-0.1)
    -- ++(0,0.1)
    -- cycle;

}}

\begin{document}
    \begin{tikzpicture}

    \pic (left) at (0,0) {Nozzle=left}; % <<<<<<<<<<<<<<<<
    \pic[xscale=-1] (right) at (4,0) {Nozzle=right}; % <<<<<<<<<<<<<<<<

    \end{tikzpicture}
\end{document}

相关内容