v

visual-cetz

@preview

Show a CeTZ snippet and its output side by side, from one source.

v0.1.0
MIT

Package Information

Last Updated
Minimum Typst Version
0.13.0
Categories
utilitycomponents

1. Get the package

Download the package using the TPIX CLI:

tpix get @preview/visual-cetz:0.1.0

2. Import in your Typst file

Add this to your .typ file:

#import "@preview/visual-cetz:0.1.0": *

Version History

0.1.00.13.0
f07f8d4361b9...

visual-cetz

Show a CeTZ snippet and its output, side by side, from a single source.

#import "@preview/visual-cetz:0.1.0": ex

#ex(```
circle((0, 0), radius: 1, fill: rgb("#cfe8ff"))
line((-1.6, 0), (1.6, 0), mark: (end: ">"))
content((0, -1.4), [a circle])
```)

code on the left, its rendering on the right

The point is that the code you see is the code that ran. Pasting a
snippet next to a picture of its result works for a month, then someone
fixes one and forgets the other, and the documentation starts lying. Here
there is one source: ex() takes a raw block, prints it verbatim, and
evaluates it. They cannot disagree.

What you get

ex(src) a CeTZ canvas: code left, drawing right. src is the body of cetz.canvas({ … }) — no need to write the canvas or the import
exr(src) the same for full Typst markup, when the example produces something other than a figure
note(body, title: …) a callout with a coloured rule
api(sig, desc) a function signature with its one-line description
with-scope(extra) add other libraries to the evaluation context

Options on ex: ratio (share of the width taken by the code, 50 % by
default), len (canvas unit), dbg (draws CeTZ's own debug guides),
scope, and style (fill, stroke, radius, size).

Using other libraries

ex() knows CeTZ only. Requiring cetz-plot or cetz-venn would force
their download on people who don't want them, and pin their versions. Add
them yourself:

#import "@preview/visual-cetz:0.1.0": ex, with-scope
#import "@preview/cetz-plot:0.1.4": plot

#let scope = with-scope((plot: plot))

#ex(scope: scope, ```
plot.plot(size: (5, 3), x-tick-step: 2, y-tick-step: 1, {
  plot.add(x => calc.sin(x), domain: (0, 6))
})
```)

Two things worth knowing

eval cannot see your imports. It has no access to the file system
either. That is why the scope is passed explicitly, and why exr()
displays any #import "@preview/…" line but strips it before
evaluating — so the reader can copy the example, import line included,
while the rendering still works.

Examples don't break across pages. A snippet split with its code on one
page and its picture on the next says nothing, so the block is
breakable: false.

The guide

This package was extracted from Visual CeTZ, a 51-page visual guide to
CeTZ 0.5.2 — 27 chapters, 200 examples, in the spirit of
VisualTikZ.

guide/Visual-CeTZ-0.5.2.pdf

Coordinates, shapes, styles, marks, anchors, groups, transforms, 3D,
boolean operations, decorations, angles, trees, palettes, vectors and
matrices, plotting and charts, Venn diagrams, SmartArt, and a chapter of
Euclidean geometry built from CeTZ primitives alone — triangle centres,
Euler line, nine-point circle, Simson, Napoleon, Ptolemy, conics.

The guide is built with this package, which is the honest test of it: its
sources are in guide/, and guide/tpl.typ imports
@preview/visual-cetz:0.1.0 exactly as you would.

cd guide && typst compile main.typ

The guide is excluded from the downloaded bundle — it is 1.8 MB of PDF
against 8 kB of code — but stays browsable here on Universe.

Licence

MIT

FERGOUS Abdelhak