Relleno "estrecho" de texto de varias líneas en el nodo

Relleno "estrecho" de texto de varias líneas en el nodo

Necesito etiquetar caminos curvos con etiquetas de varias líneas. Actualmente, hago esto colocando nodos a lo largo de las rutas como en el siguiente 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}

lo que da

ingrese la descripción de la imagen aquí

Normalmente uso fill=white, pero aquí he usado amarillo para aclarar el problema: el nodo es tan ancho como la línea más larga, lo que significa que parte de la línea está oscurecida por la etiqueta.

En cambio, lo que quiero es que solo se rellene el fondo inmediato del texto. Para texto de varias líneas, esto significaría que el relleno no depende del ancho de la línea más ancha, sino que el relleno se ajustaría al ancho de cada línea individual, es decir, sería "apretado". No sé cómo hacer esto de manera elegante TikZ, pero este MWE muestra algo parecido a lo que quiero:

\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}

Resultando en:

ingrese la descripción de la imagen aquí

Hay al menos dos problemas con esto:

  • Hay un espacio en blanco entre las dos líneas. Podría deshacerme de él moviendo las etiquetas manualmente, pero esto es tedioso y el espacio entre líneas no necesariamente sería consistente con el espacio entre líneas habitual.
  • Necesito colocar la etiqueta manualmente en lugar de poder colocarla a lo largo del camino como en el primer MWE.

¿Cuál es una buena solución que evite estos problemas?

Respuesta1

ingrese la descripción de la imagen aquí

\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}

También podrías considerar dibujar el camino en la parte superior.

ingrese la descripción de la imagen aquí

\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}

Respuesta2

CreoDavid CarlisleLa solución de ya es muy buena porque se necesita una nueva forma (de varias partes) para llenar solo el texto y no todo el rectángulo y al mismo tiempo actuar como un nodo.

Si no necesita que el nodo esté inclinado (girado a lo largo del camino), puede usar un matrix(de nodos).

Tenga en cuenta que necesita un final \\aquí. También podríamos definir una imagen donde la última \\ no será necesaria pero sí la sintaxis.

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

Código

\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}

Producción

ingrese la descripción de la imagen aquí

información relacionada