流程图,框的宽度已定义

流程图,框的宽度已定义

我使用 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}

相关内容