Блок-схема TikZ с несколькими стрелками не из центра блока

Блок-схема TikZ с несколькими стрелками не из центра блока

Я пытаюсь создать довольно простую диаграмму, но не знаю, как сделать так, чтобы несколько стрелок слева не выходили из центра узла.

Блок-схема, которую я хотел бы создать

решение1

Два варианта: с использованием якорей и некоторых сдвигов, а также с использованием синтаксиса <name>.<angle >:

\documentclass{article}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
\node[draw,minimum size=2cm] (x) {X};
\draw[->] ([yshift=-10pt]x.west) -- node[fill=white] {a} +(-1cm,0pt);
\draw[->] ([yshift=10pt]x.west) -- node[fill=white] {b} +(-1cm,0pt);
\draw[->] (x.120) -- node[fill=white] {c} +(0pt,1cm);
\draw[->] (x.60) -- node[fill=white] {d} +(0pt,1cm);
\end{tikzpicture}

\end{document}

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

КакКлаудио Фиандриноупомянул вего комментарий, другой вариант — использовать calcбиблиотеку, поэтому сдвиги не абсолютны, а могут быть рассчитаны в терминах якорей:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}

\begin{tikzpicture}
\node[draw,minimum size=2cm] (x) {X};
\draw[->] ([yshift=-10pt]x.west) -- node[fill=white] {a} +(-1cm,0pt);
\draw[->] ([yshift=10pt]x.west) -- node[fill=white] {b} +(-1cm,0pt);
\draw[->] (x.120) -- node[fill=white] {c} +(0pt,1cm);
\draw[->] (x.60) -- node[fill=white] {d} +(0pt,1cm);
\draw[->]
  ( $ (x.north east)!0.5!(x.east) $ ) -- 
    node[fill=white] {e} 
  +(1cm,0pt);
\draw[->] 
  ( $ (x.east)!0.5!(x.south east) $ ) -- 
    node[fill=white] {f} 
    +(1cm,0pt);
\end{tikzpicture}

\end{document}

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

В приведенном выше примере ( $ (x.north east)!0.5!(x.east) $ )означает точку, координаты которой находятся посередине между x.north eastи x.east.

решение2

Решение PSTricks:

\documentclass{article}

\usepackage{pstricks-add}
\usepackage{xfp}

\newcommand*\Width{\fpeval{2*\arrowLength+\boxLength}}
\newcommand*\Height{\boxLength}

\def\arrowLength{3}
\def\boxLength{3}


\begin{document}

\begin{pspicture}(\Width,\Height)
 \psset{arrows = ->}
  \psframe(\arrowLength,0)(\fpeval{\arrowLength+\boxLength},\boxLength)
  \rput(\fpeval{\arrowLength+0.5*\boxLength},\fpeval{0.5*\boxLength}){X}
  \pcline(\arrowLength,\fpeval{\boxLength/3})(0,\fpeval{\boxLength/3})
  \ncput*{a}
  \pcline(\arrowLength,\fpeval{2/3*\boxLength})(0,\fpeval{2/3*\boxLength})
  \ncput*{b}
  \pcline(\fpeval{2*\arrowLength+\boxLength},\fpeval{0.5*\boxLength})%
         (\fpeval{\arrowLength+\boxLength},\fpeval{0.5*\boxLength})
  \ncput*{c}
\end{pspicture}

\end{document}

выход

Обратите внимание, что рисование «автоматизировано», и все, что вам нужно сделать, это выбрать значения \arrowLengthи \boxLength.

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