需要帮助来理解 tikz 代码吗?

需要帮助来理解 tikz 代码吗?

以下是针对我的问题发布的代码如何在 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}

样式预定义了图形元素,如dotgain和。大多数定义都很简单,summationdelay有些定义比较复杂。在所有具有固定内容的节点中,此内容已写入节点样式定义中。为此利用选项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$];

相关内容