ノードから水平線に達するまで垂直線を描きます

ノードから水平線に達するまで垂直線を描きます

このコードを検討してください

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning,intersections}

\begin{document}
    \begin{tikzpicture}[node distance=-\pgflinewidth]   
        \node[fill=black] (a) {};
        \node[fill=black, xshift=\linewidth] (c) {};
        \node[xshift=\linewidth*0.7] (b) {...};

        \draw [name path=line1] (a) -- (b);
        \draw (b) -- (c);

        \node[draw, rectangle, above=of a, yshift=0.5cm, xshift=1cm] (foo1) {Foo 1};
        \node[draw, rectangle, right=0.5cm of foo1] (foo2) {Foo 2};

        \draw (foo1) -- TODO;
        \draw (foo2) -- TODO;
    \end{tikzpicture}

\end{document}

ノード foo1 と foo2 から下向きにパス line1 まで垂直の直線を描くことができません。絶対座標は指定しません。交差点でこの問題を解決しようとしましたが、開始位置がノードであるため、うまくいかないようです。何か提案はありますか?

答え1

このような?

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning,intersections}

\begin{document}
    \begin{tikzpicture}[node distance=-\pgflinewidth]   
        \node[fill=black] (a) {};
        \node[fill=black, xshift=\linewidth] (c) {};
        \node[xshift=\linewidth*0.7] (b) {...};

        \draw [name path=line1] (a) -- (b);
        \draw (b) -- (c);

      \node[draw, rectangle, above=of a, yshift=0.5cm, xshift=1cm] (foo1) {Foo 1};
        \node[draw, rectangle, right=0.5cm of foo1] (foo2) {Foo 2};

\path[name path=fl1] (foo1.270)coordinate(f1)--++(-90:2);
\path[name path=fl2] (foo2.270)coordinate(f2)--++(-90:2);
\path[name intersections={of=fl1 and line1,by={a}}];
\path[name intersections={of=fl2 and line1,by={b}}];
\draw (f1)--(a);
\draw (f2)--(b);

%        \draw (foo1) -- TODO;
   %     \draw (foo2) -- TODO;
    \end{tikzpicture}

\end{document}

ここに画像の説明を入力してください

答え2

TikZ を使用すると、構文または構文 の両方を使用して、 を通る水平線aと の垂直線の交点にある点を見つけることができます。foo1(foo1|-a)(a-|foo1)

TikZ 3.1.4のマニュアルを引用します

一般的に、(p |- q)垂直線pと水平線の交点q

スクリーンショット

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning,intersections}

\begin{document}
    \begin{tikzpicture}[node distance=-\pgflinewidth]   
        \node[fill=black] (a) {};
        \node[fill=black, xshift=\linewidth] (c) {};
        \node[xshift=\linewidth*0.7] (b) {...};

        \draw [name path=line1] (a) -- (b);
        \draw (b) -- (c);

        \node[draw, rectangle, above=of a, yshift=0.5cm, xshift=1cm] (foo1) {Foo 1};
        \node[draw, rectangle, right=0.5cm of foo1] (foo2) {Foo 2};

        \draw (foo1) -- (a-|foo1);
        \draw (foo2) -- (a-|foo2);
    \end{tikzpicture}
\end{document}

関連情報