다음 tikz 다이어그램에서 범례를 적절한 위치에 배치하는 방법은 무엇입니까?

다음 tikz 다이어그램에서 범례를 적절한 위치에 배치하는 방법은 무엇입니까?

다이어그램 에 다음 코드가 있습니다 tikz. 모든 가장자리에 개별적으로 레이블을 지정하는 대신 가장자리를 나타내는 유사한 색상에 대한 범례 상자를 넣고 싶습니다. 이 다이어그램에서 범례 상자에는 다음 항목이 포함됩니다.

1. red line for value `b` 
2. blue line for value `a`
3. black lines for value `c`. 

또한 기본값을 어떻게 변경할 수 있습니까?흰 바탕decision명령 의 레이블투명한겹칠 때 가장자리의 일부 부분이 누락되는 것을 방지하기 위해. 다른 명령이나 환경을 사용하여 코드를 줄이는 데 도움이 되셨나요 tikzpicture?

\documentclass{standalone}
\usepackage{tikz-cd}
\tikzset{SmallNode/.style={draw,inner sep=0pt},%<- add circle here for circle nodes
every edge quotes/.style={fill=white}
}
\begin{document}
\begin{tikzpicture}
\node[SmallNode] (00) at (-0.5,1.5) {$(0,0)$};
\node[SmallNode] (0) at (-0.5,0) {$0$};
\node[SmallNode] (1) at (1,0) {$(1)$};
\node[SmallNode] (2) at (2.5,0) {$(2)$};
\node[SmallNode] (3) at (4.0,0) {$(3)$};
\node[] (4) at (4.8,0) {$\textbf{\dots}$};
\node[SmallNode] (5) at (6,0) {$(y-1)$};
\node[SmallNode] (6) at (8.0,0) {$(y)$};
\node[SmallNode] (7) at (9.9,0) {$(y+1)$};
\node[SmallNode] (8) at (11.9,0) {$(y+2)$};
\node[] (9) at (12.8,0) {$\textbf{\dots}$};
\node[SmallNode] (10) at (11.8,-3) {$(x-b-1)$};
\node[SmallNode] (11) at (8.9,-3) {$(x-b)$};
\node[SmallNode] (12) at (6.2,-3) {$(x-b+1)$};
\node[] (13) at (5.0,-3) {$\textbf{\dots}$};
\node[SmallNode] (14) at (3.8,-3) {$(x-1)$};
\node[SmallNode] (15) at (1.5,-3) {$(x)$};
\node[SmallNode] (16) at (-0.5,-3) {$(x+1)$};
\draw[->,blue] (0) edge ["a",bend left] (00) (00)edge ["a"] (0) ;
\draw[->] (1) edge ["b",bend left,auto=left] (0) (0) edge ["a"] (1);
\draw[->] (2) edge [bend left] (0) (1) edge ["a"] (2);
\draw[->] (3) edge [bend left] (0)(2) edge["a"] (3);
\draw[->] (5) edge [bend left] (0) edge ["a"] (6);
\draw[->] (6) edge [bend left] (0) edge ["a",black] (7);
\draw[->,blue] (7) edge [bend right,auto=right,"b"] (1) edge ["a",black] (8)(6) edge [bend right,"b",auto =right] (1);
\draw[->,red] (8) edge [bend right,auto=right] (2)(7) edge [bend right,auto=right,"a"] (2);
\draw[->] (10) edge ["a"] (11);
\draw[->] (11) edge ["a"] (12);
\draw[-,dashed,bend left,auto=left] (9) edge (10);
\draw[->] (14) edge ["a"] (15) edge [bend left,auto=left,"b",blue] (10);
\draw[->] (15) edge ["a"] (16) edge [bend right,auto=right,"b",blue] (11)(15) edge [bend left,auto=left,"b",blue] (10);
\draw[->,blue] (16) edge ["a",bend right,auto=right] (11);
\end{tikzpicture}
\end{document}

답변1

내가 귀하의 질문을 올바르게 이해했다면 귀하가 이것을 찾는 것보다 :

여기에 이미지 설명을 입력하세요

연결선이 어디에 있는지 표시하지 않았고 c사용된 라벨과 색상이 mwe에서 일치하지 않기 때문에 아마도 이 선을 잘못된 색상으로 그렸을 것입니다. 그러나 이것은 수정하는 데 문제가 되지 않습니다.

또한 코드를 약간 정리하여 더 짧게 만들었습니다.

\documentclass[margin=3mm]{standalone}
\usepackage{tikz}%{tikz-cd}
\usetikzlibrary{chains,
                fit,
                positioning}
\tikzset{
every edge quotes/.style={fill=white, fill opacity=0.8, text opacity=1,
                          font=\footnotesize}
}
\begin{document}
    \begin{tikzpicture}[
node distance = 21mm and 7mm,
  start chain = going right
                        ]
    \begin{scope}[every node/.style={draw, inner xsep=1pt, inner ysep=2pt, on chain}]
% top chain
\node   (00)    {$(0,0)$};
\node[below=of 00]  (0) {$0$};
\node   (1)     {$(1)$};
\node   (2)     {$(2)$};
\node   (3)     {$(3)$};
\node[draw=none]    (4) {$\textbf{\dots}$};
\node   (5)     {$(y{-}1)$};
\node   (6)     {$(y)$};
\node   (7)     {$(y{+}1)$};
\node   (8)     {$(y{+}2)$};
\node[draw=none]    (9) {$\textbf{\dots}$};
% bottom chain
\node[below=of 0]   (16)    {$(x+1)$};
\node   (15)    {$(x)$};
\node   (14)    {$(x{-1})$};
\node[draw=none]    (13)    {$\textbf{\dots}$};
\node   (12)    {$(x{-}b{+}1)$};
\node   (11)    {$(x{-}b)$};
\node   (10)    {$(x{-}b{-}1)$};
    \end{scope}
% legend
\coordinate[below=1mm of 00.south -| 7]  (L);
\draw[blue] (L) -- + (1,0)               node[right] {a};
\draw[red]  ([yshift=-3mm] L) -- + (1,0) node[right] {b};
\draw       ([yshift=-6mm] L) -- + (1,0) node[right] (LL)  {c};
\node[draw, yshift=0.5ex, fit=(L) (LL)] {};
% connections
%  a
\draw[->,blue]  (0)     edge [bend left]    (00)
                (00)    edge                (0)
                (6)     edge [bend right]   (1)
                (7)     edge [bend right]   (1)
% botttom
                (14)    edge [bend left]    (10)
                (15)    edge [bend left]    (10)
                (15)    edge [bend right]   (11)
                (16)    edge [bend right]   (11);
% b
\draw[->,red]   (7)     edge [bend right]   (2)
                (8)     edge [bend right]   (2);
% c
\foreach \i in {1,2,3, 6,7,8, 11,12, 15,16}
{
\pgfmathsetmacro{\ii}{int(\i-1)}
\draw[->]   (\ii) -- (\i);
}
%
\draw[-,dashed] (9) edge [bend left] (10);
    \end{tikzpicture}
\end{document}

관련 정보