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

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

5fea5fdde4d4434697304dbbf427e7b6.png

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 ® [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 ® at (5,0) [resistor={info = $R_1$, info'= 2 Ом}] {}; % резистор \node (out) at (6,0) [contact] {}; % выходной зажим \draw (in) — (L1) — (C1) — ® — (out); %выходной зажим \end{tikzpicture} \end{center} \caption{Последовательный колебательный контур} \end{figure}

\begin{figure}[! h] \begin{center} \begin{tikzpicture}[circuit ee IEC] \node ® [resistor={info={$R$}}] at (2,2) {}; % рисуем резистор \node (p1) [contact] at (3,2) {}; % рисуем точку соединения R и С \node © [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) — ®; \draw ® — (p1) — © — (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} Результат выглядит так:

83425c7adf0546f393f493dbcb16a7b9.png

c2492f1c246346e4bca7d21740e32e72.png

Пакет 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} В результате получается следующее:

aed95ca59e0e471eb9426eb671562956.png

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

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

© Habrahabr.ru