
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}
Observe que \tikzstyle
ele está obsoleto e, geralmente, espera-se que exemplos de trabalho mínimos venham com perguntas.