如何画一条与正方形边平行的直线?

如何画一条与正方形边平行的直线?

我想画一条直线,离开正方形 D 的左下方端点。

我的代码如下

\documentclass{report}
\usepackage{tikz}
\begin{document}
\begin{figure}
    \begin{tikzpicture}[node distance=4cm]
        \usetikzlibrary{shapes}
        \node[regular polygon,regular polygon sides=4,scale=3,dashed,draw](D) {$D$};
        \node[draw, right of=D,yshift=1cm, node distance=6cm](G){G};
        \node[right of=D, yshift=1cm, node distance =3.5cm] (ygets) {$y \gets U_{2n}$};
        \node[right of=D, yshift=-1.22cm, node distance=2.5cm](vazio){};
        \node[above of=G, node distance=1cm] (k) {$k \gets U_n$};


        \path[draw,->] (G.south) |- (D.east);
        \path[draw,->] (k.south) -- (G.north);
        \path[draw,->] (ygets.south) |- node[near end, above]{$y$} (D.east);
        \path[draw,->] (D.south east) -- node[above] {b} (vazio);

    \end{tikzpicture}
\end{figure}
\end{document}

得出的结果是

带字母 b 的箭头应为直线

关于如何做到这一点有什么提示或技巧吗?

答案1

你有两种方法:

\draw[->] (D.south east) -- ++(2,0) node[above,midway] {b};

这个从 开始D.south east,水平方向进行2(或任何你想要的数字,它也会采取措施,比如1cm)并0垂直进行,所以它向右移动。然后你有

\draw[->] (D.south east) -- (D.south east-|k);

这个命令从同一点开始,一直到节点k,但仍然是水平移动,然后停止。您决定采用哪种解决方案取决于具体情况。顺便说一句,写成\draw而不是\path[draw]更简单,第一个命令实际上是第二个命令的简短版本。

答案2

还有其他方法:

而不是您现有的定义vazio,而是将其定义为

\coordinate[right=1.5cm of D.south east] (vazio);

该语法right=<len> of ...需要positioning库,因此您必须将其添加\usetikzlibrary{positioning}到序言中。请注意,right=of建议使用 而不是right of=,请参阅PGF/TikZ 中“right of=”和“right=of”之间的区别

一个稍微复杂一点的方法,如果D旋转了也能工作,就是加载calc库,然后说

\draw[->] (D.south east) -- node[above] {b} ($(D.south west)!1.6!(D.south east)$);

1.6可以调整为有用的值。坐标($(D.south west)!1.6!(D.south east)$)是 下角两角连线上的点,D该点距离 是两角间距离的 1.6 倍D.south west

下面是输出和完整代码。此处添加了两种替代方案,因此图像中有两个箭头。

在此处输入图片描述

\documentclass{report}
\usepackage{tikz}
\usetikzlibrary{positioning,calc}
\begin{document}
\begin{figure}
    \begin{tikzpicture}[node distance=4cm]
        \usetikzlibrary{shapes}
        \node[regular polygon,regular polygon sides=4,scale=3,dashed,draw](D) {$D$};
        \node[draw, right of=D,yshift=1cm, node distance=6cm](G){G};
        \node[right of=D, yshift=1cm, node distance =3.5cm] (ygets) {$y \gets U_{2n}$};
        % option 1
        \coordinate[right=1.5cm of D.south east] (vazio);

        \node[above of=G, node distance=1cm] (k) {$k \gets U_n$};


        \draw[->] (G.south) |- (D.east);
        \draw[->] (k.south) -- (G.north);
        \draw[->] (ygets.south) |- node[near end, above]{$y$} (D.east);
        \draw[->] (D.south east) -- node[above] {b1} (vazio);

        % option 2
        \draw[->] (D.south east) -- node[below] {b2} ($(D.south west)!1.6!(D.south east)$);
    \end{tikzpicture}
\end{figure}
\end{document}

相关内容