我使用 tikz 创建了一个流程图。虽然我对结果很满意,但让我困扰的是,我通过手动应用换行符来创建框的大小。有没有办法告诉程序根据框包含的文本量调整框的大小?最好为每个框定义一个最大宽度。这是我的示例:
\documentclass[border=10pt,
tikz]{standalone}
\usetikzlibrary{trees}% <-- new
\usepackage[osf]{mathpazo}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\begin{document}
\begin{tikzpicture}[
every node/.style = {shape=rectangle, rounded corners,
draw, align=center, fill=white}, level distance=4cm,
level 1/.style = {sibling distance = 60em},% <-- new
level 2/.style = {sibling distance = 24em},% <-- new
level 3/.style = {sibling distance = 13em},% <-- new
level 4/.style = {sibling distance = 11em},% <-- new
level 5/.style = {sibling distance = 21em},% <-- new
]
\node {Aristoteles’ Einteilung \\menschlichen Handelns\\ (Rhetorik, 1368b 33)}
[edge from parent fork down]
child {node{was man nicht\\ von sich aus tut}
child {node{Aus Zufall}
child {node{Zufall und Schicksalsfügung\\ gehören zu den Ursachen\\ Physik, 195b4\\ Zufall im Bereich menschlichen \\Handelns im Ggs. zum Vorsatz.\\Bewegursache }child{node {Unbestimmte,\\ akzidentelle Ursachen}}
}}child{node {Aus Notwendigkeit}child{node {durch Gewalt (Zwang?)}}child{node {von Natur aus}child{node {Ursache in den Dingen selbst}child{node {Weder freiwillig noch unfreiwillige \textit{Vorgänge}\\z.\,B. Altern und Sterben}}child{node {Nichtfreiwillige Bewegungen\\z.\,B. Schlaf, Erwachen Atmung}}}}}}
child{node {was man von\\ sich aus tut}child{node {Tun aus Gewohnheit}child{node {Kein Habitus \\im Sinne der Tugend}child{node {Problem: ist ein Tun aus\\ Gewohnheit freiwillig\\ im eigentlichen Sinne? }}}}child{node {aus Streben}child{node {vernünftiges Streben}child{node {Wollen\\ d.\,i. Streben nach Gutem}}}child{node {vernunftloses Streben}child{node {Zorn und Begierde}}}}}
;
\end{tikzpicture}
\end{document}
答案1
这显示了制作节点的两个潜在选项,其中text width
相对于节点中文本的长度进行设置。
\documentclass[border=5mm,tikz]{standalone}
\newcommand\foo[1]{node [text width={0.7*width("#1")}] {#1}}
\begin{document}
\begin{tikzpicture}[
foo/.style={
draw,
% measure the width of the argument, and set text width to 60% of this
text width={0.6*width("#1")},
% use node contents to define the text of the node
node contents={#1}
}
]
\node[foo={this is some long text, with comma},at={(0,1)}];
\path \foo{This is another long text, also with a comma};
\end{tikzpicture}
\end{document}
以及为您的树实施的宏版本。请注意,我将设置text width
为文本长度的 30% 或 3cm 中较大的一个,否则它不适用于较短的节点。还请注意,此方法不适用于其中的节点\textit
,因此对于该节点,文本宽度是手动设置的。
\documentclass[border=10pt,
tikz]{standalone}
\usetikzlibrary{trees}% <-- new
\usepackage[osf]{mathpazo}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\newcommand\makenode[1]{node [text width={max(0.3*width("#1"),3cm)}] {#1}}
\begin{document}
\begin{tikzpicture}[
every node/.style = {shape=rectangle, rounded corners,
draw, align=center, fill=white}, level distance=4cm,
level 1/.style = {sibling distance = 50em},% <-- new
level 2/.style = {sibling distance = 24em},% <-- new
level 3/.style = {sibling distance = 13em},% <-- new
level 4/.style = {sibling distance = 11em},% <-- new
level 5/.style = {sibling distance = 21em},% <-- new
]
\path
\makenode{Aristoteles’ Einteilung menschlichen Handelns (Rhetorik, 1368b 33)}
[edge from parent fork down]
child {
\makenode{was man nicht von sich aus tut}
child { \makenode{Aus Zufall}
child { \makenode{Zufall und Schicksalsfügung
gehören zu den Ursachen
Physik, 195b4
Zufall im Bereich menschlichen
Handelns im Ggs. zum Vorsatz.
Bewegursache}
child { \makenode{Unbestimmte, akzidentelle Ursachen} }
}
}
child{ \makenode{Aus Notwendigkeit}
child{ \makenode{durch Gewalt (Zwang?)}}
child{ \makenode{von Natur aus}
child{ \makenode{Ursache in den Dingen selbst}
child{ node[text width=3.5cm]{Weder freiwillig noch unfreiwillige \textit{Vorgänge}
z.\,B. Altern und Sterben} % doesn't work with \textit
}
child{ \makenode{Nichtfreiwillige Bewegungen z.\,B. Schlaf, Erwachen Atmung}}
}
}
}
}
child{ \makenode{was man von sich aus tut}
child{ \makenode{Tun aus Gewohnheit}
child{ \makenode{Kein Habitus im Sinne der Tugend}
child{ \makenode{Problem: ist ein Tun aus
Gewohnheit freiwillig
im eigentlichen Sinne?}
}
}
}
child{ \makenode{aus Streben}
child{ \makenode{vernünftiges Streben}
child{ \makenode{Wollen d.\,i. Streben nach Gutem}}
}
child{ \makenode{vernunftloses Streben}
child{\makenode{Zorn und Begierde}}
}
}
};
\end{tikzpicture}
\end{document}