我正在尝试绘制一个电池(使用组件battery1
),在适当的两端包含正极和负极符号。上一个问题此处的答案(使用 2.4 版本)准确表达了我的意思:
当然,我只想使用符号battery1
。因此,我的代码如下:
\usepackage[americanvoltages,fulldiodes,siunitx]{circuitikz}
\begin{document}
\begin{circuitikz}
\draw (0,0) to [battery1=\SI{9}{V}] (3,0)
to [pC,v=$v_C$] (6,0);
\end{circuitikz}
\end{document}
我的结论是:
请注意缺少 +/- 符号(我知道电路如何工作,所以实际上不需要显示这些符号,但是为了复制我的课堂笔记图表,我希望将这些符号包含在我的乳胶图中)。
无论哪种情况,我认为这可能与我使用的版本有关,Circuitikz
因为我使用的是最新版本(我相信是 0.3.0),但在上面链接的前一个问题中,他们使用的是 2.4 并且对他们来说有效。
我真的很想找到一种方法来添加+/-没有必须使用 Tikz 或其他方式手动添加它,即只需让它自然地成为组件的一部分,而无需添加节点或额外的 Tikz 代码等。如果这不可能,那么我将不得不接受它作为最后的结果。
感谢您的帮助!
编辑:我还应该提到,我曾尝试使用battery1, v=$9V$
而battery1=\SI{9}{V}
不是但无济于事( +/- 符号仍然没有显示)。
答案1
满足所述要求的解决方案:+
和-
符号原生放置,无需额外的包,也无需手动添加。这意味着重新定义\pgf@circ@drawvoltagegenerator
(pgfcircvoltage.sty
唯一需要做的是注释掉阻止符号出现的条件):
\documentclass{article}
\usepackage[americanvoltages,fulldiodes,siunitx]{circuitikz}
\usepackage{ifthen}
\makeatletter
\def\pgf@circ@drawvoltagegenerator{
\ifpgf@circuit@bipole@voltage@below
coordinate (pgfcirc@Vcont1) at ($(\ctikzvalof{bipole/name}.center) ! \ctikzvalof{voltage/bump a} ! (\ctikzvalof{bipole/name}.-120)$)
coordinate (pgfcirc@Vcont2) at ($(\ctikzvalof{bipole/name}.center) ! \ctikzvalof{voltage/bump a} ! (\ctikzvalof{bipole/name}.-60)$)
\else
coordinate (pgfcirc@Vcont1) at ($ (\ctikzvalof{bipole/name}.center) ! \ctikzvalof{voltage/bump a} ! (\ctikzvalof{bipole/name}.120)$)
coordinate (pgfcirc@Vcont2) at ($ (\ctikzvalof{bipole/name}.center) ! \ctikzvalof{voltage/bump a} ! (\ctikzvalof{bipole/name}.60)$)
\fi
\ifpgf@circuit@europeanvoltage
\ifpgf@circuit@bipole@voltage@backward
(pgfcirc@Vcont2) -- node[currarrow, sloped, allow upside down, pos=1] {} (pgfcirc@Vcont1)
\else
(pgfcirc@Vcont1) -- node[currarrow, sloped, allow upside down, pos=1] {} (pgfcirc@Vcont2)
\fi
\else % american voltage
\pgfextra{
\edef\pgf@temp{\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}}
\def\pgf@circ@temp{battery}
\ifx\pgf@temp\pgf@circ@temp
\def\pgf@circ@batteria{battery}
\else
\edef\pgf@circ@temp{battery1}
\ifx\pgf@temp\pgf@circ@temp
\edef\pgf@circ@batteria{battery}
\else
\edef\pgf@circ@batteria{false}
\fi
\fi
\def\pgf@circ@temp{battery1}
}
\ifx\pgf@temp\pgf@circ@temp % if it is a battery, must put + and -
\ifpgf@circuit@bipole@voltage@backward
(pgfcirc@Vcont2) node[xshift=2pt,yshift=-6pt] {$-$} (pgfcirc@Vcont1) node[xshift=-2pt,yshift=-6pt] {$+$}
\else
(pgfcirc@Vcont1) node[xshift=-2pt,yshift=-6pt] {$-$} (pgfcirc@Vcont2) node[xshift=2pt,yshift=-6pt] {$+$}
\fi
\fi
\fi
}
\makeatother
\begin{document}
\begin{circuitikz}
\draw (0,0) to [battery1,v>=\SI{9}{V}] (3,0)
to [pC,v=$v_C$] (6,0)
to[cV, v=\SI{9}{V}] (9,0)
;
\end{circuitikz}
\end{document}
备注:
我认为缺少的 + 和 - 符号可能是 circuitikz 中的一个错误。如果看一下我修改的相关代码:
\else % american voltage
\pgfextra{
\def\pgf@temp{\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}}
\def\pgf@circ@temp{battery}
\ifx\pgf@temp\pgf@circ@temp
\edef\pgf@circ@batteria{battery}
\else
\def\pgf@circ@temp{battery1}
\ifx\pgf@temp\pgf@circ@temp
\edef\pgf@circ@batteria{battery}
\else
\edef\pgf@circ@batteria{false}
\fi
\fi
\edef\pgf@circ@temp{battery}
}
\ifx\pgf@circ@batteria\pgf@circ@temp % if it is a battery, must put + and -
\ifpgf@circuit@bipole@voltage@backward
(pgfcirc@Vcont2) node {$-$} (pgfcirc@Vcont1) node {$+$}
\else
(pgfcirc@Vcont1) node {$-$} (pgfcirc@Vcont2) node {$+$}
\fi
\fi
\fi
线路
\ifx\pgf@circ@batteria\pgf@circ@temp % if it is a battery, must put + and -
这表明软件包作者打算包含电池的+
和-
符号;但是,上述行上方的条件不会产生预期的条件,因为这里\def
使用了\edef
:
\def\pgf@temp{\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}}
最后一个条件应该是
\ifx\pgf@temppgf@circ@temp
代替
\ifx\pgf@circ@batteria\pgf@circ@temp
也许联系软件包作者并询问他这是否确实是一个错误或者他是否决定不在所有情况下都添加标志是一个好主意。
答案2
答案3
这里有两种可能性。第一种使用下标,第二种使用堆栈。
\documentclass{article}
\usepackage[americanvoltages,fulldiodes,siunitx]{circuitikz}
\usepackage{stackengine}
\parskip 1em
\begin{document}
\begin{circuitikz}
\draw (0,0) to [battery1=$_-$\SI{9}{V}$_+$] (3,0)
to [pC,v=$v_C$] (6,0);
\end{circuitikz}
\begin{circuitikz}
\draw (0,0) to [battery1=\smash{\stackunder[6pt]{\SI{9}{V}}{$_-$~~~$_+$}}] (3,0)
to [pC,v=$v_C$] (6,0);
\end{circuitikz}
\end{document}
答案4
使用 TiKzdraw
命令的另一种可能的解决方案:
\documentclass{article}
\usepackage[americanvoltages,fulldiodes,siunitx]{circuitikz}
\begin{document}
\begin{circuitikz}
\draw (0,0) to [battery1=\SI{9}{V}] (3,0)
to [pC,v=$v_C$] (6,0);
\draw (1,0.3) node{$-$};
\draw (2,0.3) node{$+$};
\end{circuitikz}
\end{document}