Alchemist is a typst package to draw skeletal formulae. It is based on the chemfig package. The main goal of alchemist is not to reproduce one-to-one chemfig. Instead, it aims to provide an interface to achieve the same results in Typst.
#skeletize({
molecule(name: "A", "A")
single()
molecule("B")
branch({
single(angle: 1)
molecule(
"W",
links: (
"A": double(stroke: red),
),
)
single()
molecule(name: "X", "X")
})
branch({
single(angle: -1)
molecule("Y")
single()
molecule(
name: "Z",
"Z",
links: (
"X": single(stroke: black + 3pt),
),
)
})
single()
molecule(
"C",
links: (
"X": cram-filled-left(fill: blue),
"Z": single(),
),
)
})
Alchemist uses cetz to draw the molecules. This means that you can draw cetz shapes in the same canvas as the molecules. Like this:
#skeletize({
import cetz.draw: *
double(absolute: 30deg, name: "l1")
single(absolute: -30deg, name: "l2")
molecule("X", name: "X")
hobby(
"l1.50%",
("l1.start", 0.5, 90deg, "l1.end"),
"l1.start",
stroke: (paint: red, dash: "dashed"),
mark: (end: ">"),
)
hobby(
(to: "X.north", rel: (0, 1pt)),
("l2.end", 0.4, -90deg, "l2.start"),
"l2.50%",
mark: (end: ">"),
)
})
Usage
To start using alchemist, just use the following code:
#import "@preview/alchemist:0.1.3": *
#skeletize({
// Your molecule here
})
For more information, check the manual.
Changelog
0.1.3
- Added the possibility to add exponent in the string of a molecule.
0.1.2
- Added default values for link style properties.
- Updated
cetz
to version 0.3.1. - Added a
tip-lenght
argument to dashed cram links.
0.1.1
- Exposed the
draw-skeleton
function. This allows to draw in a cetz canvas directly. - Fixed multiples bugs that causes overdraws of links.
0.1.0
- Initial release