
Моя проблема на самом делекажетсяпросто, так что извините, если на этот вопрос уже был дан ответ, я не смог его найти. Возможно, я также неправильно указал ключевые слова.
Текущая ситуация:
\tikzstyle{block} = [rectangle, draw, fill=blue!20, text width=15em, text centered, rounded corners, minimum height=5em]
Здесь ширина текста была увеличена до 15em, поскольку ранее узлы переносили текст так быстро, что график не помещался на одной странице и элементы начинали перекрываться.
В моем случае использования я хочу иметь три вертикальных графика рядом друг с другом, поэтому важно также, чтобы tikz соблюдал директиву максимальной ширины. Я не могу использовать text width=15em
(или 0.3\textwidth
) как есть, потому что когда текст короткий, сам узел все еще остается в своей ширине.
Так что по сути я хочу узел, который: Если ниже максимальной ширины, то он изменяет размер в соответствии с длиной текста, в противном случае он начнет перенос текста. Также, если это возможно без особых усилий, разрешите устанавливать эту ширину, например так:
\begin{figure}[htbp]
\centering
\begin{tikzpicture}[node distance = 2cm, auto, maximum-width=0.3\textwidth]
...
или что-то подобное, но желательно не в определении стиля и не в каждом отдельном \node.
Заранее спасибо за любую помощь :)
решение1
Я не думаю, что есть простой ключ, который делает это, но есть что-то близкое к этому. Этот ответ определяет стиль max width node
, который принимает аргументы формы max width node={[<style>]{content}}
, с примерами в следующем 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}
Обратите внимание, что \tikzstyle
этот метод устарел, и обычно к вопросам прилагаются минимальные рабочие примеры.