旧答案

旧答案

我在使用 tikz-timing 正确获取节点位置时遇到了一些问题。我希望双箭头线位于中心脉冲的两侧,而不是从下到上。另外,我想将标签“tw”放置在双箭头线的中心下方。

\documentclass{article}
\usepackage{tikz-timing}
\begin{document}


\begin{tikztimingtable}[timing/slope=.005, yscale=2]
    Comparator Out & 2L  0.8H8.2L 0.8H 11.2L\\
    One-Shot Out & 2L N(A1)  4H N(A2) 5L4H 8L\\
    \extracode
    %\horlines[] {0,1,5}
    \tableheader[]{}{Case3: Two input pulses, far apart}
    \draw [<->] (A1.center) -- (A2.south);
    \node[] at (A1)  {tw};
\end{tikztimingtable}
\end{document}

[1]:https://i.stack.imgur.com/9mS

答案1

中有一些预定义的行锚点tikztimingtable,参见手册中的图 2.1 tikz-timing。你可以使用其中一个mid锚点row2与 TikZ 的坐标规范相结合(a |- b),从而绘制双箭头如下

\draw [<->] (A1|-row2.mid) --node[below]{tw} (A2|-row2.mid);

坐标是一条通过 的垂直线与一条通过 的水平线(A1|-row2.mid)的交点,即它具有前者的 x 坐标和后者的 y 坐标。A1row2.mid

在此处输入图片描述

\documentclass{article}
\usepackage{tikz-timing}
\begin{document}    
\begin{tikztimingtable}[timing/slope=.005, yscale=2]
    Comparator Out & 2L  0.8H8.2L 0.8H 11.2L\\
    One-Shot Out & 2L N(A1)  4H N(A2) 5L4H 8L\\
    \extracode
    %\horlines[] {0,1,5}
    \tableheader[]{}{Case3: Two input pulses, far apart}
    \draw [<->] (A1|-row2.mid) --node[below]{tw} (A2|-row2.mid);
\end{tikztimingtable}
\end{document}

旧答案

我不太熟悉tikz-timing,所以可能有更好的方法,但这里有一个使用calc库来计算脉冲垂直线的中点的方法。

快速解释一下($(A1|-A2)!0.5!(A1)$)($ ... $)加载calc库意味着美元符号之间的是某种计算,如手册中所述。 (A1|-A2)是一个坐标规范,它定义了 x 坐标为A1、y 坐标为 的坐标A2,即脉冲的左上角。最后,语法$(<first coord>)!<fraction>!(<second coord>)$意味着计算的结果是<fraction>从第一个坐标到第二个坐标的坐标。

要将节点放置在线下方,请将其放置在路径中的node[below]{..}紧后面--,如下例所示。

\documentclass{article}
\usepackage{tikz-timing}
\usetikzlibrary{calc}
\begin{document}


\begin{tikztimingtable}[timing/slope=.005, yscale=2]
    Comparator Out & 2L  0.8H8.2L 0.8H 11.2L\\
    One-Shot Out & 2L N(A1)  4H N(A2) 5L4H 8L\\
    \extracode
    %\horlines[] {0,1,5}
    \tableheader[]{}{Case3: Two input pulses, far apart}
    \draw [<->] ($(A1|-A2)!0.5!(A1)$) -- node[below] {tw} ($(A2|-A1)!0.5!(A2)$);
\end{tikztimingtable}
\end{document}

相关内容