我正在寻找一种平滑的方式来调整现有的circuitikz
独立内容,以创建具有不同内容的紧密相关的输出。就像在我的方案中切换不同的设置一样。例如,如下所示的安培表需要用简单的连接线替换,即移除,标签/锚点应该用 ID 替换,几个对象的颜色互换等。
我想象自己创建了通用电路布局,定义了所有必要的坐标、对象等,并在不同的输出场景之间切换,例如“有或无测量”、“仅 ID”、“能量路径(不)可见”、“不同的能量路径”(alpha、beta……)。
到目前为止,我已经使用了图层(用于前面提到的“能量路径”),但实际上这已经不起作用了,因为我不能/不想只激活新图层,例如用空白区域覆盖现有仪表并添加另一条线。我觉得可能有一些包可以帮助我实现我要的方向。但到目前为止,我还没有找到任何足够的东西。
TexStudio 中的脚本内可使用不同的注释将是最佳选择,因为我将来仍会多次更改初始电路布局,但每次添加或删除新部分时都不想手动清除仪表或更改颜色。希望大家明白我的意思。以下 MWE 可能有所帮助。如果需要进一步说明,请告诉我。
编辑:添加了不太复杂的 MWE,没有能量路径。示例我希望使用一个命令/开关来实现to[ameter, ...]
用简单的线条替换每个--
或用替代文本替换块文本。查看示例图片。
\documentclass[border=10pt]{standalone}
\usepackage[%
% compatibility,
% european,%
siunitx,%
RPvoltages,%
]{circuitikz}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepackage{standalone}
\usepackage{xcolor}
\usetikzlibrary{positioning, shapes, arrows, backgrounds, chains, fit, calc }
\colorlet{vmeter}{black!30!green}
\colorlet{ameter}{black!20!red}
\tikzset{%
block/.style = {rectangle, draw, text centered, inner sep=.2cm},%
vmeter/.style = {rmeter, color=vmeter, t=\tiny{\si{\volt}}},%
ameter/.style = {rmeter, color=ameter, t=\tiny{\si{\ampere}}},%
mground/.style= {ground, scale=.6},%
label distance=2ex,%
marker/.style={orange, line width=4mm, rounded corners,},% opacity=0.3, line cap=round},
}
\ctikzset{instruments/scale=.3}
\begin{document}
\newcommand{\tdesc}[1]{\tiny{\texttt{#1}}}
\begin{circuitikz}
% custom coordinates
\coordinate (v VMeter2GND) at (0,-1);
\coordinate (h VMeter2GND) at (-.5,0);
% blocks
\node [block] (pvgen) {PV GEN};
\node [block] (load) at (1,-7) {Load};
% coordinates
\coordinate (pvbus mid) at ($(pvgen.south)+(0,-1)$);
% bus
\draw [ultra thick] (pvbus mid)++(-2,0) coordinate(pvbus west) node[anchor=south west](pvbus desc){PV} -- ++(4,0) coordinate(pvbus east);
\draw [ultra thick] (pvbus west) ++(0,-4) coordinate(acbus west) node[anchor=south west](acbus desc){AC} -- (acbus west -| pvbus east) coordinate(acbus east);
% coordinates
\coordinate (pvbus mid) at ($ (pvbus west) !.5! (pvbus east) $);
% dcac
\draw ($(pvbus mid) !.2! (pvbus mid |- acbus west) $) coordinate(pvdcac in) to[sdcac] ($(pvbus mid) !.8! (pvbus mid |- acbus west) $) coordinate(pvdcac out);
% addtional main wiring
\draw (pvgen.south) -- (pvbus mid);
% % voltage measurement
\draw (pvbus west) ++ ($-1*(h VMeter2GND)$) coordinate(vpv) to[vmeter, l=\tdesc{V PV}] ++ (v VMeter2GND) node[mground]{};
\draw (acbus west) ++ ($-1*(h VMeter2GND)$) coordinate(vac) to[vmeter, l=\tdesc{V AC}] ++(v VMeter2GND) node[mground]{};
% current measurement
\draw (pvbus mid) to[ameter, label=\tdesc{A PV IN}] ++(v VMeter2GND) -- (pvdcac in);
\draw (pvdcac out |- acbus west) coordinate (acbus pvdcac in) to[ameter, a=\tdesc{A PV OUT}] (pvdcac out);
\draw (load.north |- acbus west) coordinate (acbus load in) to[ameter, a=\tdesc{A LOAD}] (load.north);
\end{circuitikz}
\end{document}
答案1
我仍然不确定我是否理解了这个问题,并且我仍然认为这个例子绝不是简单的——但这可能是我的错,这两件事是相连的。
让我们看看这是否有帮助...我假设您这样做并不是为了让元素在演示中出现和消失beamer
,在这种情况下您可以轻松地使用覆盖来实现这一点。
例如,假设我想要(或不想)仪表跟随旗帜。我可以非常直接地做到这一点随包裹ifthen
:
\documentclass{article}
\usepackage[european, RPvoltages, straightvoltages]{circuitikz}
\usepackage{siunitx}
\usepackage{ifthen}
\newboolean{showmeters}
\newcommand{\mybigsubcircuit}{%
\draw (0,0) to[R=$R$, *-] ++(3,0) coordinate(a);
\ifthenelse{\boolean{showmeters}}
{\draw (a) to[rmeterwa, color=red] ++(2,0) coordinate(b);}
{\draw (a) to[short] ++(2,0) coordinate(b);}
\draw (b) to[short, -o] ++(1,0);
}
\begin{document}
\setboolean{showmeters}{false}
\begin{circuitikz}
\mybigsubcircuit
\end{circuitikz}
\setboolean{showmeters}{true}
\begin{circuitikz}
\mybigsubcircuit
\end{circuitikz}
\end{document}
(这是最小--- 您可以使用数字或字符串或任何ifthen
提供比较和分支的内容)。