tikz 如何引用 newcommand 创建的图片或形状并添加锚点

问题描述 投票:0回答:1

我有两种不同的方法来创建缩放图像以在更大的图表中使用。我不知道如何命名对象并向其添加锚点。我是否必须以某种方式将它们放入命名节点中?或者 .pics 已经有了锚点,但是图片的名称是什么?

\documentclass{article}
\usepackage{amssymb} %maths
\usepackage{amsmath} %maths

\usepackage{adjustbox}
\usepackage[svgnames]{xcolor}
\usepackage{pgfplots}

\newcommand{\mazeN}[4]{%scale, x origin, y origin, line width
    \scalebox{1}{%
    \path (#2,#3) coordinate (O);
    \begin{scope}[line width=#4, cap=round, rounded corners=1pt,color=blue!50!black,scale=#1]
        \draw[] (O)  -| ++(9.0,1.0) +(-2.0,0) -| ++(0.0,3.0) +(0.0,5.0) |- ++(-2.0,0.0) |- ++(1.0,1.0) -- ++(0.0,1.0);
        \draw[] (O) ++(1.0,1.0) -| ++(-1.0,2.0) -| +(1.0,2.0) ++(0,0) |- ++(7.0,6.0) +(0.0,-1.0) |- ++(1.0,0.0) |- ++(-2.0,-2.0) -- ++(0.0,1.0);
        \draw[] (O) ++(1.0,6.0) |- ++(1.0,2.0)  +(0.0,1.0)  |- ++(3.0,0.0) -- ++(0.0,-3.0) coordinate (J1)  |- ++(-1.0,-1.0)  |- ++(-1.0,-1.0) |- ++(1.0,-1.0) (J1) -- ++(1.0,0) |- +(1.0,1.0) ++(0,0) -- ++(0.0,-2.0) ++(-1.0,0) -| ++(3.0,-1.0) -- ++(-3.0,0.0);
        \draw[] (O) ++(2.0,5.0) |- ++(2.0,2.0) |- ++(-1.0,-2.0) -- +(0.0,1.0) |- ++(-1.0,-1.0) |- ++(-1.0,-2.0) -| ++(1.0,-1.0) -| ++(2.0,-1.0) |- ++(2.0,1.0);

    % Start and End Points
    \draw[-latex,line width=#4/2,red] (O) ++(0.0,0.5) -- ++(1.0,0);
    \draw[-latex,line width=#4/2,red] (O) ++(8.5,8.0) -- ++(0.0,1.0);   
    \end{scope}
    }
}
    
\tikzset{
    maze/.pic={
    \begin{scope}[line width=2pt, cap=round, rounded corners=1pt,color=blue!50!black,]
        \path (0,0) coordinate (O);
        \draw[] (O)  -| ++(9.0,1.0) +(-2.0,0) -| ++(0.0,3.0) +(0.0,5.0) |- ++(-2.0,0.0) |- ++(1.0,1.0) -- ++(0.0,1.0);
        \draw[] (O) ++(1.0,1.0) -| ++(-1.0,2.0) -| +(1.0,2.0) ++(0,0) |- ++(7.0,6.0) +(0.0,-1.0) |- ++(1.0,0.0) |- ++(-2.0,-2.0) -- ++(0.0,1.0);
        \draw[] (O) ++(1.0,6.0) |- ++(1.0,2.0)  +(0.0,1.0)  |- ++(3.0,0.0) -- ++(0.0,-3.0) coordinate (J1)  |- ++(-1.0,-1.0)  |- ++(-1.0,-1.0) |- ++(1.0,-1.0) (J1) -- ++(1.0,0) |- +(1.0,1.0) ++(0,0) -- ++(0.0,-2.0) ++(-1.0,0) -| ++(3.0,-1.0) -- ++(-3.0,0.0);
        \draw[] (O) ++(2.0,5.0) |- ++(2.0,2.0) |- ++(-1.0,-2.0) -- +(0.0,1.0) |- ++(-1.0,-1.0) |- ++(-1.0,-2.0) -| ++(1.0,-1.0) -| ++(2.0,-1.0) |- ++(2.0,1.0);
    \end{scope}

    % Start and End Points
    \draw[-latex,line width=1pt,red]  (0,0) ++(0.0,0.5) -- ++(1.0,0);
    \draw[-latex,line width=1pt,red] (0,0) ++(8.5,8.0) -- ++(0.0,1.0);  
    }
}
    
\begin{document}

    \begin{tikzpicture}
        \draw[help lines] (0,0) grid (8,8);
        
        \mazeN{0.25}{1}{2}{2pt};
        \node[align=left] at (2.75,1.25) {newcommand example};
        
        \draw (1,5) pic[scale=0.25] {maze};
        \node[align=left] at (2.25,4.75) {pic example};
    \end{tikzpicture}
\end{document}

enter image description here

latex tikz
1个回答
0
投票

您可以在图片中定义坐标,稍后您可以使用名称前缀引用该坐标:

\documentclass{article}
\usepackage{amssymb} %maths
\usepackage{amsmath} %maths

\usepackage{adjustbox}
\usepackage[svgnames]{xcolor}
\usepackage{pgfplots}
    
\tikzset{
    maze/.pic={
    \begin{scope}[line width=2pt, cap=round, rounded corners=1pt,color=blue!50!black,]
        \path (0,0) coordinate (O);
        \draw[] (O)  -| ++(9.0,1.0) +(-2.0,0) -| ++(0.0,3.0) +(0.0,5.0) |- ++(-2.0,0.0) |- ++(1.0,1.0) -- ++(0.0,1.0);
        \draw[] (O) ++(1.0,1.0) -| ++(-1.0,2.0) -| +(1.0,2.0) ++(0,0) |- ++(7.0,6.0) +(0.0,-1.0) |- ++(1.0,0.0) |- ++(-2.0,-2.0) -- ++(0.0,1.0);
        \draw[] (O) ++(1.0,6.0) |- ++(1.0,2.0)  +(0.0,1.0)  |- ++(3.0,0.0) -- ++(0.0,-3.0) coordinate (J1)  |- ++(-1.0,-1.0)  |- ++(-1.0,-1.0) |- ++(1.0,-1.0) (J1) -- ++(1.0,0) |- +(1.0,1.0) ++(0,0) -- ++(0.0,-2.0) ++(-1.0,0) -| ++(3.0,-1.0) -- ++(-3.0,0.0);
        \draw[] (O) ++(2.0,5.0) |- ++(2.0,2.0) |- ++(-1.0,-2.0) -- +(0.0,1.0) |- ++(-1.0,-1.0) |- ++(-1.0,-2.0) -| ++(1.0,-1.0) -| ++(2.0,-1.0) |- ++(2.0,1.0);
    \end{scope}

    % Start and End Points
    \draw[-latex,line width=1pt,red]  (0,0) ++(0.0,0.5) -- ++(1.0,0);
    \draw[-latex,line width=1pt,red] (0,0) ++(8.5,8.0) -- ++(0.0,1.0);  
    
    \coordinate (-foo) at (4.5,0);
    }
    
    
}
    
\begin{document}

    \begin{tikzpicture}
        \draw[help lines] (0,0) grid (8,8);       
        \pic[scale=0.25] (Alexandra) at (1,5) {maze};        
        \node[anchor=north] at (Alexandra-foo) {pic example};
    \end{tikzpicture}
\end{document}
© www.soinside.com 2019 - 2024. All rights reserved.