Новые переключатели в circuitikz (нет, nc)

Новые переключатели в circuitikz (нет, nc)

Мне нужны другие переключатели, чем те, что внутри circuitikz. Я уже нарисовал их всего несколькими линиями, но я хотел бы использовать их как другие стандартные компоненты в circuitikz. Я нашел только несколько руководств, которые добавляют несколько линий к существующему компоненту, например резистору, но я понятия не имею, как добавить совершенно новую часть. Может быть, кто-то из вас сможет это сделать?

Вот мой минимальный рабочий пример:

\documentclass{scrartcl}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}

\usepackage[european]{circuitikz}

\begin{document}

\begin{circuitikz}

% Normally Open Switch
\draw[thick] (0,0) --++(0,0.5)--++(-0.4,1) coordinate (sw)
($(sw)+(0.4,0)$) --++(0,0.5);

% Normally Closed Switch
\draw[thick] (3,0) --++(0,0.5)--++(0.4,1) coordinate (sw)
($(sw)+(-0.4,-0.4)$) --++(0,0.9) 
($(sw)+(-0.4,-0.4)$) --++(0.4,0);

\end{circuitikz}

\end{document}

Результат:

Вот как это выглядит

Я хотел бы получить тот же результат с помощью этого:

\documentclass{scrartcl}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}

\usepackage[european]{circuitikz}

\begin{document}

\begin{circuitikz}

% Normally Open Switch
\draw (0,0) to[nos] (0,2);

% Normally Closed Switch
\draw (3,0) to[ncs] (3,2);

\end{circuitikz}

\end{document}

Спасибо!

решение1

Я использовал одинаковые параметры высоты, ширины и глубины для Оффнера и Шлиссера.

\documentclass[border=5pt]{standalone}

%\usepackage[utf8]{inputenc}
%\usepackage[T1]{fontenc}
%\usepackage[ngerman]{babel}

\usepackage[european]{circuitikz}

\makeatletter
\ctikzset{bipoles/offner/height/.initial=.35}
\ctikzset{bipoles/offner/width/.initial=.5}
\ctikzset{bipoles/offner/depth/.initial=.1}

\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/offner/depth}}{nos}{\ctikzvalof{bipoles/offner/height}}{\ctikzvalof{bipoles/offner/width}}{
            \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
            \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
            \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@right}{\pgf@circ@res@up}}
            \pgfusepath{draw}
}
\def\nospath#1{\pgf@circ@bipole@path{nos}{#1}}
\compattikzset{nos/.style = {\circuitikzbasekey, /tikz/to path=\nospath, l=#1}}

\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/offner/height}}{ncs}{\ctikzvalof{bipoles/offner/depth}}{\ctikzvalof{bipoles/offner/width}}{
            \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
            \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
            \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@right}{\pgf@circ@res@down}}
            \pgfusepath{draw}
      \pgfsetlinewidth{\pgfstartlinewidth}
      \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
      \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@right}{0pt}}
      \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@right}{\pgf@circ@res@down}}
      \pgfusepath{draw}
}
\def\ncspath#1{\pgf@circ@bipole@path{ncs}{#1}}
\compattikzset{ncs/.style = {\circuitikzbasekey, /tikz/to path=\ncspath, l=#1}}
\makeatother

\begin{document}

\begin{circuitikz}

% Normally Open Switch
\draw (0,0) to[nos] (0,2);

% Normally Closed Switch
\draw (3,0) to[ncs] (3,2);

\end{circuitikz}

\end{document}

демо

Связанный контент