我一直在寻找交流电源的特定符号(带有波浪线的圆圈),似乎在这里找到了它:TikZ circuits.ee.IEC 库中的交流源符号。不幸的是,这里我真的很想念一些额外的功能……一旦我将图形旋转 90°,波浪线(内部正弦)显然也会旋转,这是我不希望发生的事情。我尝试了一种解决方法,即将符号旋转回 90°,但添加带有“方向信息”的箭头会放错位置。另一种方法是绘制一个空心圆并将波浪线作为注释(参见部分SHAPES
和ANNOTATIONS
代码)。
然后,带有“方向信息”的箭头总是能正确呈现,但注释的放置方式却很奇怪。这也可以通过额外的编码来规避,尽管不太优雅:
\draw (0,0) to [source={DC voltage={rotate=90,%
shift={(-1.05\tikzcircuitssizeunit,1.05\tikzcircuitssizeunit)}},%
direction info={<-}, info={above:$V_{in}$}}] (0,-2);
有人知道更好的方法吗?有没有可能防止
transform shape
定义形状时使用的命令,要在注释上执行吗?因为这样才能一劳永逸地解决问题。
\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{circuits.ee.IEC}
\begin{document}
%SHAPES
\tikzset{circuit declare symbol=source,
set source graphic={
draw,
circuit symbol lines,
circuit symbol size=width 2 height 2,
shape=generic circle IEC,
transform shape
}
}
%ANNOTATIONS
\tikzset{circuit declare annotation=
{AC voltage}
{0\tikzcircuitssizeunit}
{(-0.6\tikzcircuitssizeunit,-1.05\tikzcircuitssizeunit) %
edge[to path={sin ++(0.3\tikzcircuitssizeunit,0.25\tikzcircuitssizeunit) %
cos ++(0.3\tikzcircuitssizeunit,-0.25\tikzcircuitssizeunit) %
sin ++(0.3\tikzcircuitssizeunit,-0.25\tikzcircuitssizeunit) %
cos ++(0.3\tikzcircuitssizeunit,0.25\tikzcircuitssizeunit)}, -] ()}
}
\begin{tikzpicture}[circuit ee IEC, thick]
\draw (0,2.25) to [source={AC voltage={rotate=90,%
shift={(-1.05\tikzcircuitssizeunit,1.05\tikzcircuitssizeunit)}},%
direction info={<-}, info={above:$V_{AC}$}}] (0,0);
\end{tikzpicture}
\end{document}
令我困扰的是,我需要指定:
shift={(-1.05\tikzcircuitssizeunit,1.05\tikzcircuitssizeunit)}}
当绘制旋转 90° 的源时。如果我不这样做,波浪线就会错位。(自己试试吧!)这就是我想以更优雅的方式解决的问题。
编辑:根据要求,有一个完整的工作示例(它太长而无法作为评论包含在内)。
答案1
我不会将波浪线定义为注释,而是将background path
其定义为generic circle IEC
。这样,您可以使用\pgftransformresetnontranslations
取消旋转(和缩放,但这里没问题),然后只需使用 PGF 命令绘制正弦路径即可。
那样
\draw (0,0) to [source={AC,direction info={->},info={below:$V_{AC}$}}] (3,0)
to [source={AC,direction info={->},info={$V_{AC}$}}] (3,3);
代码如下:
\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{circuits.ee.IEC}
\begin{document}
%SHAPES
\tikzset{circuit declare symbol=source,
set source graphic={
draw,
circuit symbol lines,
circuit symbol size=width 2 height 2,
shape=generic circle IEC,
transform shape
},
AC/.style={
/pgf/generic circle IEC/before background={
\pgftransformresetnontranslations
\pgfpathmoveto{\pgfpoint{-0.75\tikzcircuitssizeunit}{0pt}}
\pgfpathsine{
\pgfpoint{0.375\tikzcircuitssizeunit}{0.375\tikzcircuitssizeunit}}
\pgfpathcosine{
\pgfpoint{0.375\tikzcircuitssizeunit}{-0.375\tikzcircuitssizeunit}}
\pgfpathsine{
\pgfpoint{0.375\tikzcircuitssizeunit}{-0.375\tikzcircuitssizeunit}}
\pgfpathcosine{
\pgfpoint{0.375\tikzcircuitssizeunit}{0.375\tikzcircuitssizeunit}}
\pgfusepathqstroke
}
}
}
\begin{tikzpicture}[circuit ee IEC]
\draw (0,0) to [source={AC,direction info={->},info={below:$V_{AC}$}}] (3,0)
to [source={AC,direction info={->},info={$V_{AC}$}}] (3,3);
\end{tikzpicture}
\end{document}