Escale el ancho de un nodo para ajustarlo al texto manteniendo un ancho máximo

Escale el ancho de un nodo para ajustarlo al texto manteniendo un ancho máximo

Mi problema en realidadparecesimple, así que disculpas si esto ya fue respondido antes, no pude encontrarlo. Quizás también tuve las palabras clave incorrectas.

Situación actual:

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

Aquí el ancho del texto se ha aumentado a 15 em, porque anteriormente los nodos envolvían el texto tan rápido que el gráfico no cabía en una página y los elementos comenzaron a superponerse.

En mi caso de uso, quiero tener tres gráficos verticales uno al lado del otro, por lo que es importante que tikz también respete la directiva de ancho máximo. No puedo usar text width=15em(o 0.3\textwidth) tal como está, porque cuando el texto es corto, el nodo en sí aún permanece en su ancho.

Básicamente, quiero un nodo que: Si está por debajo del ancho máximo, cambie el tamaño de acuerdo con la longitud del texto; de lo contrario, comenzará a ajustar el texto. Además, si es posible sin demasiado esfuerzo, permita configurar ese ancho, así:

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

o similar, pero preferiblemente no en la definición de estilo ni en cada \nodo individual.

Gracias de antemano por cada ayuda :)

Respuesta1

No creo que haya una clave simple que haga eso, pero hay algo parecido a esto. Esta respuesta define un estilo max width node, que toma argumentos de la forma max width node={[<style>]{content}}, con ejemplos en el siguiente 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}

ingrese la descripción de la imagen aquí

Tenga en cuenta que \tikzstyleestá obsoleto y, por lo general, se espera que los ejemplos de trabajo mínimos incluyan preguntas.

información relacionada