Dimensione a largura de um nó para ajustar ao texto, mantendo uma largura máxima

Dimensione a largura de um nó para ajustar ao texto, mantendo uma largura máxima

Meu problema na verdadeparecesimples, então peço desculpas se isso já foi respondido antes, não consegui encontrar. Talvez eu também tenha usado as palavras-chave erradas.

Situação atual:

\tikzstyle{block} = [rectangle, draw, fill=blue!20, text width=15em, text centered, rounded corners, minimum height=5em]

Aqui a largura do texto foi aumentada para 15em, porque anteriormente os nós quebravam o texto tão rápido que o gráfico não cabia em uma página e os elementos começaram a se sobrepor.

No meu caso de uso, quero ter três gráficos verticais próximos um do outro, por isso é importante que o tikz também cumpra a diretiva de largura máxima. Não posso usar text width=15em(ou 0.3\textwidth) como está, porque quando o texto é curto, o próprio nó ainda permanece em sua largura.

Então, essencialmente, eu quero um nó que: Se estiver abaixo da largura máxima, redimensione de acordo com o comprimento do texto, caso contrário, ele começará a quebrar o texto. Além disso, se possível sem muito esforço, permita definir essa largura, assim:

\begin{figure}[htbp]
    \centering
    \begin{tikzpicture}[node distance = 2cm, auto, maximum-width=0.3\textwidth]
...

ou similar, mas de preferência não na definição de estilo e nem em cada nó individual.

Agradecemos antecipadamente por cada ajuda :)

Responder1

Não creio que exista uma chave simples que faça isso, mas há algo próximo disso. Esta resposta define um estilo max width node, que leva argumentos da forma max width node={[<style>]{content}}, com exemplos no seguinte MWE:

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{calc}
\tikzset{max width node/.style args={[#1]#2}{insert path={
node[#1,opacity=0,overlay](tst){#2}
let \p1=($(tst.east)-(tst.west)$),
    \n1={ifthenelse(\x1>\pgfkeysvalueof{/tikz/max width},1,0)}
in
\ifdim\n1>0pt
  node[#1,text width=\pgfkeysvalueof{/tikz/max width}-4pt]{#2}
\else
  node[#1]{#2}
\fi
}},max width/.initial=5em}
\begin{document}
\begin{tikzpicture}[block/.style={rectangle, draw, fill=blue!20, text centered, rounded corners, minimum height=5em}]
 \path (0,0) [max width node={[block]{pft}}]
  (0,-5) [max width node={[block]{pft pft pft pft pft pft pft pft pft pft
  pft pft pft pft pft pft pft pft pft pft 
  pft pft pft pft pft pft pft pft pft pft}}];
 \path (5,0) [max width node={[block,max width=7em]{pft}}]
  (5,-5) [max width node={[block,max width=7em]{pft pft pft pft pft pft pft pft pft pft
  pft pft pft pft pft pft pft pft pft pft 
  pft pft pft pft pft pft pft pft pft pft}}];
\end{tikzpicture}
\end{document}

insira a descrição da imagem aqui

Observe que \tikzstyleele está obsoleto e, geralmente, espera-se que exemplos de trabalho mínimos venham com perguntas.

informação relacionada