# Circuit diagrams

rpic ships a native library of 79 circuit elements — a from-scratch re-imagining of J. D. Aplevich’s celebrated circuit_macros, written in pure pic (no m4). Load it with `circuits = TRUE`, or from inside the source with `copy "circuits"`; both are equivalent:

    library(rpic)

    rpic_svg('A:(0,0); B:(2,0)
    resistor(A,B)', circuits = TRUE)

    rpic_svg('copy "circuits"
    A:(0,0); B:(2,0)
    resistor(A,B)')

All figures below were pre-rendered with the code shown.

## Two-terminal elements

`resistor`, `capacitor`, `inductor`, `battery`, `diode`, `led`, `fuse`, sources, meters… — each draws between two named points, connecting wire included. A classic RLC loop:

    rpic_svg('
    SW:(0,0); NW:(0,1.2); NE:(2.4,1.2); SE:(2.4,0)
    battery(SW,NW); resistor(NW,NE); capacitor(NE,SE); inductor(SE,SW)
    dot at NW; dot at NE; dot at SE; dot at SW
    ', circuits = TRUE)

a rectangular circuit loop: battery on the left, resistor on top, capacitor on the right, inductor on the bottom, with junction dots

## Labels — with TeX math

Circuit figures traditionally carry math labels; combine the library with `texlabels`:

    rpic_svg('
    A:(0,0); B:(1.4,0); C:(2.8,0)
    resistor(A,B); "$R_1$" at 0.5 between A and B + (0, 0.35)
    diode(B,C);   "$D_1$" at 0.5 between B and C + (0, 0.35)
    ', circuits = TRUE, texlabels = TRUE)

a resistor labelled R1 and a diode labelled D1 in series

## Logic gates

Gates take a center point and export their terminals as variables (`gA_x`/`gA_y`, `gB_…`, `gY_…`):

    rpic_svg('
    P:(0.5,0); and_gate(P)
    Q:(1.9,0); nand_gate(Q)
    R:(3.3,0); xor_gate(R)
    "AND" at (0.5,-0.55); "NAND" at (1.9,-0.55); "XOR" at (3.3,-0.55)
    ', circuits = TRUE)

AND, NAND and XOR gate symbols side by side

## Multi-terminal devices

Transistors and op-amps also export their terminals as variables (`gBase_*`, `gColl_*`, `gEmit_*`), so wiring attaches precisely:

    rpic_svg('
    npn((0,0))
    line left 0.3 from (gBase_x, gBase_y); "B" rjust at last line.end - (0.04, 0)
    line up 0.25 from (gColl_x, gColl_y); "C" above at last line.end
    line down 0.25 from (gEmit_x, gEmit_y); "E" below at last line.end
    ', circuits = TRUE)

an NPN transistor symbol with wires and labels on the base, collector and emitter

## In R Markdown / Quarto

Register the knitr engine once and write pic directly in chunks, with `circuits` (and `texlabels`, `scale`) as chunk options:

    ```{r, eval = FALSE}
    rpic::rpic_register_knitr()
    ```

    ```{rpic, circuits=TRUE, scale=2}
    A:(0,0); B:(2,0)
    resistor(A,B)
    ```

The full element list lives in the library source; a gallery of 48 circuit_macros figures rendered by the same engine is in the engine repository.