Preenchimento "apertado" de texto multilinha no nó

Preenchimento "apertado" de texto multilinha no nó

Preciso rotular caminhos curvos com rótulos multilinhas. Atualmente, faço isso colocando nós ao longo dos caminhos como no seguinte 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}

que dá

insira a descrição da imagem aqui

Normalmente eu uso fill=white, mas aqui usei amarelo para deixar o problema mais claro: O nó é tão largo quanto a linha mais longa, o que significa que parte da linha está obscurecida pelo rótulo.

O que eu quero é que apenas o plano de fundo imediato do texto seja preenchido. Para texto multilinha, isso significaria que o preenchimento não depende da largura da linha mais larga, mas que o preenchimento se ajustaria à largura de cada linha individual, ou seja, seria "apertado". Não sei como fazer isso de forma elegante com TikZ, mas esse MWE mostra algo próximo do que desejo:

\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 em:

insira a descrição da imagem aqui

Existem pelo menos dois problemas com isso:

  • Há um espaço em branco entre as duas linhas. Eu poderia me livrar disso movendo os rótulos manualmente, mas isso é tedioso e o espaçamento entre as linhas não seria necessariamente consistente com o espaçamento normal entre linhas.
  • Preciso colocar o rótulo manualmente em vez de poder colocá-lo ao longo do caminho como no primeiro MWE.

Qual é uma boa solução que contorna esses problemas?

Responder1

insira a descrição da imagem aqui

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

Você também pode considerar desenhar o caminho no topo

insira a descrição da imagem aqui

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

Responder2

Eu pensoDavid CarlisleA solução de já é muito boa porque é necessária uma nova forma (com várias partes) para que apenas o texto seja preenchido e não o retângulo inteiro, enquanto ainda funciona como um nó.

Se você não precisa que o nó seja inclinado (girado ao longo do caminho), você pode usar um matrix(de nós).

Observe que você precisa de um final \\aqui. Também poderíamos definir uma foto onde a última \\ não será necessária, mas precisará da sintaxe

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}

Saída

insira a descrição da imagem aqui

informação relacionada