
정의 내 경로의 이름 지정 동작을 이해하려고 노력 중입니다 pic
. 다음을 고려하세요
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{intersections}
\tikzset{%
path1/.pic={%
\coordinate (-p) at (-0.5,-0.5);
\draw[red, name path=-horz-fails] (-1,0.5) to (1,0.5);
\draw[black, name path=-vert] (0,-1) to (0,1);
};
}
\tikzset{%
path2/.pic={%
\draw[blue, name path=-horz] (-1,0) to (1,0);
};
}
\begin{document}
\begin{tikzpicture}
\pic [name=p1] at (0, 0) {path1};
\pic (p2) at (0, 0) {path2};
\draw [name intersections={of=-vert and -horz}]
(intersection-1) circle (2pt) to (p1-p);
%\draw [name intersections={of=-vert and -horz-fails}]
% (intersection-1) circle (2pt);
\end{tikzpicture}
\end{document}
이 예에서는 네 개의 선이 모두 올바르게 그려졌습니다. 또한 주석 처리되지 않은 교차점이 올바르게 그려집니다. 그러나 두 번째 교차점의 주석 처리를 제거하면 컴파일러 오류가 발생합니다.
! Package tikz Error: I do not know the path named `-horz-works'. Perhaps you
misspelt it.
검색해본 결과이 질문그리고 관련된버그 보고서답변에서. 해당 답변과 마찬가지로 에 명명된 마지막 경로는 pic
정의 외부에서 사용할 수 있습니다. 이것이 관련이 있을 수 있다고 생각했지만 저장소를 복제하고 수정 사항으로 컴파일을 시도했지만 여전히 동일한 결과를 얻습니다. 를 사용해 보았지만 name path ..
메인 사진 환경에서는 경로를 사용할 수 없게 되었습니다.
내 질문은: 이것이 동일한 버그의 징후입니까? 그렇지 않은 경우 정의 내부의 경로에 대한 명명 규칙은 무엇입니까 pic
?
좌표( -p
여기) 는 예상한 대로 pic
범위 외부의 이름을 상속하며 pic
동일한 방식으로 경로를 참조하고 싶습니다.
동기 부여
나의 궁극적인 목표는 생성된 pic
. 구를 따라 위도와 경도의 선을 생성하는 Python 코드가 있습니다. pic
단일 사진 내에서 여러 번 사용하고 싶습니다 . 따라서 pic
내가 보여주려는 내용을 더 발전시킬 교차점만 계산하기 위해 상위 이름이 있는 경로를 참조하고 싶습니다 . 경로를 계산하고 있으므로 교차점의 좌표를 정의할 수 있지만 TikZ가 작업을 수행하도록 하고 싶습니다. 이는 나에게 과잉처럼 보입니다.
답변1
name path global
스코프나 사진과 같은 환경 외부의 "브로드캐스트" 경로를 위해 만들어진 를 사용하세요 .
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{intersections}
\tikzset{%
path1/.pic={%
\coordinate (-p) at (-0.5,-0.5);
\draw[red, name path global=-horz-fails] (-1,0.5) to (1,0.5);
\draw[black, name path global=-vert] (0,-1) to (0,1);
};
}
\tikzset{%
path2/.pic={%
\draw[blue, name path global=-horz] (-1,0) to (1,0);
};
}
\begin{document}
\begin{tikzpicture}
\pic [name=p1] at (0, 0) {path1};
\pic (p2) at (0, 0) {path2};
\draw [name intersections={of=-vert and -horz}]
(intersection-1) circle (2pt) to (p1-p);
\draw [name intersections={of=-vert and -horz-fails}]
(intersection-1) circle (2pt);
\end{tikzpicture}
\end{document}
고유한 이름을 갖고 싶다면 경로 이름 앞에 pic
.
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{intersections}
\makeatletter
\newcommand{\figname}[1]{\edef#1{\tikz@fig@name}}
\makeatother
\tikzset{%
path1/.pic={%
\figname{\myname}
\coordinate (-p) at (-0.5,-0.5);
\draw[red, name path global=\myname-horz-fails] (-1,0.5) to (1,0.5);
\draw[black, name path global=\myname-vert] (0,-1) to (0,1);
};
}
\tikzset{%
path2/.pic={%
\figname{\myname}
\draw[blue, name path global=\myname-horz] (-1,0) to (1,0);
};
}
\begin{document}
\begin{tikzpicture}
\pic (p1) at (0, 0) {path1};
\pic (p2) at (0, 0) {path2};
\draw [name intersections={of=p1-vert and p2-horz}]
(intersection-1) circle (2pt) to (p1-p);
\draw [name intersections={of=p1-vert and p1-horz-fails}]
(intersection-1) circle (2pt);
\end{tikzpicture}
\end{document}
(동일한 출력)
답변2
여기에서는 모든 경로를 단일 사진에 넣어서 빠르게 해킹할 수 있습니다.
이는 귀하의 질문에 대한 답변은 아니지만 더 이상 실수가 없도록 보장합니다.
\documentclass[tikz,border=5mm]{standalone}
%\usepackage{tikz}
\usetikzlibrary{intersections}
\tikzset{%
path1/.pic={%
\coordinate (-p) at (-0.5,-0.5);
\draw[red, name path=-horz-fails] (-1,0.5) to (1,0.5);
% \draw[black, name path=-vert] (0,-1) to (0,1);
},
path3/.pic={%
\coordinate (-p) at (-0.5,-0.5);
%\draw[red, name path=-horz-fails] (-1,0.5) to (1,0.5);
\draw[black, name path=-vert] (0,-1) to (0,1);
},
path2/.pic={%
\draw[blue, name path=-horz] (-1,0) to (1,0);
};
}
\begin{document}
\begin{tikzpicture}
\pic [name=p1] at (0, 0) {path1};
\pic (p2) at (0, 0) {path2};
\pic (p3) at (0,0) {path3};
\draw [name intersections={of=-vert and -horz}]
(intersection-1) circle (2pt) to (p1-p);
\draw [name intersections={of=-vert and -horz-fails}]
(intersection-1) circle (2pt);
\end{tikzpicture}
\end{document}