我很高兴使用 Circuitikz 来绘制我的人字拖。但是,我在连接人字拖底部的低电平有效气泡时遇到了麻烦。
据我所知,人字拖的底部有两个锚点:down 和 bdown。它们都不在气泡底部,而气泡底部正是您自然想要连接的地方。我想出了一个丑陋的破解方法,但一定有一个“正确”的方法。
以下是 MWE:
\documentclass[tikz]{standalone}
\usepackage{tikz}
\usepackage[RPvoltages]{circuitikz}
\tikzset{flipflop DQ/.style={flipflop, scale=.7,
flipflop def={t1=D, t6=Q, c3=1,
clock wedge size=.3, font=\normalsize}
}}
\tikzset{flipflop DQBR/.style={flipflop, scale=.7, % Has D, Q, QBar and Reset
flipflop def={t1=D, t6=Q, c3=1, t4=\ctikztextnot{Q}, n4=1, nd=1,
clock wedge size=.3, font=\normalsize},
}}
\tikzset{flipflop DQBP/.style={flipflop, scale=.7, % Has D, Q, QBar and Preset
flipflop def={t1=D, t6=Q, c3=1, t4=\ctikztextnot{Q}, n4=1, nu=1,
clock wedge size=.3, font=\normalsize}
}}
\begin{document}
\begin{circuitikz}
%\draw[help lines] (-10,-3) grid (5,10);
\node[flipflop DQBR] (ff0) at (0,3) {};
\node[flipflop DQBR] (ff1) at (3,3) {};
\node[flipflop DQBR] (ff2) at (6,3) {};
\node[flipflop DQBP] (ff3) at (0,0) {};
\node[flipflop DQ] (ff4) at (3,0) {};
\node[flipflop DQ] (ff5) at (6,0) {};
\draw (ff0.bdown) -- (ff3.up); % Line overwrites bubble
\draw (ff1.down) -- (ff4.up);
\draw (ff2-Nd.south) -- (ff5.bup); % Ugly-ness to get line not to
%draw over top of the bubble.
\end{circuitikz}
\end{document}
结果如下: 请注意,左侧连接覆盖了气泡,中间连接未连接,只有右侧连接连接良好。与左下方的触发器形成对比,其中连接到上锚点的线与气泡完全相交。
答案1
首先 --- 我认为你发现了一个错误。我会尽快调查。但这个错误可能不是你想的那样 --- 你不应该在 DQBP 上有底部引脚,而应该在 DQBR 触发器上有复位引脚。
(附注---我建议你使用Q
而不是球,或者 \ctikztextnot{Q}
没有非球。人们会认为那里有一个双重否定。
其次,你找到的与球连接的解决方案是正确的,而不是一个丑陋的黑客——手册中有解释(第 130 页底部),当你有 0 长度的外部引脚时--- 就您而言,由于这个错误,您遇到了同样的情况。
理论上,当您说nd=1
(或nu=1
) 有否定球时,外部引脚也会被绘制。绘制外部引脚时,引脚/球重叠会被考虑在形状中。
您真正想要的是拥有引脚,这样第一行和第二行就可以自然工作。作为一种解决方法,为 DQBR 和 DQBP 的引脚添加一个空白标签。
DQ 没有上引脚或下引脚,因此您必须使用边框锚点。
\documentclass[border=4pt]{standalone}
\usepackage{tikz}
\usepackage[RPvoltages]{circuitikz}
\tikzset{flipflop DQ/.style={flipflop, scale=.7,
flipflop def={t1=D, t6=Q, c3=1,
clock wedge size=.3, font=\normalsize}
}}
\tikzset{flipflop DQBR/.style={flipflop, scale=.7, % Has D, Q, QBar and Reset
flipflop def={t1=D, t6=Q, c3=1, t4=\ctikztextnot{Q}, n4=1, nd=1, td=~,
clock wedge size=.3, font=\normalsize},
}}
\tikzset{flipflop DQBP/.style={flipflop, scale=.7, % Has D, Q, QBar and Preset
flipflop def={t1=D, t6=Q, c3=1, t4=\ctikztextnot{Q}, n4=1, nu=1, tu=~,
clock wedge size=.3, font=\normalsize}
}}
\begin{document}
\begin{circuitikz}
\node[flipflop DQBR] (ff0) at (0,3) {0};
\node[flipflop DQBR] (ff1) at (3,3) {1};
\node[flipflop DQBR] (ff2) at (6,3) {2};
\node[flipflop DQBP] (ff3) at (0,0) {3};
\node[flipflop DQ] (ff4) at (3,0) {4};
\node[flipflop DQ] (ff5) at (6,0) {5};
\draw (ff0.down) -- (ff3.up);
\draw (ff1.down) -- (ff4.bup);
\draw (ff2.down) -- (ff5.bup);
\end{circuitikz}
\end{document}
局部放电错误只是一个愚蠢的打字错误(我可以这么说,因为它是我写的!)
diff --git a/tex/pgfcircmultipoles.tex b/tex/pgfcircmultipoles.tex
index 3454f6d..82b156c 100644
--- a/tex/pgfcircmultipoles.tex
+++ b/tex/pgfcircmultipoles.tex
@@ -1406,7 +1406,7 @@
\ifx\@@tmp\@@x\else\edef\@@or{1}\fi
\edef\@@tmp{\ctikzvalof{multipoles/flipflop/cd}}
\ifnum\@@tmp>0\edef\@@or{1}\fi
- \edef\@@tmp{\ctikzvalof{multipoles/flipflop/nu}}
+ \edef\@@tmp{\ctikzvalof{multipoles/flipflop/nd}}
\ifnum\@@tmp>0\edef\@@or{1}\fi
% \typeout{TEST\space\@@tmp\space\@@x}
\ifnum\@@or>0
使用补丁程序(它将在 v1.3.2 中修复),您的原始代码(用红色表示连接以更好地显示它们)几乎可以开箱即用:
\documentclass[border=4pt]{standalone}
\usepackage{tikz}
\usepackage[RPvoltages]{circuitikz}
\tikzset{flipflop DQ/.style={flipflop, scale=.7,
flipflop def={t1=D, t6=Q, c3=1,
clock wedge size=.3, font=\normalsize}
}}
\tikzset{flipflop DQBR/.style={flipflop, scale=.7, % Has D, Q, QBar and Reset
flipflop def={t1=D, t6=Q, c3=1, t4=\ctikztextnot{Q}, n4=1, nd=1,
clock wedge size=.3, font=\normalsize},
}}
\tikzset{flipflop DQBP/.style={flipflop, scale=.7, % Has D, Q, QBar and Preset
flipflop def={t1=D, t6=Q, c3=1, t4=\ctikztextnot{Q}, n4=1, nu=1,
clock wedge size=.3, font=\normalsize}
}}
\begin{document}
\begin{circuitikz}
\node[flipflop DQBR] (ff0) at (0,3) {0};
\node[flipflop DQBR] (ff1) at (3,3) {1};
\node[flipflop DQBR] (ff2) at (6,3) {2};
\node[flipflop DQBP] (ff3) at (0,0) {3};
\node[flipflop DQ] (ff4) at (3,0) {4};
\node[flipflop DQ] (ff5) at (6,0) {5};
\draw[red] (ff0.down) -- (ff3.up);
\draw[red] (ff1.down) -- (ff4.bup);
\draw[red] (ff2.down) -- (ff5.bup);
\end{circuitikz}
\end{document}
抱歉,抗锯齿效果太差,怪okular