我正在尝试在 latex 中创建下图:
以下是我的乳胶代码-
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric, arrows}
\begin{document}
\tikzset{
box/.style = {draw, rectangle, minimum height = 2.5em, minimum width = 2.5em},
circl/.style = {draw, circle,minimum size = 8mm},
input/.style = {coordinate},
output/.style = {coordinate},
to/.style = {->,>=stealth',shorten >=1pt,semithick,font=\sffamily\footnotesize}
}
\begin{tikzpicture}[auto, node distance=2cm]
\node (in1) [input] {};
\node (cs) [box, right of=in1] {$C$};
\node (crc1) [circl, right of=cs]{};
\node (gs) [box, right of=crc1] {$G$};
\node (hs) [box, right of=gs] {$H$};
\node (ctl) [box, below of=hs] {Limiter};
\node (crc2) [circl, right of=hs]{};
\node (ze) [input, above of=crc2] {};
\node (ke) [box, right of=crc2] {$K$};
\node (fs) [output, right of=ke] {};
\draw [to] (in1) -- node {$f$}(cs);
\draw [to] (cs) -- (crc1);
\draw [to] (crc1) --(gs);
\draw [to] (gs) -- (hs);
\draw [to] (hs) -- node {$I_{max}$}(ctl);
\draw [to] (ctl) --node {$\theta$}(hs);
\draw [to] (hs) -- node {$z$}(crc2);
\draw [to] (ze) -- node {$C$}(crc2);
\draw [to] (crc2) --(ke);
\draw [to] (ke) -- node {$f(s)$}(fs);
\end{tikzpicture}
\end{document}
我无法从两个框中绘制底线和两个相反方向的箭头,这在上图中标记为红色。以下是 latex 生成的-
答案1
尝试这个
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric, arrows}
\begin{document}
\tikzset{
box/.style = {draw, rectangle, minimum height = 2.5em, minimum width = 2.5em},
circl/.style = {draw, circle,minimum size = 8mm},
input/.style = {coordinate},
output/.style = {coordinate},
to/.style = {->,>=stealth',shorten >=1pt,semithick,font=\sffamily\footnotesize}
}
\begin{tikzpicture}[auto, node distance=2cm]
\node (in1) [input] {};
\node (cs) [box, right of=in1] {$C$};
\node (crc1) [circl, right of=cs]{};
\node (gs) [box, right of=crc1] {$G$};
\node (hs) [box, right of=gs] {$H$};
\node (ctl) [box, below of=hs] {Limiter};
\node (crc2) [circl, right of=hs]{};
\node (ze) [input, above of=crc2] {};
\node (ke) [box, right of=crc2] {$K$};
\node (fs) [output, right of=ke] {};
\draw [to] (in1) -- node {$f$}(cs);
\draw [to] (cs) -- node[below left,pos=1]{+}(crc1) ; % 1st modif
\draw [to] (crc1) --(gs);
\draw [to] (gs) -- (hs);
\draw [to] (hs.-70) -- node {$I_{max}$}(ctl.north-|hs.-70); % 2st modif
\draw [to] (ctl.north-|hs.-110) --node {$\theta$}(hs.-110); % 3st modif
\draw [to] (hs) -- node {$z$}(crc2);
\draw [to] (ze) -- node {$C$}(crc2);
\draw [to] (crc2) --(ke);
\draw [to] (ke) -- node {$f(s)$}(fs)coordinate[pos=0.5](aa); % 4 modif
\coordinate[below of =ctl,node distance=2em] (bb);
\draw[to] (aa) |- (bb) -| (crc1);
\end{tikzpicture}
\end{document}
您还可以尝试以下软件包:http://www.ctan.org/pkg/schemabloc 也在这里http://sciences-indus-cpge.papanicola.info/Schema-blocs-avec-PGF-TIKZ-sous
答案2
第一个问题:底线。
可以用如下代码来绘制:
\draw[to] ($(ke)!.5!(fs)$) -- +(0,-3cm) -| (crc1);
让我解释一下:
($(ke)!.5!(fs)$)
用途插值坐标且要求。它指定坐标和之间的\usetikzlibrary{calc}
中间点(部分) 。.5
(ke)
(fs)
--
指定到下一个坐标的线,即+(0,-3cm)
,这里+
前面的表示这个坐标是相对于上一个坐标的,所以指定了上一个坐标下方3cm的一个点。-|
指定两条线,第一条线为水平线(从之前指定的点开始),第二条线为垂直线(结束于下一个坐标,即(crc1)
。
第二个问题:相反方向的箭头
每个节点都提供了“角度”锚点,这在这里很有用。语法(nodename.angle)
表示一个锚点位于节点的边缘nodename
,并且距离angle
其中心。因此,例如(node.90)
与相同(node.north)
。
您可以使用这些特殊锚点作为箭头的起点,例如,由于标有“限制器”的框是名为的节点(ctl)
,因此您可以使用(ctl.70)
和(ctl.110)
作为这些线的锚点。
但是,您需要这些线是垂直的,因此我们有一个指定其最终坐标的问题。一旦您知道 tikz 允许语法作为坐标,表示放置在相同垂直和相同水平位置(a|-b)
的坐标就很容易了。(a)
(b)
使用这个想法,从 开始的线(ctl.70)
应该在 结束(ctl.70|-hs.south)
,从 开始的线(ctl.110)
应该在 结束(ctl.110|-hs.south)
,因此以下代码绘制了所需的箭头:
\draw [to] (ctl.70) -- node[right] {$I_{max}$} (ctl.70|-hs.south);
\draw [to] (ctl.110|-hs.south) --node[left] {$\theta$} (ctl.110);
得到的结果是: