
Я пытаюсь понять, как работают пересечения проводов с CircuiTikz. Я видел знаменитые "перекрещивания изломов", но я хотел бы сначала попытаться решить проблему с пересечениями, которые предоставляет CircuiTikz.
Например: Как бы вы нарисовали переход на этом перекрестке с помощью пакета CircuiTikz? Не зная координат и относительного положения поворота с C на D.
Вот код, который я написал:
\documentclass[a4paper,12pt]{article}
\usepackage[a4paper, margin=2cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[]{circuitikzgit}
\begin{document}
\begin{circuitikz}
\draw (0,0)node[circ]{a} -- (4,0)node[circ]{b};
\draw (1,2)node[circ]{c} |- (3,-2)node[circ]{d};
\end{circuitikz}
\end{document}
Для меня важно не использовать формат узлов, предлагаемый в руководстве, поскольку я рисую более большую/сложную схему и хотел бы нарисовать пересечение, похожее на стиль пути от одной координаты к другой, например:
\draw (1,2)node[circ]{c} to[crossing] |- (3,-2)node[circ]{d};
Но очевидно, что это не работает.
Как вы видите, я использовал последнюю версию CircuiTikz,это то, где вы можете это получить.
решение1
Проблема в том, что (a) |- (b)
он обрабатывается как два отдельных раздела и to[crossing]
может обрабатывать только один.
\documentclass[border=10pt]{standalone}
\usepackage{circuitikz}
\begin{document}
\begin{circuitikz}
\draw (0,0)node[circ]{a} -- (4,0)node[circ]{b};
\draw (1,2)node[circ]{c} to[crossing] (1,2 |- 3,-2) -- (3,-2)node[circ]{d};
\end{circuitikz}
\end{document}
Эта версия бесстыдно ворует у Fractal, но заменяет circ
на jump crossing
.
\documentclass[border=10pt]{standalone}
\usepackage{circuitikz}
\usetikzlibrary{intersections}
\newlength{\crossing}
\makeatletter
\setlength{\crossing}{\ctikzvalof{bipoles/crossing/size}\pgf@circ@Rlen}
\makeatother
\begin{document}
\begin{circuitikz}
\draw[name path=ab] (0,0)node[circ]{a} -- (4,0)node[circ]{b};
\draw[name path=cd] (1,1)node[circ]{c} |- (3,-2)node[circ]{d};
\path[name intersections={of=ab and cd,by=e}];
\fill[color=white] (e) circle[radius=0.5\crossing];% erase plain crossing
\draw (e) node[jump crossing]{};
\end{circuitikz}
\end{document}
Также можно использовать:
\path [name intersections={of=ab and cd,by=e}]
[fill=white] (e) circle[radius=0.5\crossing]% erase plain crossing
node[jump crossing,rotate=90]{};
решение2
По сути, это circuitikz
(очень хорошее) расширение TiкZ, я не вижу абсолютно никаких причин, по которым мне не следует использовать стандартный TiкСинтаксис Z для этого.
\documentclass[a4paper,12pt]{article}
\usepackage[a4paper, margin=2cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage{circuitikz}
\usetikzlibrary{intersections}
\begin{document}
\begin{circuitikz}
\draw[name path=ab] (0,0)node[circ]{a} -- (4,0)node[circ]{b};
\draw[name path=cd] (1,2)node[circ]{c} |- (3,-2)node[circ]{d};
\path[name intersections={of=ab and cd,by=e}] (e) node[circ] {e};
\end{circuitikz}
\end{document}