所以我想画一个受控非门:
\begin{circuitikz}[scale=.3,thick] \draw
(2,0) node[adder] (xor) {}
(0,2) node (x) {$x$}
(0,0) node (y) {$y$}
(4,2) node (xout) {}
(4,0) node (yout) {}
(2,2) node[inner sep=0pt,minimum size=3,circle,fill=red] (cxor) {}
(x.east) -- (xout.west)
(y.east) -- (xor.west)
(xor.east) -- (yout.west)
(xor.north) -- (cxor)
;
\end{circuitikz}
问题是,门太大了,而且很丑。我可以使用来减小门的大小,every node/.style={transform shape}
但这也会减小文本的大小。所以我可以选择(可读文本 + 丑陋的大形状)或(小文本 + 正确的形状)。
为了缩小形状同时保持文本可读,我只能添加transform shape
到形状节点 - 这似乎有效,但是 1)有没有办法将其放在选项中circuitikz
?2)这也会弄乱在形状节点内输入的任何文本,对吗?
答案1
所有 Circuitikz 组件均基于双极子/长度,也称为\pgf@circ@Rlen
。组件尺寸是应用于此基本距离的比例因子。显然,这种做法始于双极子,并扩展到三极子、单极子和其他组件。
\documentclass{standalone}
\usepackage{circuitikz}
\begin{document}
\ctikzset{bipoles/length=.5cm}
\begin{circuitikz}[scale=.3,thick] \draw
(2,0) node[adder] (xor) {}
(0,2) node (x) {$x$}
(0,0) node (y) {$y$}
(4,2) node (xout) {}
(4,0) node (yout) {}
(2,2) node[inner sep=0pt,minimum size=3,circle,fill=red] (cxor) {}
(x.east) -- (xout.west)
(y.east) -- (xor.west)
(xor.east) -- (yout.west)
(xor.north) -- (cxor)
;
\end{circuitikz}
\end{document}
答案2
- 在图像的绘制中
circuitikz
合理使用一种绘图方式,正如circuitikz
包所假设的那样 - 缩放
ciruitikz
图片不是一个好主意,最好从一开始就以较小的尺寸绘制。 - 例如,假设您想将图像尺寸缩小一半(通过 scale=0.5 获得),则无需缩放的等效图像代码是:
\documentclass[margin=3mm]{standalone}
\usepackage{circuitikz}
\begin{document}
\begin{circuitikz}% used default thick of lines
\ctikzset{bipoles/length=5mm}% reduced size of bipoles
\draw (1,0) node[adder] (xor) {}
\draw ( 0.5,0) node[adder] (xor) {}
( 0,0) node[left] {$y$} -- (xor.west)
(xor.east) -- (1,0)
( 0,1) node[left] {$x$} to [short] (1,1)
(.5,1) to [short,color=red,*-] (xor.north);
\end{circuitikz}
\end{document}
附录:scale
如果由于某种原因你必须在图像中 使用选项,那么你还必须缩放节点adder
:
\documentclass[margin=3mm]{standalone}
\usepackage{circuitikz}
\begin{document}
\begin{circuitikz}[scale=0.3]
\draw (1,0) node[scale=0.3,adder] (xor) {}% observe "scale" option in node
(0,0) node[left] {$y$} -- (xor.west)
(xor.east) -- (2,0)
(0,2) node[left] {$x$} to [short] (2,2)
(1,2) to [short,color=red,*-] (xor.north);
\end{circuitikz}
\end{document}