
오랜 독자이자 처음으로 포스터를 읽은 독자입니다. 이 문제에 대한 해결책을 찾을 수 없는 것 같아서 전문가의 조언을 따릅니다. 처음에는 TiKzpicture의 노드 내부에 TiKzpicture를 만들려고 시도했지만 내부 TiKzpicture 내의 노드 사이에 가장자리를 그리려고 할 때 다음 오류가 발생했습니다.
Undefined control sequence \path[->] (w0) edge[bend left=10] node[right] {$\R^{0}$} (v0);
(전체 오류가 무엇인지 알려주기 위해 TexStudio를 어떻게 속였는지에 관계없이 오류는 실제로 줄을 완전히 표시하지 않았으므로 문제가 되는 첫 번째 줄만 복사했습니다.)
이 글을 읽었습니다. (적절한 형식으로 링크를 게시할 만큼 평판이 좋지 않습니다. 윽!!tikzpicture 중첩을 피하는 방법은 무엇입니까?) 제안된 한 가지 해결책은 TiKzpicture를 포함하는 lrbox를 만든 다음 다음과 같이 문서의 서문에 선언된 명령을 사용하는 것이었습니다.
\newsavebox\helloworld
...
\node [label={below:Hello World}] (hw) {\usebox\helloworld};
이것은 실제로 위의 문제를 해결했으며 원하는 노드(예: (w0, v0)와 (w1, v1) 사이에 모서리가 성공적으로 그려졌습니다. 그러나 새로운 문제가 발생했습니다. 노드에서 모서리를 그리려고 합니다. lrbox에 포함된 TiKzpicture 내에서 "외부" TiKzpicture의 노드로 이동합니다. 제가 이해한 바에 따르면 lrbox의 내용은 외부 TiKzpicture의 내용보다 먼저 렌더링되지만 이에 접근하는 다른 방법은 잘 모르겠습니다.
가장자리를 추가하기 전의 모습과 가장자리를 추가한 후의 상황은 다음과 같습니다.
내 전체 코드는 다음과 같습니다.
\documentclass{article}
\usepackage{float, latexsym, tikz, amssymb, amsmath, amsthm, graphicx, caption}
\usetikzlibrary{shapes,arrows,positioning,fit,matrix,calc}
\newsavebox\disjUn
\newcommand{\R}{\mathcal{R}}
\newcommand{\F}{\mathfrak{F}}
\begin{document}
\tikzstyle{frame}=[draw,ellipse,minimum height=6cm,minimum width=2cm]
\tikzstyle{world} =[draw,circle,fill=black, inner sep=0pt, minimum size=3pt]
\begin{lrbox}{\disjUn}
\begin{tikzpicture}[node distance=3cm]
\node[frame] (F0){};
\node at ([xshift=-1em, yshift=-4em]F0.north) [world, label={70:$(w,0)$}] (w0){};
\node at ([yshift=3em]F0.south west) [world, label={-70:$(v,0)$}] (v0){};
\path[->] (w0) edge[bend left=10] node[right] {$\R^{0}$} (v0);
\node[frame, right of=F0] (F1){};
\node at ([xshift=-1em, yshift=-4em]F1.north) [world, label={70:$(w,1)$}] (w1){};
\node at ([yshift=3em]F1.south west) [world, label={-70:$(v,1)$}] (v1){};
\path[->] (w1) edge[bend left=10] node[right] {$\R^{1}$} (v1);
\end{tikzpicture}
\end{lrbox}
\begin{figure}[H]
\centering
\begin{tikzpicture}[remember picture, node distance=3cm, transform canvas={scale=0.9}]
\node[draw=white, label={below:$\F \oplus \F$}] (FF) {\usebox\disjUn};
\node[frame,right of=FF, xshift=3cm,label={below:$\F^{\prime}$}] (Fp){};
\node at ([yshift=-4em]Fp.north) [world, label={70:$\hat{w}$}] (w){};
\node at ([yshift=3em]Fp.south west) [world, label={-70:$\hat{v}$}] (v){};
\node at ([yshift=3em]Fp.north east) [world, label={70:$w^{\prime}$}] (wp){};
\path[->] (w) edge[bend left=10] node[right] {$\R^{\prime}$}(v);
\path[-] (wp.west) edge[bend right,draw=gray, dashed] node [below]{} (Fp.north);
\path[-] (wp.south east) edge[bend left,draw=gray, dashed] node [below]{} (Fp.north east);
\path[->] (w0) edge[bend right, dashed] node[above] {$g$}(w);
%\path[->] (w1) edge[bend right,dashed] node[above] {$g$}(wp);
\end{tikzpicture}
\end{figure}
\end{document}
타원 내에 세계를 멋지게 배치하고 이러한 구조 사이에 가장자리를 둘 수 있는 대체 솔루션이 있습니까? 미리 감사드립니다!
편집: 또한 두 개의 TiKzpictures의 구성 요소로 lrbox의 \disjUn TiKzpicture를 사용하고 있다는 점에 주목하고 싶습니다. 한 곳에서만 다이어그램을 편집할 수 있고 변경 사항이 두 다이어그램 모두에 반영된다는 점이 마음에 들었습니다! 그러나 이 환경 내에서 노드에 가장자리를 그리거나 노드에서 가장자리를 그릴 수 없다는 사실이 문제가 됩니다.
내 친구는 다양한 구조를 포함하기 위해 \begin{scope}[...] \end{scope} 사용을 권장했지만 여전히 코드 재사용 문제와 세계(검은 점)를 기준으로 위치를 지정하는 문제가 있습니다. 타원형... 읽어주셔서 다시 한번 감사드립니다! :)
EDIT2: AJN 덕분에 제가 원래
remember picture
잘못된 TiKz 그림의 인수입니다. 내부 TiKz 그림에 있어야 합니다. 나는 이것이 컴파일러가 부모 TiKz 그림에서 사용할 노드 이름을 기억하기를 원하기 때문이라고 생각합니다.
답변1
왜 별도의 상자가 필요한지 모르겠습니다.또는여기 pic
요. 어쨌든 로드 중이므로 이를 사용하여 두 개의 노드 와 를 fit
포함할 수 있습니다 .F0
F1
\node (FF) [fit=(F0) (F1), draw=white, label={below:$\F \oplus \F$}] {};
\tikzstyle
구문 과 마찬가지로 더 이상 사용되지 않습니다 <direction> of=
. 유사하게 업데이트된 대응 항목으로 대체되어야 합니다 arrows
.shapes
첫 번째는 다음으로 대체될 수 있습니다 \tikzset
.
\tikzset{% \tikzstyle is deprecated
frame/.style={draw,ellipse,minimum height=6cm,minimum width=2cm},
world/.style ={draw,circle,fill=black, inner sep=0pt, minimum size=3pt},
}
두 번째 경우에는 positioning
라이브러리의 구문이 선호되며 이미 로드 중이므로 간단히 사용할 수 있습니다. 예를 들어,
\node[frame,right=1cm of FF, xshift=3cm, label={below:$\F^{\prime}$}] (Fp){};
대신에 우리는 를 제공하는 것을 shapes
원합니다 . 의 업데이트된 버전이 있지만 사용하지 않으시므로 여기에 로드하지 않았습니다.shapes.geometric
ellipse
arrows
arrows.meta
\usetikzlibrary{shapes.geometric,positioning,fit}
\documentclass{article}
\usepackage{tikz,amssymb}
\usetikzlibrary{shapes.geometric,positioning,fit}
\newcommand{\R}{\mathcal{R}}
\newcommand{\F}{\mathfrak{F}}
\begin{document}
\tikzset{% \tikzstyle is deprecated
frame/.style={draw,ellipse,minimum height=6cm,minimum width=2cm},
world/.style ={draw,circle,fill=black, inner sep=0pt, minimum size=3pt},
}
\begin{tikzpicture}[node distance=3cm, transform canvas={scale=0.9}]
\node[frame] (F0){};
\node at ([xshift=-1em, yshift=-4em]F0.north) [world, label={70:$(w,0)$}] (w0){};
\node at ([yshift=3em]F0.south west) [world, label={-70:$(v,0)$}] (v0){};
\path[->] (w0) edge[bend left=10] node[right] {$\R^{0}$} (v0);
\node[frame, right=1cm of F0] (F1){};
\node at ([xshift=-1em, yshift=-4em]F1.north) [world, label={70:$(w,1)$}] (w1){};
\node at ([yshift=3em]F1.south west) [world, label={-70:$(v,1)$}] (v1){};
\path[->] (w1) edge[bend left=10] node[right] {$\R^{1}$} (v1);
\node (FF) [fit=(F0) (F1), draw=white, label={below:$\F \oplus \F$}] {};
\node[frame,right=1cm of FF, xshift=3cm, label={below:$\F^{\prime}$}] (Fp){};
\node at ([yshift=-4em]Fp.north) [world, label={70:$\hat{w}$}] (w){};
\node at ([yshift=3em]Fp.south west) [world, label={-70:$\hat{v}$}] (v){};
\node at ([yshift=3em]Fp.north east) [world, label={70:$w^{\prime}$}] (wp){};
\path[->] (w) edge[bend left=10] node[right] {$\R^{\prime}$}(v);
\path[-] (wp.west) edge[bend right,draw=gray, dashed] node [below]{} (Fp.north);
\path[-] (wp.south east) edge[bend left,draw=gray, dashed] node [below]{} (Fp.north east);
\path[->] (w0) edge[bend left=80, dashed] node[above] {$g$}(w);
\path[->] (w1) edge[bend left=60,dashed] node[above] {$g$}(wp);
\path[->] (v0) edge[bend left=8,dashed] node[pos=.6,above] {$g$}(v);
\path[->] (v1) edge[bend right=100,dashed] node[above] {$g$}(v);
\end{tikzpicture}
\end{document}
답변2
다음은 업데이트된 코드입니다. AJN의 응답에 감사드립니다! :)
\documentclass{article}
\usepackage{float, latexsym, tikz, amssymb, amsmath, amsthm, graphicx, caption}
\usetikzlibrary{shapes,arrows,positioning,fit,matrix,calc}
\newsavebox\disjUn
\newcommand{\R}{\mathcal{R}}
\newcommand{\F}{\mathfrak{F}}
\begin{document}
\tikzstyle{frame}=[draw,ellipse,minimum height=6cm,minimum width=2cm]
\tikzstyle{world} =[draw,circle,fill=black, inner sep=0pt, minimum size=3pt]
\begin{lrbox}{\disjUn}
\begin{tikzpicture}[remember picture, node distance=3cm]
\node[frame] (F0){};
\node at ([xshift=-1em, yshift=-4em]F0.north) [world, label={70:$(w,0)$}] (w0){};
\node at ([yshift=3em]F0.south west) [world, label={-70:$(v,0)$}] (v0){};
\path[->] (w0) edge[bend left=10] node[right] {$\R^{0}$} (v0);
\node[frame, right of=F0] (F1){};
\node at ([xshift=-1em, yshift=-4em]F1.north) [world, label={70:$(w,1)$}] (w1){};
\node at ([yshift=3em]F1.south west) [world, label={-70:$(v,1)$}] (v1){};
\path[->] (w1) edge[bend left=10] node[right] {$\R^{1}$} (v1);
\end{tikzpicture}
\end{lrbox}
\begin{figure}[H]
\centering
\begin{tikzpicture}[remember picture, node distance=3cm]
\node[draw=white, label={below:$\F \oplus \F$}] (FF) {\usebox\disjUn};
\node[frame,right of=FF, xshift=3cm,label={below:$\F^{\prime}$}] (Fp){};
\node at ([yshift=-4em]Fp.north) [world, label={70:$\hat{w}$}] (w){};
\node at ([yshift=3em]Fp.south west) [world, label={-70:$\hat{v}$}] (v){};
\node at ([yshift=3em]Fp.north east) [world, label={70:$w^{\prime}$}] (wp){};
\path[->] (w) edge[bend left=10] node[right] {$\R^{\prime}$}(v);
\path[-] (wp.west) edge[bend right,draw=gray, dashed] node [below]{} (Fp.north);
\path[-] (wp.south east) edge[bend left,draw=gray, dashed] node [below]{} (Fp.north east);
\path[->] (w0) edge[bend left=80, dashed] node[above] {$g$}(w);
\path[->] (w1) edge[bend left=60,dashed] node[above] {$g$}(wp);
\path[->] (v0) edge[bend left=8,dashed] node[above] {$g$}(v);
\path[->] (v1) edge[bend right=100,dashed] node[above] {$g$}(v);
\end{tikzpicture}
\end{figure}
\end{document}
다음과 같은 출력이 생성됩니다.
재미있게도 외부 TiKz 그림에서 '그림 기억' 인수를 제거하고 F6을 눌러 PdfLaTeX를 사용하여 TexStudio에서 컴파일하면 그림이 길이 2 LOL의 주기로 다른 방식으로 끊어집니다. 이것을 어떻게 설명할 수 있을지 잘 모르겠습니다... 확실히 더 많은 연구가 필요합니다! :) 모든 분들의 도움에 다시 한 번 감사드립니다!