对于以下代码,
\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=left
和Nozzle=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}