我正在尝试对齐将输出连接到称为积分器的块的箭头的起点Y
。我希望箭头从块外箭头的中间开始N
(恰好在字母 Y 下方)。我该如何实现?
我希望它像这张图一样:
就像从字母下方开始y
并指向测量块的箭头一样。
这是我编写的代码(这是一个测试文件,因此请忽略所有希腊字母):
\documentclass{article}
\usepackage[LGR]{fontenc} % specific font
\usepackage[utf8]{inputenc} % κωδικοποίηση γραμμάτων για να εμφανίζονται κατανοητά ελληνικά γράμματα
\usepackage[greek]{babel} % πακέτο των ελληνικών γραμμάτων
\usepackage{tikz} % πακέτο για control systems diagram
\usetikzlibrary{shapes,arrows} % πακέτο απαραίτητο για control systems block diagrams
\usepackage{verbatim}
\tikzset{
% pinstyle/.style={pin edge={to-,thin,black}}, % you have another one below
gain/.style = {
regular polygon, regular polygon sides=3,
draw, fill=white, text width=1em,
inner sep=0mm, outer sep=0mm,
shape border rotate=-90
},
}
\begin{document}
% \textlatin --> Χρησιμοποιείται για να εισάγουμε κείμενο με λατινικούς χαρακτήρες στα σημεία που επιθυμούμε.
\textlatin{This is a test file created by Teo Protoulis. What about continuing the document? Where does the paragraph change?}
\section{Εισαγωγή}
Για να δούμε αν αναγνωρίζει και τα ελληνικά γράμματα! Α, πάρα πολύ ωραία! Μπορούμε να γραουμε και στα ελληνικά.
\section{Πρώτο Μέρος}
Στο πρώτο μέρος θα γράψουμε κάποιες συνήθεις διαφορικές εξισώσεις έτσι για να εξασκηθούμε πάνω στο \textlatin{LaTex}:
\[\ddot{y}+a_1\dot{y}+a_2y=b_0u\]
Αυτή είναι η διαφορική εξίσωση που περιγράφει το σύστημα μας. Στη συνέχεια παρατίθεται ο \textlatin{PID} ελεγκτής που χρησιμοποιήθηκε προκειμένου να επιτύχουμε \textlatin{reference tracking}:
\[C(s) = K_p+K_d\frac{Ns}{s+N}+K_i\frac{1}{s}\]
Παρατηρούμε ότι το μονοπάτι της παραγώγου σχεδιάστηκε χρησιμοποιώντας την παρακάτω λογική:
\bigskip % intentionally leave empty line
\bigskip
\begin{center}
\tikzstyle{block} = [draw, rectangle,
minimum height=3em, minimum width=6em]
\tikzstyle{sum} = [draw, circle, node distance=1cm]
\tikzstyle{input} = [coordinate]
\tikzstyle{output} = [coordinate]
\tikzstyle{pinstyle} = [pin edge={to-,thin,black}]
\begin{tikzpicture}[auto, node distance=2cm,>=latex']
\node [input,name=e] {};
\node [block,name=derivative gain,right of=e] {\latintext{Derivative Gain}};
\node [input,name=input,right of=derivative gain,node distance=1.5cm] {};
\node [sum,right of=input] (sum) {};
\node [block,right of=sum,node distance=3cm, name=static gain] (static gain) {N};
\node [block, below of=static gain, name=integrator] (integrator) {\latintext{Integrator}};
\node [output,right of=static gain,node distance=3cm] (output) {};
\draw [->] (e) -- node {$e$} (derivative gain);
\draw [->] (derivative gain) |- node[pos=0.89] {$+$} node [near end] {} (sum);
\draw [->] (static gain) -- node [name=y] {$Y$} (output);
\draw [->] (sum) -- node [name=error] {$error$} (static gain);
\draw [->] (output) |- (integrator);
\draw [->] (integrator) -| node[pos=0.95] {$-$}
node [near end] {} (sum);
\end{tikzpicture}
\end{center}
\end{document}
答案1
您并使用
\draw [->] (y|-output) |- (integrator);
其中(y|-output)
是 x 坐标为y
、 y 坐标为 的点output
。
这是完整的代码,其中包含几处离题的更改(无\tikzstyle
、使用positioning
、替换arrows
等arrows.meta
)
\documentclass{article}
\usepackage[greek]{babel}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric,arrows.meta,positioning}
\begin{document}
\begin{center}
\tikzset{block/.style={draw, rectangle,
minimum height=3em, minimum width=6em},
sum/.style={draw, circle, node distance=1cm},
input/.style={coordinate},
output/.style={coordinate},
pinstyle/.style={pin edge={to-,thin,black}},}
\begin{tikzpicture}[auto, node distance=1.2cm,>=Latex]
\node [input,name=e] {};
\node [block,name=derivative gain,right=of e] {\latintext{Derivative Gain}};
\node [sum,right=2cm of derivative gain] (sum) {};
\node [block,right=of sum,node distance=3cm, name=static gain] (static gain) {N};
\node [block, below=of static gain, name=integrator] (integrator) {\latintext{Integrator}};
\node [output,right=of static gain,node distance=3cm] (output) {};
\draw [->] (e) -- node {$e$} (derivative gain);
\draw [->] (derivative gain) |- node[pos=0.89] {$+$} node [near end] {} (sum);
\draw [->] (static gain) -- node [name=y] {$Y$} (output);
\draw [->] (y|-output) |- (integrator);
\draw [->] (sum) -- node [name=error] {\latintext{error}} (static gain);
\draw [->] (integrator) -| node[pos=0.95] {$-$}
node [near end] {} (sum);
\end{tikzpicture}
\end{center}
\end{document}
答案2
通过使用附加的 TikZ 库chains
和quotes
,字母 Y 处的坐标“由节点名称确定:
\documentclass{article}
\usepackage[greek]{babel}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,
chains,
positioning,
quotes}
\begin{document}
\begin{center}
\begin{tikzpicture}[auto,
node distance = 6mm and 12mm,
start chain = going right,
arr/.style = {-Latex},
block/.style = {draw, minimum height=3em, minimum width=6em},
sum/.style = {circle, draw, node contents={}},
]
\begin{scope}[nodes={on chain, join=by arr}]
\coordinate (in);
\node (n1) [block] {\latintext{Derivative Gain}};
\node (n2) [sum];
\node (n3) [block] {$N$};
\coordinate (out);
\end{scope}
\node (n4) [block, below=of n3] {\latintext{Integrator}};
%
\path (in) to ["$e$"] (n1)
(n1) to [pos=0.85,"$+$"] (n2)
(n2) to ["\latintext{error}"] (n3)
(n3) to ["$Y$"{name=y}] (out);
\draw[arr] (n3.north) ++ (0,1) node[above] {\latintext{Integrator}} -- (n3);
\draw[arr] (y) |- (n4);
\draw[arr] (n4) -| (n2) node[pos=0.95] {$-$};
\end{tikzpicture}
\end{center}
\end{document}