여러 줄 레이블을 사용하여 곡선 경로에 레이블을 지정해야 합니다. 현재는 다음 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}