以下是针对我的问题发布的代码如何在 tikz 环境中绘制的框图中显示路径增益?
它给了我想要的输出。但我的问题是我不理解序言中的语句集。我想了解每个语句的用法,以便我可以为未来的工作定义自己的 tikzset。有人能帮我理解这些吗?我将不胜感激。
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{arrows, decorations.markings, positioning}
\newcommand\ppbb{path picture bounding box}
\tikzset{
shorten <>/.style = {shorten >=#1, shorten <=#1},
dot/.style = {circle, fill=black,
inner sep=0mm, outer sep=0mm, minimum size=1mm,
node contents={}},
gain/.style = {decoration={markings, mark= at position 0.5
with {\arrow[ultra thick]{stealth};
\node[above] {#1};}
},
postaction={decorate}},
sum/.style = {circle, draw=black, fill=white, minimum size=6mm,
path picture={\draw[very thick,shorten <>=1mm,-]
(\ppbb.north) edge (\ppbb.south)
(\ppbb.west) -- (\ppbb.east);
},% end of node contents
node contents={}},
delay/.style = {draw=black, fill=white, minimum size=12mm,
node contents={D}},
}
\begin{document}
\begin{frame}
\frametitle{MWE}
\begin{center}
\begin{tikzpicture}[
node distance = 1 cm and 2cm
]
\node (b1) {$x[n]$};
\node (s1) [sum,right=of b1];
\node (s2) [dot,right=of s1];
\node (b3) [right=of s2] {$y[n]$};
\node (d1) [delay,below=of s2];
% lines
\draw [gain=$b$,->] (b1) -- (s1);
\draw [->] (s1) edge (b3)
(s2) -- (d1);
\draw [->] (d1.south) -- ++ (0,-1) coordinate (c1)
(c1 -| s1) -- (s1);
\draw [gain=$\alpha$] (c1) -- (c1 -| s1);
\end{tikzpicture}
\end{center}
\end{frame}
\end{document}
该 MWE 给出:
对于上图,我没有考虑线条粗细。您可以轻松更改。
答案1
对一些命令/宏的含义的基本解释 我的答案我已经添加了答案,所以在这里我或多或少地重复它们。
在图中使用预定义的节点形状。其定义使用 `\tikzset{ ...},但它们也可以局部定义为
\begin{tikzpicture}[
presets of used graph elements
]
< graph content >
\end{tikzpicture}
也\tikzset
可以给定名称,例如`\tikzset{mygraphs/.style = {<styles definitions>}},然后在特定的 TikZ 图片中使用:
\begin{tikzipicture}[mygraphs]
< graph content >
\end{tikzpicture}
样式预定义了图形元素,如dot
、gain
和。大多数定义都很简单,summation
但delay
有些定义比较复杂。在所有具有固定内容的节点中,此内容已写入节点样式定义中。为此利用选项node content={...}
。此节点的用途如下:
\node[dot, right=of <node name>];
更复杂的是向节点形状添加一些绘图。为此,使用边界框锚点作为坐标。它们定义为
(path picture bounding box.<which one>)
为了更短的书写,这些坐标定义为新命令
\newcommand\ppbb{path picture bounding box}
可以通过以下方式访问坐标:
\draw[very thick,shorten <>=1mm,-]
(\ppbb.west) -- (\ppbb.east);
添加的图纸应该可以path picture={...}
在代码中看到。
遵循已经给出的解释的副本我的答案回答你之前的问题。
宏
shorten <= <length>
和缩短>=length>
正如其名称所示:分别在行的开头或结尾使行更短(如果长度为正数)或更长(如果长度为负数)。样式
shorten <>
定义是为了使代码更短/简洁。当然,它也可以用于图形中,其中线条必须更短,但起点和终点的长度相同。与
\node (b1) {$x[n]$};
相同\node (b1) at (0,0) {$x[n]$};
,即它位于坐标 (0,0)。图中所有其他节点都使用 TikZ 库定位到相对于它的位置,该库通过 按照预定义的节点间距离进行定位node distance=<vertical length> and horizontal length>
,例如在 MWE 中使用node distance = 1 cm and 2cm
。
希望有人能给出更好的解释。最后,当我不知道如何解决使用(漂亮、强大且复杂的)TikZ 包进行绘图时遇到的某些特定问题时,我会一遍又一遍地阅读其手册……如果这对我没有帮助,我会在这里(TeX. SE)寻求帮助 :-)。这里有很多 TikZ 大师!在网上你还可以找到一些 TikZ 的简短介绍。
从代码中您还可以观察到一种方法,如何使用准备好的形状系统绘制类似的图形。
附录: 当功能块内部形状具有不同的文本时,您有两种方式来定义它们的样式:
作为标准节点,其内容以花括号括起来,例如:˛
\node[<style name>] at (coordinate) {<text in node shape>};
或者用可选参数定义它,例如对于节点
delay
:delay/.style = {draw=black, fill=white, minimum size=12mm, node contents={#1}}
delay/.default = D
在这种情况下,当节点内容为“D”时,使用此样式作为
\node (<name>) [delay];
当内容不同(不是默认)时,例如:
\node (<name>) [delay=$D_1$];