노드의 여러 줄 텍스트를 "단단하게" 채움

노드의 여러 줄 텍스트를 "단단하게" 채움

여러 줄 레이블을 사용하여 곡선 경로에 레이블을 지정해야 합니다. 현재는 다음 MWE와 같이 경로를 따라 노드를 배치하여 이 작업을 수행합니다.

\documentclass[class=minimal,border=0pt]{standalone}

\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{positioning}

\begin{document}
\begin{tikzpicture}
  \draw[-] (-1,-0.5) .. controls (-1,1) and (1,0) .. 
    node[fill=yellow,above left=-20pt and -11pt,align=center] 
    {short line\\much longer line} (1,1);
\end{tikzpicture}
\end{document}

이는

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

일반적으로 를 사용 fill=white하지만 여기서는 문제를 더 명확하게 하기 위해 노란색을 사용했습니다. 노드는 가장 긴 선만큼 넓습니다. 즉, 선의 일부가 레이블에 의해 가려진다는 의미입니다.

대신 내가 원하는 것은 텍스트의 직접적인 배경만 채워지는 것입니다. 여러 줄로 된 텍스트의 경우 이는 가장 넓은 줄의 너비에 따라 채우기가 달라지지 않고 각 개별 줄의 너비에 따라 채우기가 조정된다는 의미입니다. 즉, "촘촘"합니다. 를 사용하여 우아한 방식으로 이 작업을 수행하는 방법을 모르지만 TikZ이 MWE는 내가 원하는 것과 비슷한 것을 보여줍니다.

\documentclass[class=minimal,border=0pt]{standalone}

\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{positioning}

\begin{document}
\begin{tikzpicture}
  \draw[-] (-1,-0.5) .. controls (-1,1) and (1,0) .. (1,1);
  \coordinate (L) at (-0.9,0.2);  
  \draw (L) node[fill=yellow,above=0pt,align=center] {short line};  
  \draw (L) node[fill=yellow,below=0pt,align=center] {much longer line};  
\end{tikzpicture}
\end{document}

를 야기하는:

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

여기에는 적어도 두 가지 문제가 있습니다.

  • 두 줄 사이에 공백이 있습니다. 레이블을 수동으로 이동하여 제거할 수도 있지만 이는 지루한 작업이며 줄 사이의 간격이 반드시 일반적인 줄 간격과 일치하지는 않습니다.
  • 첫 번째 MWE에서처럼 경로를 따라 레이블을 배치할 수 있는 대신 수동으로 레이블을 배치해야 합니다.

이러한 문제를 우회하는 좋은 솔루션은 무엇입니까?

답변1

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

\documentclass[class=minimal,border=0pt]{standalone}

\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
  \draw[-] (-1,-0.5) .. controls (-1,1) and (1,0) .. 
    node[above left=-20pt and -11pt,align=center] 
    {\colorbox{yellow}{short line}\\\colorbox{yellow}{much longer line}} (1,1);
\end{tikzpicture}
\end{document}

상단에 경로를 그리는 것도 고려해 볼 수 있습니다.

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

\documentclass[class=minimal,border=0pt]{standalone}

\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
  \draw[-] (-1,-0.5) .. controls (-1,1) and (1,0) .. 
    node[behind path, above left=-20pt and -11pt,align=center] 
    {\colorbox{yellow}{short line}\\\colorbox{yellow}{much longer line}} (1,1);
\end{tikzpicture}
\end{document}

답변2

제 생각에는데이비드 칼라일님의 솔루션은 이미 매우 좋은 솔루션입니다. 전체 직사각형이 아닌 텍스트만 채우고 하나의 노드로 작동하려면 새로운(다중 부분) 모양이 필요하기 때문입니다.

노드가 기울어질(경로를 따라 회전) 필요하지 않은 경우 matrix(노드의)를 사용할 수 있습니다.

\\여기서 엔딩이 필요하다는 점에 유의하세요 . 마지막 사진은 \\ 필요하지 않지만 구문이 필요한 사진을 정의할 수도 있습니다.

pic [<options>] {multiline = short line \\ much longer line}

암호

\documentclass[tikz]{standalone}
\usetikzlibrary{positioning, matrix}
\tikzset{
  multiline/.style={
    matrix of nodes,
    every outer matrix/.append style={
      inner sep=+0pt, outer sep=+0pt, path only, shape=rectangle}}}
\begin{document}
\tikz
  \draw (-1,-0.5) .. controls (-1,1) and (1,0) ..
    node[
      multiline,
      above left = -20pt and -11pt,
      nodes={fill=yellow}
    ] {short line\\much longer line\\} (1,1);
\end{document}

산출

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

관련 정보