Как стать автором
Обновить

Электрические схемы средствами LaTeX и TikZ

Время на прочтение 5 мин
Количество просмотров 24K
Иногда в LaTeX нужно нарисовать несложную электрическую схему. Далее рассказано как это сделать без привлечения стороннего ПО средствами самого LaTeX. То что будет написано далее рассчитано на тех, кто уже знаком с таким средством создания векторной для LaTeX как TikZ. В противном случае нужно сначала ознакомиться с TikZ. Немного информации на русском языке есть тут . Те, кто уже знаком с TikZ — см. под кат. Данные способы рисования схем в LaTeX я использовал в процессе написания диссертации.

Вот такую схему можно нарисовать средствами LaTeX:



TikZ с библиотекой circuits


Для рисования электрических схем служит библиотека circuits. Её нужно подключить в преамбуле документа при помощи команды \usetikzlibrary.Дополнительно в качестве параметра окружения tikzpicture нужно указать
circuit ee IEC.

\usetikzlibrary{circuits}
\usetikzlibrary{circuits.ee}
\usetikzlibrary{circuits.ee.IEC}
\usetikzlibrary{circuits.logic.IEC}


Элементы схем являются в этой библиотеке специальными типами узлов и задаются как обычные узлы TikZ командой \node. Здесь нужно обратить внимание, что текст узла, задаваемый в фигурных скобках, у радиоэлементов всегда пустой. Позиционное обозначение и номинал вводятся как параметр info в квадратных скобках. Парметр point up разворачивает компонент на 90 градусов, а параметр point down — на 270 градусов.

\node (R) [resistor={info={$R$}}] at (2,2) {}; % горизонтальный резистор
\node (C1) at (3,0) [point up,capacitor={info = $C_1$, info'= 100 пФ}] {}; %вертикальный конденсатор

Полный список всех компонентов имеется в документации к TikZ.
Узел схемы задаётся специальным узлом contact, который рисует закрашенный кружочек.

\node (p2) [contact] at (6,-2) {}; % узел в точке x=6, y=-2

Провода между элементами задаются как обычно в TikZ командой /draw. Прямой провод рисуется командой

\draw (R1) -- (C1);


А провод под углом 90 градусов рисуется командой:

\draw (R1) |- (C1);


или
\draw (R1) -| (C1);


Отличие состоит в том, что в первом случае провод сначала идёт вертикально, а затем горизонтально, а во втором случае — наоборот.

К проводам можно применять все параметры (стрелки, толщину линии, как и к обычным траекториям. Например толстый провод со стрелкой:
\draw [thick,->] (R1) -| (C1);


Схемы можно сочетать с любой графикой TikZ и, например, размещать на схеме график.

Теперь рассмотрим небольшой пример, который снабжён комментариями.

\documentclass[12pt]{article}
\usepackage{mathtext}
\usepackage[T2A]{fontenc}
\usepackage[koi8-r]{inputenc}
\usepackage[russian]{babel}
\usepackage[pdftex]{graphics}
\usepackage{tikz}

\usetikzlibrary{circuits} % подключаем библиотеки, содержащие
\usetikzlibrary{circuits.ee} % УГО для схем
\usetikzlibrary{circuits.ee.IEC}
\usetikzlibrary{arrows} % подключаем библиотеки со стрелками
\usetikzlibrary{patterns} % и со штриховкой

\begin{document}

Мега-описание RLC-контура

\begin{figure}[!h]
\begin{center}
\begin{tikzpicture}[circuit ee IEC] % обязательно указываем circuit ee IEC
\node (in) at (0,0) [contact] {}; % вход - контакт
\node (L1) at (1,0) [inductor={info = $L_1$, info'= 47 мкГн}] {}; % катушка -
% info - обозначение на схеме , info' - номинал
\node (C1) at (3,0) [capacitor={info = $C_1$, info'= 100 пФ}] {}; % конденсатор
\node (R) at (5,0) [resistor={info = $R_1$, info'= 2 Ом}] {}; % резистор
\node (out) at (6,0) [contact] {}; % выходной зажим
\draw (in) -- (L1) -- (C1) -- (R) -- (out); %выходной зажим
\end{tikzpicture}
\end{center}
\caption{Последовательный колебательный контур}
\end{figure}

\begin{figure}[!h]
\begin{center}
\begin{tikzpicture}[circuit ee IEC]
\node (R) [resistor={info={$R$}}] at (2,2) {}; % рисуем резистор
\node (p1) [contact] at (3,2) {}; % рисуем точку соединения R и С
\node (C) [point up, capacitor={info={$C$}}] at (3,1) {}; % конденстаор развернём на 90 градусов
\node (p2) [contact] at (3,0) {}; % рисуем точку соединения конденсатора с общи проводом
\draw [-latex] (p1) -- (5,2); % соединяем узлы схемы, R и С
\draw [latex-] (0,2) -- (R);
\draw (R) -- (p1) -- (C) -- (p2); % рисуем провода
\draw [latex-] (0,0) -- (p2);
\draw [-latex] (p2) -- (5,0);
\node  at (0,1) {Вход}; % подписываем где Вход
\node  at (5,1) {Выход}; % и где Выход

% теперь рисуем АЧХ как обычно график
\draw[xshift=60mm,-latex] (0,0) -- (4,0) node [anchor=west] {$\omega$}; % ось Х
\draw[xshift=60mm,-latex] (0,0) -- (0,3) node [anchor=south] {$K(\omega)$}; % ось Y
\draw [very thick,xshift=60mm, y=2cm, x=1cm, 
declare function={K(\w)=1/sqrt(1+\w^2);}] plot [domain=0:3, samples=10,
smooth] (\x,{K(\x)}); % график АЧХ
\end{tikzpicture}
\end{center}
\caption{RC - цепочка и её АЧХ}
\end{figure}
\end{document}


Результат выглядит так:





Пакет circuitikz


Пакет circuitikz является дальнейшим развитием библиотеки cirtuits. Пакет содержит значительно больше компонентов: пассивные компоненты, транзисторы, диоды, тиристоры, логические вентили, трансформаторы. Пакет circuitikz несовместим с библиотекой circuits. Использовать их вместе нельзя. Документацию к пакету можно скачать здесь

Пакет circuitikz подключается в преамбуле вот так:

\usepackage[europeanresistors,americaninductors]{circuitikz}

С такими параметрами УГО получаются наиболее близкими к нашим ГОСТам.

Пакет определяет специальное окружение, в которое нужно помещать схемы:
\begin{circuitikz}
\end{circuitikz}


Помещать это окружение внутри tikzpicture не нужно.

Идеология рисования схем отличается от библиотеки circuits. Компоненты являются не узлами (nodes), а путями (paths). Чтобы разместить одиночный компонент, нужно создать путь командой /draw. Поворот компонента осуществляется ориентацией пути. В качестве примера рассмотрим схему тиристорного фазового регулятора.

\begin{circuitikz}
\draw (-1,0) to [sV,l=$U_c$] (-1,2) % источник синусоидального напряжения
             to [R, l=$R_н$,i>_=$I_н$] (2,2) % резистор  с направлением тока
             to [Ty,l={VS},*-,n=VS] (2,0); % тиристор
\draw (VS.G) to [R,mirror,l=$R_у$,i<_=$I_у$] ++(4,0) |- (2,2);
\draw (VS.cathode) |- (-1,0);
\end{circuitikz}

В результате получается следующее:



Выводы


Для рисования схем в LaTeX можно использовать библиотеку circuits для TikZ или пакет circuitikz. Я бы рекомендовал последний пакет только для рисования сложных схем с полупроводниковыми компонентами. Обычно я предпочитаю использовать библиотеку circuits. Схемы выполненные с использованием каждого из этих способов не выглядят в LaTeX чужеродно, используется тот же шрифт и начертание линий, что и в остальном документе. Также все иллюстрации встроены в документ и всё хранится в едином файле.

Недостатком является то, что большие схемы замедляет компиляцию документа, так как каждый раз при компиляции они рендерятся заново. Также на рисование схемы средствами TikZ затрачивается больше времени, чем при использовании визуальных редакторов.

Ресурсы:
  1. Ещё примеры схем, выполненных при помощи TikZ и circuitikz: www.texample.net/tikz/examples/area/electrical-engineering
  2. Документация к circuittikz: texdoc.net/show.php?pkg=circuitikz
  3. Список свободного ПО для рисования электрических схем: https://en.wikipedia.org/wiki/Wikipedia:WikiProject_Electronics/Programs
Теги:
Хабы:
+29
Комментарии 48
Комментарии Комментарии 48

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн