Benutzer-Werkzeuge

Webseiten-Werkzeuge


circuit_macros

Circuit_macros

Circuit_macros sind eine Sammlung von Makros zum Zeichnen von Schaltplänen, die sich gut in LaTeX-Dokumente integrieren lassen. Zur Verarbeitung werden die Programme m4 und dpic verwendet.

Vordefinierte Positionen

Der aktuellen Position bzw. dem aktuellen Element kann mit name: ein Namen gegeben werden, den man später verwenden kann:

R1: resistor()
CodeBedeutung
 Here
aktuelle Position
 R1.x
x-Koordinate von R1
 R1.y
y-Koordinate von R1
 R1.start
Start-Koordinate von R1
 R1.end
End-Koordinate von R1
 R1.left
linke Koordinate von R1 (in Zeichenrichtung)
 R1.right
rechte Koordinate von R1 (in Zeichenrichtung)
 R1.center
Mittelpunkt von R1

Wird mit (A,B) eine Koordinate aus zwei Punkten zusammengebaut, ist es nicht notwendig explizit auf die jeweilige x- bzw. y-Koordinate (also (A.x,B.y)) zuzugreifen.

Vordefinierte Längen und Größen

CodeBedeutung
elen_
Länge eines zweipoliges Elementes (inkl. Anschlussleitungen)
dotrad_
Radius eines Punktes

Häufig verwendete Elemente/Befehle

CodeBedeutungBild
resistor(,,E) 
Widerstand (europäisch) Widerstand
capacitor(,,E) 
Kapazität (europäisch) Kapazität
ebox(,,,0) 
Induktivität (europäisch) Induktivität
ground(,,E) 
Masse (europäisch) Masse
dot 
Kreuzungspunkt
(dargestellt mit zusätzlichen Linien (line))
Kreuzungspunkt )
gap(,1,) 
Anschlussklemme mit zwei Pins (unausgefüllt) Anschlussklemme
source(,v) 
Spannungsquelle
weitere Varianten
Spannungsquelle
source(,i) 
Stromquelle
weitere Varianten
Spannungsquelle
tconn(,O,2*dotrad_) 
Anschlussklemme mit einem Pin
Das zweite Argument ist ein „Oh“, keine „Null“
Alternativ kann dot(,,1) verwendet werden
Anschlussklemme
opamp 
Operationsverstärker Operationsverstärker
opamp(,,,,R) 
Operationsverstärker (gespiegelt) Operationsverstärker (gespiegelt)
bi_tr()
Bipolartransisitor, NPN Bipolartransistor (NPN)
bi_tr(,,P)
Bipolartransisitor, PNP Bipolartransistor (PNP)
e_fet(,,,S)
N-MOS
weitere Varianten
N-MOS
e_fet(,,P,S)
P-MOS
weitere Varianten
P-MOS
b_current()
Stromzählpfeil (dargestellt mit einem Widerstand) Stromzählpfeil
larrow()
Spannungszählpfeil (dargestellt mit einer Spannungsquelle und Label)
rarrow() erzeugt den Pfeil auf der anderen Seite
Spannungszählpfeil
line
Verbindungsleitung (dargestellt sind zwei Leitungen)
keine Klammern
Verbindungsleitung
move
Cursorbewegung ohne Zeichnen einer Linie
keine Klammern

Beschriftungen (Label)

Zweipolige Elemente

Zur Beschriftung zweipoliger Elemente gibt es spezielle Makros:

Code Bedeutung
llabel(arg1,arg2,arg3)
Beschriftung in Zeichenrichtung links vom Element
clabel(arg1,arg2,arg3)
Beschriftung zentriert zum Element
rlabel(arg1,arg2,arg3)
Beschriftung in Zeichenrichtung rechts vom Element

Die Argumente arg1, arg2, arg3 entsprechen dabei den Positionen Anfang, Mitte und Ende. Werden die Argumente ohne Anführungszeichen verwendet, ist der Mathemodus von LaTeX aktiv. Für Text im Textmodus müssen die Argumente in Anführungszeichen stehen.

Beispiele:

CodeBild
resistor(,,E); llabel(,R_1,)
Beispiel Label Widerstand
resistor(,,E); llabel(,"R",)
Beispiel Label Widerstand (Textmodus)
gap(down_,1,A); llabel(+,V_1,-);
Beispiel Label Gap

Andere Elemente

Andere Elemente lassen sich mit

"text" at location

beschriften. Hier muss der Mathemodus explizit mit $ aktiviert werden. Die Ausrichtung kann mit ljust, rjust, above oder below bestimmt werden.

Platzierung von mehrpoligen Elementen

Mehrpolige Elemente können mit der Syntax

with .x at y

platziert werden.

Beispiele:

opamp() with .In1 at Here
R1: resistor(,,E)
...mehr Befehle...
bi_tr() with .B at R1.end

Tipps und Tricks

Anschlussklemme mit unausgefüllten Pins an Masse

Möchte man eine Anschlussklemme mit unausgefüllten Pins in der Größe anderer zweipoliger Elemente mit direkter Verbindung zu Masse zeichnen, sieht das ohne weitere Maßnahmen so aus:

Klemme mit Überlappung

Um dies zu vermeiden, muss die Klemme verkürzt und der Cursor weiterbewegt werden:

gap(down_ dimen_-dotrad_,1,A); llabel(,V_\text{out},)
move down_ dotrad_
ground(,,E)

Damit sieht das Beispiel so aus:

CodeBild
ground(,,E)
resistor(up_,E,)
line right_
gap(down_ dimen_-dotrad_,1,A); llabel(,V_\text{out},)
move down_ dotrad_
ground(,,E)
Klemme ohne Überlappung

Beschriftung innerhalb eines Operationsverstärkers

Soll die Beschriftung eines Operationsverstärker nicht über- oder innerhalb, sondern innerhalb gesetzt werden, kann dies nicht mit den Label-Befehlen, sondern so erreicht werden:

CodeBild
U1: opamp
"$U_1$" at U1.C
Operationsverstärker, Beschriftung innerhalb

Der Mathemodus (für tiefgestellte Zeichen wie 1 im Beispiel) muss hier im Gegensatz zu den Label-Befehlen explizit mit je einem $ aktiviert und beendet werden.

Linienübergänge an Ecken

Stoßen Linien aufeinander, sind ihre Ende nicht vollständig verbunden (siehe 1. Beispiel). Als Abhilfe kann eine Linie mit mehreren Segmenten (2. Beispiel) oder die Makros corner für rechtwinklige Ecken (3. Beispiel) bzw. round für abgerundete Ecken (4. Beispiel) verwendet werden.

line up_ 0.2
line right_ 0.2
line up_ 0.2 then right_ 0.2
line up_ 0.2
corner
line right_ 0.2
line up_ 0.2
round
line right_ 0.2

Die Syntax corner(at location) existiert im Gegensatz zu round(at location) nicht, weil für das Makro corner die Richtung der letzten gezeichneten Linie bekannt sein muss. Als Workaround kann line right_ linethick bp__ at location verwendet werden. Die Richtung muss dabei manuell angepasst werden.

round(at location) verändert in Versionen <= 8.1 nicht die Variable Here. Ab Version 8.2 wird Here analog zu den übrigen Befehlen verändert.

Abstände zur Beschriftung vergrößern

Durch das Setzen der Variablen textoffset lässt sich der Abstand zwischen den Elementen und der Beschriftung vergrößern.

Beispiel:

textoffset = 5bp__

Abgeschnittener Text

Unter bestimmten Umständen wird Text abgeschnitten dargestellt. Das liegt daran, dass die Bounding Box der mit dem Flow m4→dpic→latex→dvips generierten EPS-Datei falsch ist. Eine Möglichkeit die Bounding Box zu korrigieren, ist das Werkzeug epstool:

epstool --copy --bbox in.eps out.eps

Eine andere Möglichkeit ist die Verwendung des PGF/TikZ-Backends (durch dpic -g) anstelle des PSTricks-Backends.

circuit_macros.txt · Zuletzt geändert: 2022/11/26 11:13 von olli