绘制带有箭头数字的“总线宽度”标记

绘制带有箭头数字的“总线宽度”标记

我正在尝试绘制带有 / 标记和数字的箭头,如下图所示:

带有 / 标记的箭头的屏幕截图

我当前的解决方案如下:

\begin{tikzpicture}
    [
        inverter/.style={rectangle,draw,inner sep=2pt,minimum size=6mm},
        dot/.style={circle,inner sep=0pt,minimum size=0.5mm,draw,fill=black}
    ]
    \node (x) at (0,0) {$x$};
    \node (delta) at (1,0) [shape=rectangle,draw,minimum height=18mm,minimum width=6mm] {$\delta$};

    \node(ah)     at ( 2,  0.5) [inverter] {$a_h$};
    \node(al)     at ( 2, -0.5) [inverter] {$a_l$};

    \draw [->] (x) -- (delta);

    \draw [->,dashed,dash pattern=on 1pt off 1pt] (delta.58.75) -- (ah);
    \node at ($ (ah) - (0.55, 0) $) {\scriptsize /};
    \node at ($ (ah) - (0.5, 0.2) $) {\tiny 4};
    \draw [->,dashed,dash pattern=on 1pt off 1pt] (delta.-58.75) -- (al);
    \node at ($ (al) - (0.55, 0) $) {\scriptsize /};
    \node at ($ (al) - (0.5, 0.2) $) {\tiny 4};
\end{tikzpicture}

这很不雅观,而且看起来也不好看。我尝试删除图形,但发现线条太长了。但是,手动定位 / 和数字对我来说似乎是一个非常糟糕的解决方案。我见过类似的问题,它围绕着删除线条或箭头,但没有任何编号。任何意见都欢迎。

答案1

作为敲击在他的评论中提到,可以使用装饰来添加斜线(在本例中,使用decorations.markings库);数字可以作为参数包含在内:

\draw [buswidth=X] (<coord1>) -- (<coord2>);

在标记中结合斜线和数字的优点是可以在多段路径上保持一致的定位,(<coord1>) -| (<coord2>)并且更加方便。如果要设置数字的样式,请将样式更改为style 2 args

完整示例,并按照建议敲击,使用垂直坐标系,保证虚线箭头是水平的。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc,decorations.markings}

\begin{document}

\begin{tikzpicture}[
inverter/.style={rectangle,draw,inner sep=2pt,minimum size=6mm},
dot/.style={circle,inner sep=0pt,minimum size=0.5mm,draw,fill=black},
buswidth/.style={decoration={
  markings,
  mark= at position 0.5 with {\node[font=\footnotesize] {/};\node[below=1pt] {\tiny #1};}
  }, postaction={decorate}}
]
\node (x) at (0,0) {$x$};
\node (delta) at (1,0) [shape=rectangle,draw,minimum height=18mm,minimum width=6mm] {$\delta$};
\node (ah)  at ( 2,  0.5) [inverter] {$a_h$};
\node (al)   at ( 2, -0.5) [inverter] {$a_l$};

\draw [->] (x) -- (delta);
\draw [->,dashed,dash pattern=on 1pt off 1pt,buswidth={4}] (delta.east|-ah) -- (ah);
\draw [->,dashed,dash pattern=on 1pt off 1pt,buswidth={4}] (delta.east|-al) -- (al);
\end{tikzpicture}
 
\end{document}

在此处输入图片描述

答案2

\BusWidth包中实际上有一个符号milstd。下面可以给出它如何在您的应用程序中使用。我不知道 tikz,或者我会加粗虚线以匹配缩放的粗细\BusWidth

45 度倾斜的好处在于它也可以用于垂直电线。当然,在这种情况下,您需要将总线宽度放在一边。有人问过类似的问题tikz 电路库的 Bussymbol

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{milstd}
\usepackage{stackengine}
\newcommand\Bussymbol[1]{%
  \raisebox{-1.1em}{\scalebox{.7}{\stackunder{\BusWidth}{#1}}}%
}
\begin{document}

\begin{tikzpicture}
    [
        inverter/.style={rectangle,draw,inner sep=2pt,minimum size=6mm},
        dot/.style={circle,inner sep=0pt,minimum size=0.5mm,draw,fill=black}
    ]
    \node (x) at (0,0) {$x$};
    \node (delta) at (1,0) [shape=rectangle,draw,minimum height=18mm,minimum width=6mm] {$\delta$};

    \node(ah)     at ( 2,  0.5) [inverter] {$a_h$};
    \node(al)     at ( 2, -0.5) [inverter] {$a_l$};

    \draw [->] (x) -- (delta);

    \draw [->,dashed,dash pattern=on 1pt off 1pt] (delta.58.75) -- (ah);
    \node at ($ (ah) - (0.55, 0) $) {\Bussymbol{4}};
    \draw [->,dashed,dash pattern=on 1pt off 1pt] (delta.-58.75) -- (al);
    \node at ($ (al) - (0.55, 0) $) {\Bussymbol{4}};
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案3

我最近正好需要这个。以下是我使用的:

  \newcommand{\buswidth}[4][]{\draw (#2) node [#4=.6ex,#1] {#3} +(45:-.8ex) -- +(45:.8ex)}

  % usage:  \buswidth{<coordinate>}{<label>}{<left|right>};
  % Example:
  \buswidth{p1}{$x$}{left}

它并不是很通用,但可以根据您的喜好轻松进行调整。

相关内容