РЕДАКТИРОВАТЬ

РЕДАКТИРОВАТЬ

Я думаю, это был бы хороший вопрос, как перенести настроенную блок-схему (вашу собственную) из MS Word в LaTeX. Ну, я прикрепил файл World и пытаюсь преобразовать его в LaTeX. Сохранить как "тип" LaTeX не сработало, и сгенерировало бессмысленный PDF. Так какой же способ будет лучшим?

введите описание изображения здесь

Я не знаю, как прикрепить здесь текстовый файл, поэтому прикреплю его снимок.

Один из способов — перепечатать это в LaTeX, но я не чувствую уверенности, чтобы сделать это (чувствую трудности с этими стрелками). Очевидно, когда я переношу это как рисунок в исходный файл LaTeX, шрифты не совпадают с другими вещами в документе. Поэтому я хочу преобразовать это (как самый простой способ, возможно)

решение1

Ответ Аланаработает нормально, но с текущей версией Forest нет необходимости определять edge pathс нуля. Вместо этого мы можем использовать edgesбиблиотеку с опцией forked edges. Более того, мы можем исключить , growth parent anchor=eastтак как он ничего не делает (даже в старой версии Forest), и мы можем использовать якоря parentи childrenвместо eastи , westчтобы сделать код более гибким.

parent anchor=children,
child anchor=parent,
forked edges,
edge={->,>=latex},

На самом деле, grow=eastэтого достаточно, поэтому мы можем вообще отказаться parent anchorот спецификаций.child anchor

Это дает нам следующий код для того же вывода, который Алан показал в своем ответе.

\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}

Однако при более близком рассмотрении строки могли бы быть и лучше:

изогнутая стрелка

Определение по умолчанию forked edges:

  forked edges/.style={
    for tree={parent anchor=children},
    for descendants={child anchor=parent,forked edge}
  },

Итак, давайте попробуем переопределить его так, чтобы он forked edgeиспользовался только в том случае, если у узла более одного дочернего элемента, добавив следующее переопределение:

\forestset{
  forked edges/.style={
    for tree={parent anchor=children},
    for descendants={
      child anchor=parent,
      if={n_children("!u")==1}{}{
        forked edge
      },
    }
  },
}

Это лучше:

менее извращенный

Однако стрелка все еще наклонена - она ​​не совсем горизонтальна. Что нам нужно сделать, так это определить альтернативу edge pathдля случая, когда есть ровно один ребенок.

Ребро по умолчанию рисуется от родительского якоря родительского узла (!u.parent anchor)к дочернему якорю дочернего узла (.child anchor). Мы бы хотели, чтобы начало стрелки было горизонтально выровнено с (.child anchor). (Вместо этого мы могли бы выровнять конечную точку с родительским якорем родителя, конечно.)

\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,
      },
    }
  },
}

Это дает нам нужную горизонтальную стрелку:

неперекрученная стрелка

Однако это может быть не лучшим решением. Если родительские и дочерние узлы слишком отличаются по размеру, мы можем получить странное выравнивание. Так что, возможно, нам следует вместо этого сказать Forest выровнять дочерний узел с родителем, чтобы дочерний якорь дочернего узла совпадал с родительским якорем родителя.

\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,
      },
    }
  },
}

делает свое дело.

На данный момент результат выглядит так:

временное дерево

Это лучше, но было бы неплохо, если бы мы могли выровнять среднего потомка с родителем, когда у родителя нечетное количество потомков. Например, если бы Dребро было выровнено с линией, проведенной из корневого узла.

Это немного сложнее, но не намного. Мы можем calign=child edgeснова использовать этот трюк и сделать среднего ребенка «первичным» ребенком его родителя.

Мы можем добавить это в преамбулу в начале нашей forestсреды:

\begin{forest}
  for tree={
    ...
    if={isodd(n_children())}{
      calign primary child/.pgfmath={(n_children()+1)/2},
      calign=child edge,
    }{},
  },

Фактически, поскольку любой узел с ровно 1 потомком имеет нечетное число потомков, мы также можем отказаться от переопределения, forked edgesпоскольку теперь мы в любом случае получим прямую стрелку:

окончательное дерево

\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}

Бесстыдно крадет греческий код изМарко:

\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}

больше дерева

РЕДАКТИРОВАТЬ

Ваш код создает «пробелы», поскольку [[<something>]]создает пустой узел, а затем узел с [<something>]. Чтобы исключить пустой узел, просто скажите [<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}

меньше пробелов

Обратите внимание, что в версии 1 выделатьнужно указать parent anchor=east, child anchor=westи для изменения edge path. Нет forked edges. Кроме того, нелегко устранить перегиб, когда есть только один потомок, потому что calign=child edgeглючит в версиях до 2.01. Вы все равно можете это сделать, но будет гораздо проще обновить, чем обойти ошибку. Это не проблема, если у вашего дерева нет единственных потомков, но если у вас есть другие деревья, это может быть проблемой. Также нелегко выровнять края по аналогичным причинам. Вам нужно будет что-то сделать с , чтобы это заработало edge path.

С другой стороны, с помощью текущего пакета ваше дерево можно легко изменить так, чтобы оно выглядело следующим образом, и код также станет проще:

выровненное дерево

\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}

решение2

Это не очень сложно сделать с помощью forest. Следующий пример должен помочь вам начать.

\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}

вывод кода

решение3

Подумайте, что это совсем не правильный подход, но я не эксперт и это единственный известный мне способ.

\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}

введите описание изображения здесь

Связанный контент