我的问题是:CircuiTikz 中的缩放组件
我想将单个 circuitikz 组件缩放到各种尺寸,例如使用命令
/tikz/circuitikz/bipoles/length=1cm
是否可以将其与 '\newcommand' 一起使用?如何使用?
我已经试过了
\draw (0,0) to[/tikz/circuitikz/bipoles/length=1cm,inductor] (3,0);
运行得很好。但是它不能
\newcommand{\compScale}[1]{/tikz/circuitikz/bipoles/length=#1cm}
在序言和
\draw (0,0) to[\compScale{1},inductor] (3,0);
我收到错误:
! Package pgfkeys Error: I do not know the key '/tikz/circuitikz/bipoles/length =1cm' and I am going to ignore it. Perhaps you misspelled it.
答案1
在手册中,您可以发现建议的缩放组件的方法是使用其类scale
参数。更改双极基极长度是可以的,但一般来说(您应该对整个电路或至少整个路径进行此操作。查看手册,第 23 页左右,组件缩放)。
正确的方法是使用类缩放(不幸的是,您必须对任何类别的组件使用特定的键;我可以考虑在将来添加通用缩放,尽管我不确定它的实用性)。
就像(阅读评论;compScale
宏是来自一只友善的猫咪给出了很好的回答):
\documentclass{article}
\usepackage[RPvoltages]{circuitikz}
\newcommand{\compScale}[1]{/tikz/circuitikz/bipoles/length=#1cm}
%
% use a specific scaled component, maybe with a parameter.
%
\tikzset{
bigL/.style={L, inductors/scale=1.5},
scaled L/.style={L, inductors/scale=#1},
scaled/.default=1, % or whatever
}
\begin{document}
\begin{circuitikz}
\draw (0,0) to[/tikz/circuitikz/bipoles/length=2cm,inductor=L, o-o] ++(3,0) to [L=L, o-o] ++(3,0);
\end{circuitikz}
\bigskip
\begin{circuitikz}
\draw (0,0) to[style/.expanded=\compScale{2},inductor=L, o-o] ++(3,0) to [L=L, o-o] ++(3,0);
\end{circuitikz}
\bigskip
\begin{circuitikz}
\draw (0,0) to[bigL, l=L, o-o] ++(3,0) to [scaled L=0.8, l=L, o-o] ++(3,0);
\end{circuitikz}
\end{document}
(请注意由于局部变化而在两极产生的伪影bipoles/lenght
)
答案2
欢迎!您需要扩展宏。
\documentclass{article}
\usepackage{circuitikz}
\begin{document}
\begin{circuitikz}
\draw (0,0) to[/tikz/circuitikz/bipoles/length=1cm,inductor] (3,0);
\end{circuitikz}
\newcommand{\compScale}[1]{/tikz/circuitikz/bipoles/length=#1cm}
\begin{circuitikz}
\draw (0,0) to[style/.expanded=\compScale{1},inductor] (3,0);
\end{circuitikz}
\begin{circuitikz}
\draw (0,0) to[style/.expanded=\compScale{2},inductor] (3,0);
\end{circuitikz}
\end{document}
我想,如果你解释清楚你真正想做什么,就会有更好的选择。John Kormylo 的评论,可以定义一种cscale
按一定因子缩放组件的样式。
\documentclass{article}
\usepackage{circuitikz}
\makeatletter
\tikzset{cscale/.code={\pgf@circ@Rlen=#1\pgf@circ@Rlen},cscale/.default=1}
\makeatother
\begin{document}
\begin{circuitikz}
\draw (0,0) to[cscale=1,inductor] (3,0);
\end{circuitikz}
\begin{circuitikz}
\draw (0,0) to[cscale=2,inductor] (3,0);
\end{circuitikz}
\end{document}