曲線のパスに複数行のラベルを付ける必要がある。現在、次の 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}
その結果:
これには少なくとも 2 つの問題があります。
- 2 行の間には空白があります。ラベルを手動で移動すればこの空白をなくすことができますが、これは面倒な作業であり、行間の間隔が通常の行間隔と必ずしも一致するとは限りません。
- 最初の 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
私は思うデビッド・カーライルのソリューションは、すでに非常に優れたものです。四角形全体ではなくテキストのみを塗りつぶし、それを 1 つのノードとして機能させるには、新しい (複数部分から成る) 図形が必要になるためです。
ノードを傾斜させる(パスに沿って回転させる)必要がない場合は、matrix
(ノードの)を使用できます。
ここで終了が必要であることに注意してください。また、最後の部分 が不要でも構文が必要になる\\
picを定義することもできます。\\
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}