Manual
The document
OverviewGrammarDocument headerSyntax cheatsheet Scene Step
Content
Text blocks
Paragraph Heading 1 Heading 2 Heading 3 Heading 4 List
Maths
Equation Maths
Tables & images
Table Image
Formatting
Bold Italics Inline Code Highlight
Text colours
Links & references
Link Footnote Icon Internote Reference
ValueWhere inline content works
Narrative only
Note Definition Example Task Divider
Graph pane
Graph
Curves & areas
Curve Integral
Data marks
Scatter Histogram
Fits
Fit Residuals
Surfaces
Contour Heatmap
Marks
Line Segment Vector Point Polygon Text
Shapes
Circle Square Rectangle Triangle Star Diamond Hexagon
Axis furniture
Axis label Axis Brace
Expressions
Code pane
Code Lines
Animation & interaction
Cues that wrap content
Cue Draw cue Trace cue Highlight cue Spotlight cue Type cue
Cues on a value
Value cue Zoom cue
Anchors & timing Parameter
Advanced features
Data Let Define Preset Include If For Ignore
Reference
All constructs A–ZAttribute types
Concepts
IdentifiersBody & detailDerived attributes
Guidance
The narrative contractWhat earns a place on the canvasParameter or cueHonest numbersCode demonstrates, never computesAuthor-attached data only
?
  1. Reference
  2. Concepts
  3. Body & detail

Body & detail

The two slots every construct may carry, and the policies that say what is legal in each.

#Two slots

A construct may carry two bracketed slots after its head: a { } body and a [ ] detail. Most elements use only the body. The scene is the one place the distinction carries the document's architecture — its body is the narrative the reader reads, its detail is the canvas they look at.

scene{
    The narrative — prose, headings, callouts.
}[
    canvas.graph{
        curve(expression: x^2)
    }
]

#Containment policies

What is legal inside each slot is declared per element, and every reference page prints it under Allowed content. A policy is one of three things: a list of element ids, a prose description of what the slot accepts, or nothing at all when the element takes no such slot.

  • A list of ids — only those elements compile there. A canvas.graph body accepts marks and cues, nothing else.
  • Prose — the slot takes content rather than elements, like a paragraph's rich text or a lines chunk's literal code.
  • Nothing — marks take no body; a mark's text is its label: attribute.

#Rich text is not a body policy

Where a page says a slot takes inline Chalk, the contents are prose with micronodes — **bold**, $maths$, !teal{…} — not block elements. The same is true of attributes typed rich-text: a mark's label: renders formatting and maths, but cannot hold a paragraph.

A reference written in a body position compiles as literal text. References are an attribute type, so a live value in prose must be wrapped in a construct that owns an attribute — which is the entire reason !value exists.

#Where an element may be written

Every block element's page carries an Allowed in section — the reverse of the policy, computed across the whole reference: which elements name this one in their body or detail. It answers the question a policy list cannot, which is where a thing you have just found is actually allowed to go.

On this page
Two slotsContainment policiesRich text is not a body policyWhere an element may be written
PrivacyTermsContact Support
Body & detail · Internote