Стрелка Tikz не отображается

Стрелка Tikz не отображается

MWE выглядит следующим образом (я использую ConTeXt)

\usemodule[tikz]
\usetikzlibrary{positioning}
\usetikzlibrary{shapes}
\usetikzlibrary{calc}
\tikzset{arrow/.style={-stealth, thick, draw=black!70!white}}
\starttext
\starttikzpicture[ampersand replacement=\&]
% \draw[help lines](0,-5) grid (10,5);  
    \node[rectangle, rounded corners, draw, fill=white!90!black, minimum height=1cm] at (3,0) (S) {SSS};   
    \node[rectangle, rounded corners, draw, fill=white!90!black, minimum height=1cm] at (3,3) (C) {CCC};    
    \node[rectangle, rounded corners, draw, fill=white!90!black, minimum height=1cm] at (6,1.5) (I) {III};    
    \node[rectangle, rounded corners, draw, fill=white!90!black, minimum height=1cm] at (10,1.5) (P) {PPP};
    
    \path[arrow]
    (S) edge (I.south west)
    (C) edge (I.north west)
    (I) edge (P)
    (C) -- (10,3) -|  (P.north)
    (S) -- (10,0) -|  (P.south)
    ;
\stoptikzpicture
\stoptext

Я хочу получить стрелку в конце пути от CCC до PPP (на севере PPP), но она не отображается. Пожалуйста, помогите. Спасибо.

решение1

Стрелки размещаются только на первом и последнем подпутях пути, см.https://tikz.dev/tikz-arrows#sec-16.2.

В вашем примере (C) -- (10,3) -| (P.north)и (S) -- (10,0) -| (P.south)представляют собой два подпутя (разделенных операциями перехода к пути), поэтому стрелка добавляется только к (S) -- (10,0) -| (P.south).

Вместо того чтобы разбивать его на несколько путей, вы можете продолжать использовать edgeфункцию добавления нескольких стрелок к одному пути с некоторыми дополнительными опциями:

(node a) edge[to path={-| (\tikztotarget)}] (node b)

см. ответ @Scz наTikz прямоугольные ребра между узлами | TeX-SX#48397.

Полный адаптированный пример:

  • Стрелки окрашены в тот же цвет, что и линии, при использовании -{Stealth[black!70]}загруженной arrows.metaбиблиотеки.
  • Новые ключи стиля называются to path hvи to path vh, поскольку использование |имени ключа заканчивается ошибками.
    ConTeXt устанавливает catcode| от 12 (другой) до 13 (активный), что, как я понимаю, и является причиной. Никогда не будучи постоянным пользователем ConTeXt, я просто обошел это. Также см.Какие символы необходимо экранировать в ConTeXt? | TeX-SX#48933.
    Обновление: это работает, но теряется выразительность: to path -\|/.style={...}.
% !TeX TS-program = context %.tex
\usemodule[tikz]
\usetikzlibrary{arrows.meta, calc, positioning, shapes}
\tikzset{
  arrow/.style={-{Stealth[black!70]}, thick, draw=black!70},
  % based on https://tex.stackexchange.com/a/250515
  to path hv/.style={to path={-| (\tikztotarget)}},
  to path vh/.style={to path={|- (\tikztotarget)}}
}
\starttext
\starttikzpicture[ampersand replacement=\&]
% \draw[help lines](0,-5) grid (10,5);
    \node[rectangle, rounded corners, draw, fill=white!90!black, minimum height=1cm] at (3,0) (S) {SSS};
    \node[rectangle, rounded corners, draw, fill=white!90!black, minimum height=1cm] at (3,3) (C) {CCC};
    \node[rectangle, rounded corners, draw, fill=white!90!black, minimum height=1cm] at (6,1.5) (I) {III};
    \node[rectangle, rounded corners, draw, fill=white!90!black, minimum height=1cm] at (10,1.5) (P) {PPP};

    \path[arrow]
      (S) edge (I.south west)
      (C) edge (I.north west)
      (I) edge (P)
      (C) edge[to path hv] (P.north)
      (S) edge[to path hv] (P.south)
    ;
\stoptikzpicture
\stoptext

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

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