
Usage examples
Avoid importing everything with * as many internal functions are also exported.
#import "@preview/fletcher:0.5.1" as fletcher: diagram, node, edge
// You can specify nodes in math-mode, separated by `&`:
#diagram($
G edge(f, ->) edge("d", pi, ->>) & im(f) \
G slash ker(f) edge("ur", tilde(f), "hook-->")
$)
// Or you can use code-mode, with variables, loops, etc:
#diagram(spacing: 2cm, {
let (A, B) = ((0,0), (1,0))
node(A, $cal(A)$)
node(B, $cal(B)$)
edge(A, B, $F$, "->", bend: +35deg)
edge(A, B, $G$, "->", bend: -35deg)
let h = 0.2
edge((.5,-h), (.5,+h), $alpha$, "=>")
})
#diagram(
spacing: (10mm, 5mm), // wide columns, narrow rows
node-stroke: 1pt, // outline node shapes
edge-stroke: 1pt, // make lines thicker
mark-scale: 60%, // make arrowheads smaller
edge((-2,0), "r,u,r", "-|>", $f$, label-side: left),
edge((-2,0), "r,d,r", "..|>", $g$),
node((0,-1), $F(s)$),
node((0,+1), $G(s)$),
node(enclose: ((0,-1), (0,+1)), stroke: teal, inset: 10pt,
snap: false), // prevent edges snapping to this node
edge((0,+1), (1,0), "..|>", corner: left),
edge((0,-1), (1,0), "-|>", corner: right),
node((1,0), text(white, $ plus.circle $), inset: 2pt, fill: black),
edge("-|>"),
)
An equation $f: A -> B$ and \
an inline diagram #diagram($A edge(->, text(#0.8em, f)) & B$).
An equation and
an inline diagram
.
#import fletcher.shapes: diamond
#diagram(
node-stroke: black + 0.5pt,
node-fill: gradient.radial(white, blue, center: (40%, 20%),
radius: 150%),
spacing: (10mm, 5mm),
node((0,0), [1], name: <1>, extrude: (0, -4)), // double stroke
node((1,0), [2], name: <2>, shape: diamond),
node((2,-1), [3a], name: <3a>),
node((2,+1), [3b], name: <3b>),
edge(<1>, <2>, [go], "->"),
edge(<2>, <3a>, "->", bend: -15deg),
edge(<2>, <3b>, "->", bend: +15deg),
edge(<3b>, <3b>, "->", bend: -130deg, label: [loop!]),
)
go
loop!
1 2
3a
3b
3