
Ich denke, das wäre eine gute Frage, wie man ein angepasstes Flussdiagramm (Ihr eigenes) in MS Word in LaTeX überträgt. Nun, ich habe eine World-Datei angehängt und versuche, diese in LaTex zu konvertieren. Das Speichern unter „Typ“ LaTeX hat nicht funktioniert und ein unsinniges PDF erzeugt. Was wäre also der beste Weg?
Ich weiß nicht, wie ich hier eine Word-Datei anhängen kann. Deshalb habe ich einen Schnappschuss davon eingefügt.
Eine Möglichkeit besteht darin, dies in LaTeX neu zu tippen, aber ich traue mich nicht, das zu tun (ich habe Schwierigkeiten, diese Pfeile zu haben). Wenn ich dies als Abbildung in die LaTeX-Quelldatei einfüge, stimmen die Schriftarten eindeutig nicht mit den anderen Angaben auf dem Papier überein. Daher möchte ich das konvertieren (vielleicht als einfachste Möglichkeit).
Antwort1
Alans Antwortfunktioniert einwandfrei, aber mit der aktuellen Version von Forest muss nicht edge path
von Grund auf neu definiert werden. Stattdessen können wir die edges
Bibliothek mit der Option verwenden forked edges
. Darüber hinaus können wir eliminieren, growth parent anchor=east
da es nichts bewirkt (auch nicht in der alten Version von Forest), und wir können die Anker parent
und children
anstelle von east
und verwenden west
, um den Code flexibler zu gestalten.
parent anchor=children,
child anchor=parent,
forked edges,
edge={->,>=latex},
Tatsächlich grow=east
reicht es allein aus, sodass wir parent anchor
auf child anchor
die Spezifikationen ganz verzichten können.
Dies gibt uns den folgenden Code für dieselbe Ausgabe, die Alan in seiner Antwort gezeigt hat.
\documentclass[tikz,multi,border=10pt]{standalone}
\usepackage[edges]{forest}
\begin{document}
\begin{forest}
for tree={
grow=east,
math content,
edge={->,>=latex},
},
forked edges
[\tau>\tau^0
[A_x<\tau<A_l
]
[D
[E]
[F]
]
[\tau<A_x
[{\zeta^n=\zeta^n-1}
]
]
]
\end{forest}
\end{document}
Bei genauerem Hinsehen könnten die Zeilen allerdings besser sein:
Die Standarddefinition von forked edges
ist
forked edges/.style={
for tree={parent anchor=children},
for descendants={child anchor=parent,forked edge}
},
Versuchen wir also, es so neu zu definieren, dass es forked edge
nur verwendet wird, wenn ein Knoten mehr als ein untergeordnetes Element hat, indem wir diese Neudefinition hinzufügen:
\forestset{
forked edges/.style={
for tree={parent anchor=children},
for descendants={
child anchor=parent,
if={n_children("!u")==1}{}{
forked edge
},
}
},
}
Das ist besser:
Der Pfeil ist jedoch immer noch abgewinkelt - er ist nicht ganz horizontal. Was wir tun müssen, ist eine Alternative edge path
für den Fall zu definieren, dass es genau ein Kind gibt.
Die Standardkante wird vom übergeordneten Anker des übergeordneten Knotens (!u.parent anchor)
zum untergeordneten Anker des untergeordneten Knotens gezeichnet (.child anchor)
. Wir möchten, dass der Anfang des Pfeils horizontal mit ausgerichtet ist (.child anchor)
. (Wir könnten den Endpunkt natürlich auch mit dem übergeordneten Anker des übergeordneten Knotens ausrichten.)
\forestset{
forked edges/.style={
for tree={parent anchor=children},
for descendants={
child anchor=parent,
if={n_children("!u")==1}{
edge path'={
(!u.parent anchor |- .child anchor) -- (.child anchor)
},
}{
forked edge,
},
}
},
}
Dadurch entsteht der gesuchte horizontale Pfeil:
Dies ist jedoch möglicherweise nicht die beste Lösung. Wenn die Größe der übergeordneten und untergeordneten Knoten zu unterschiedlich ist, kann dies zu einer seltsamen Ausrichtung führen. Vielleicht sollten wir Forest stattdessen anweisen, das untergeordnete Element am übergeordneten Element auszurichten, sodass der untergeordnete Anker des untergeordneten Elements mit dem übergeordneten Anker des übergeordneten Elements übereinstimmt.
\forestset{
forked edges/.style={
for tree={parent anchor=children},
for descendants={
child anchor=parent,
if={n_children("!u")==1}{
!u.calign=child edge,
}{
forked edge,
},
}
},
}
macht den Trick.
Im Moment sieht das Ergebnis so aus:
Das ist zwar besser, aber es wäre schön, wenn wir das mittlere Kind am übergeordneten Element ausrichten könnten, wenn das übergeordnete Element eine ungerade Anzahl von Kindern hat. Zum Beispiel, wenn D
die Kante von an der Linie ausgerichtet wäre, die vom Stammknoten gezogen wird.
Das ist etwas schwieriger, aber nicht viel. Wir können den calign=child edge
Trick erneut anwenden und das mittlere Kind als „primäres“ Kind seines Elternteils festlegen.
Wir können dies in die Präambel am Anfang unserer forest
Umgebung einfügen:
\begin{forest}
for tree={
...
if={isodd(n_children())}{
calign primary child/.pgfmath={(n_children()+1)/2},
calign=child edge,
}{},
},
Da jeder Knoten mit genau einem Kind eine ungerade Anzahl von Kindern hat, können wir die Neudefinition von auch weglassen, forked edges
da wir jetzt sowieso einen geraden Pfeil erhalten:
\documentclass[tikz,multi,border=10pt]{standalone}
\usepackage[edges]{forest}
\begin{document}
\begin{forest}
for tree={
grow=east,
math content,
edge={->,>=latex},
if={isodd(n_children())}{
calign primary child/.pgfmath={(n_children()+1)/2},
calign=child edge,
}{}
},
forked edges
[\tau>\tau^0
[A_x<\tau<A_l
]
[D
[E]
[F]
]
[\tau<A_x
[{\zeta^n=\zeta^n-1}
]
]
]
\end{forest}
\end{document}
Griechischen Code schamlos stehlen vonMarco:
\begin{forest}
for tree={
grow'=east,
math content,
edge={->,>=latex},
if={isodd(n_children())}{
calign primary child/.pgfmath={(n_children()+1)/2},
calign=child edge,
}{}
},
forked edges
[\tau>\tau^0
[\tau<A_x
[{\zeta^n=\zeta^{n-1}}]
[{\zeta^n=\zeta^{n-1}}]
[{\zeta^n=\zeta^{n-1}}]
]
[A_x<\tau<A_l
[\sigma<C_{a}(T-A_{x})
[{\zeta^n=\zeta^{n-1}}]
[{\zeta^n=\zeta^{n-1}}]
[{\zeta^n=\zeta^{n-1}}]
]
[\sigma>C_{a}(T-A_{x})
[{\xi^{n}=\frac{\xi^{0}}{2}\cos \left ( a_{A}\left (\Gamma-A_{x}-\frac{\sigma}{C_{a}} \right ) \right )}]
[{\xi_{s}^{n}=\xi_{s}^{n}-\frac{\xi_{s}^{n}}{\xi_{s}^{n}}-(\xi^{0}-\xi^{n})}]
[{\xi_{s}^{n}=\xi_{s}^{n}-\frac{\xi_{s}^{n}}{\xi_{s}^{n}}-(\xi^{0}-\xi^{n})}]
]
]
]
\end{forest}
BEARBEITEN
Ihr Code erzeugt „Lücken“, weil [[<something>]]
er einen leeren Knoten und dann einen Knoten mit erzeugt [<something>]
. Um den leeren Knoten zu entfernen, sagen Sie einfach [<something>]
.
\documentclass{article}
\usepackage{forest-1}
\begin{document}
\begin{forest}
for tree={
grow=east,
parent anchor=east,
child anchor=west,
math content,
edge={->, >={latex}},
edge path={\noexpand\path[\forestoption{edge}] (!u.parent anchor) -- +(5pt,0pt) |- (.child anchor) \forestoption{edge label};}
}
[T>T^0
[T>A_f
[C_a(T-A_f) <\sigma <C_a (T-A_s)
[ {\zeta_s^n=\zeta_s^0-\frac{\zeta_s^0}{\zeta^0}(\zeta^0-\zeta^n)} ]
[ {\zeta_T^n=\zeta_T^0-\frac{\zeta_T^0}{\zeta^0}(\zeta^0-\zeta^n)} ]
[{\zeta^n=\frac{\zeta^0}{2}(cos \big (\alpha_A(T-A_s-\frac{\sigma}{C_a})\big )+1)} ]
]
[\sigma<C_a(T-A_s)
[ {\zeta^n=\zeta^{n-1}} ]
[ {\zeta_s^n=\zeta_s^{n-1}} ]
[ {\zeta_T^n=\zeta_T^{n-1}} ]
]
]
[A_s<T<A_f
[\sigma<C_a(T-A_s)
[ {\zeta_s^n=\zeta_s^0-\frac{\zeta_s^0}{\zeta^0}(\zeta^0-\zeta^n)} ]
[ {\zeta_T^n=\zeta_T^0-\frac{\zeta_T^0}{\zeta^0}(\zeta^0-\zeta^n)} ]
[{\zeta^n=\frac{\zeta^0}{2}(cos \big (\alpha_A(T-A_s-\frac{\sigma}{C_a})\big )+1)}]
[\sigma>C_a(T-A_s)
[ {\zeta^n=\zeta^{n-1}} ]
[ {\zeta_s^n=\zeta_s^{n-1}} ]
[ {\zeta_T^n=\zeta_T^{n-1}} ]
]
]
]
[T<A_s
[ {\zeta^n=\zeta^{n-1}} ]
[ {\zeta_s^n=\zeta_s^{n-1}} ]
[ {\zeta_T^n=\zeta_T^{n-1}} ]
]
]
\end{forest}
\end{document}
Beachten Sie, dass Sie mit Version 1Tunmüssen Sie angeben parent anchor=east, child anchor=west
und ändern edge path
. Es gibt kein forked edges
. Außerdem ist es nicht einfach, den Knick zu beseitigen, wenn nur ein Kind vorhanden ist, da calign=child edge
es in Versionen vor 2.01 fehlerhaft ist. Sie könnten es trotzdem tun, aber es wäre viel einfacher, es zu aktualisieren, als den Fehler zu umgehen. Dies ist kein Problem, wenn Ihr Baum keine einzigen Kinder hat, aber wenn Sie andere Bäume haben, könnte es eines sein. Aus ähnlichen Gründen ist es auch nicht einfach, die Kanten auszurichten. Sie müssten etwas mit tun, edge path
damit es funktioniert.
Mit dem aktuellen Paket hingegen lässt sich Ihr Baum ganz einfach so anpassen und der Code ist auch einfacher:
\documentclass{article}
\usepackage[edges]{forest}
\begin{document}
\begin{forest}
for tree={
grow'=east,
math content,
edge={->,>=latex},
if={isodd(n_children())}{
calign primary child/.pgfmath={(n_children()+1)/2},
calign=child edge,
}{}
},
forked edges
[T>T^0
[T>A_f
[C_a(T-A_f) <\sigma <C_a (T-A_s)
[ {\zeta_s^n=\zeta_s^0-\frac{\zeta_s^0}{\zeta^0}(\zeta^0-\zeta^n)} ]
[ {\zeta_T^n=\zeta_T^0-\frac{\zeta_T^0}{\zeta^0}(\zeta^0-\zeta^n)} ]
[{\zeta^n=\frac{\zeta^0}{2}(cos \big (\alpha_A(T-A_s-\frac{\sigma}{C_a})\big )+1)} ]
]
[\sigma<C_a(T-A_s)
[ {\zeta^n=\zeta^{n-1}} ]
[ {\zeta_s^n=\zeta_s^{n-1}} ]
[ {\zeta_T^n=\zeta_T^{n-1}} ]
]
]
[A_s<T<A_f
[\sigma<C_a(T-A_s)
[ {\zeta_s^n=\zeta_s^0-\frac{\zeta_s^0}{\zeta^0}(\zeta^0-\zeta^n)} ]
[ {\zeta_T^n=\zeta_T^0-\frac{\zeta_T^0}{\zeta^0}(\zeta^0-\zeta^n)} ]
[{\zeta^n=\frac{\zeta^0}{2}(cos \big (\alpha_A(T-A_s-\frac{\sigma}{C_a})\big )+1)}, calign with current]
[\sigma>C_a(T-A_s)
[ {\zeta^n=\zeta^{n-1}} ]
[ {\zeta_s^n=\zeta_s^{n-1}} ]
[ {\zeta_T^n=\zeta_T^{n-1}} ]
]
]
]
[T<A_s
[ {\zeta^n=\zeta^{n-1}} ]
[ {\zeta_s^n=\zeta_s^{n-1}} ]
[ {\zeta_T^n=\zeta_T^{n-1}} ]
]
]
\end{forest}
\end{document}
Antwort2
Dies ist mit nicht sehr schwierig forest
. Das folgende Beispiel soll Ihnen den Einstieg erleichtern.
\documentclass{article}
\usepackage{forest}
\begin{document}
\begin{forest}for tree={
grow=east
parent anchor=east,
child anchor=west,
math content,
edge path={\noexpand\path[\forestoption{edge},->, >={latex}]
(!u.parent anchor) -- +(5pt,0pt) |- (.child anchor)
\forestoption{edge label};}}
[\tau>\tau^0 [A_x<\tau<A_l ] [D [E ] [F ]][\tau<A_x [ {\zeta^n=\zeta^n-1} ]]]
\end{forest}
\end{document}
Antwort3
Bedenken Sie, dass dies überhaupt nicht der richtige Ansatz ist, aber ich bin kein Experte und dies ist der einzige Weg, den ich kenne.
\documentclass[border=0.5cm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
% \draw [help lines] (0,0) grid (13,13);
\draw [thick] (0,0) -- (0,10);
\draw [thick,-latex] (0,5) -- + (0.5,0) node [right] {$A<T<A_{f}$};
\draw [thick,-latex] (2.8,5) -- + (0.5,0);
\draw [thick] (3.3,3.5) -- (3.3,6.5);
\draw [thick,-latex] (3.3,3.5) -- + (0.5,0) node [right] {$\sigma<C_{a}(T-A_{x})$};
\draw [thick,-latex] (3.3,6.5) -- + (0.5,0) node [right] {$\sigma>C_{a}(T-A_{x})$};
\draw [thick,-latex] (0,10) -- + (0.5,0) node [right] {$T<A$};
\draw [thick,-latex] (1.8,10) -- + + (0.5,0);
\draw [thick] (2.3,9) -- (2.3,11);
\draw [thick,-latex] (2.3,9) -- + (0.5,0) node [right] {$\xi^{n}=\xi^{n-1}$};
\draw [thick,-latex] (2.3,10) -- + (0.5,0) node [right] {$\xi^{n}=\xi^{n-1}$};
\draw [thick,-latex] (2.3,11) -- + (0.5,0) node [right] {$\xi_{T}^{n}=\xi_{T}^{n-1}$};
\draw [thick,-latex] (6.5,6.5) -- + (0.5,0);
\draw [thick] (7,5.8) -- + (0,1.4);
\draw [thick,-latex] (7,5.8) -- + (0.5,0) node [right] {$\xi^{n}=\xi^{n-1}$};
\draw [thick,-latex] (7,6.5) -- + (0.5,0) node [right] {$\xi^{n}=\xi^{n-1}$};
\draw [thick,-latex] (7,7.2) -- + (0.5,0) node [right] {$\xi_{T}^{n}=\xi_{T}^{n-1}$};
\draw [thick,-latex] (6.5,3.5) -- + (0.5,0);
\draw [thick] (7,2.5) -- + (0,2);
\draw [thick,-latex] (7,2.5) -- + (0.5,0) node [right] {$\xi^{n}=\frac{\xi^{0}}{2}\cos \left ( a_{A}\left (\Gamma-A_{x}-\frac{\sigma}{C_{a}} \right ) \right )$};
\draw [thick,-latex] (7,3.5) -- + (0.5,0) node [right] {$\xi_{s}^{n}=\xi_{s}^{n}-\frac{\xi_{s}^{n}}{\xi_{s}^{n}}-(\xi^{0}-\xi^{n})$};
\draw [thick,-latex] (7,4.5) -- + (0.5,0) node [right] {$\xi_{s}^{n}=\xi_{s}^{n}-\frac{\xi_{s}^{n}}{\xi_{s}^{n}}-(\xi^{0}-\xi^{n})$};
\end{tikzpicture}
\end{document}