Setup
Put something akin to the following at the start of your .typ file:
#import "@preview/marginalia:0.3.0" as marginalia: note, notefigure, wideblock
#show: marginalia.setup.with(
// inner: ( far: 5mm, width: 15mm, sep: 5mm ),
// outer: ( far: 5mm, width: 15mm, sep: 5mm ),
// top: 2.5cm,
// bottom: 2.5cm,
// book: false,
// clearance: 12pt,
)
If book is false, inner and outer correspond to the left and right
margins respectively. If book is true, the margins swap sides on even and odd
pages. Notes are placed in the outside margin by default.
Where you can then customize these options to your preferences. Shown here (as comments) are the default values taken if the corresponding keys are unset. Please refer to the PDF documentation for more details on the configuration and the provided commands.
Additionally, I recommend using Typst’s partial function application feature to customize other aspects of the notes consistently:
#let note = note.with(/* options here */)
#let notefigure = notefigure.with(/* same options here */)
Margin-Notes
Provided via the #note[...] command.
New in version 0.3.0: Notes can be labeled and referenced: If you write
#note[]<xyz>, then @xyz just works!
-
#note(side: "inner")[...]to put it on the inside margin (left margin for single-sided documents).Also accepts:
auto="outer","left","right". -
#note(counter: none)[...]to remove the marker.The display of the marker can be customized with the
numbering,anchor-numbering, andflush-numberingparameters. Refer to the docs for details. -
#note(shift: false)[...]to force exact position of the note.Also accepts
auto(behavior depends on whether it has a marker),true,"avoid"and"ignore". -
And more options for fine control. All details are in the docs.
Wide Blocks
Provided via the #wideblock[...] command.
-
#wideblock(side: "inner")[...]to extend into the inside margin instead.Also accepts:
auto="outer","left","right", or"both".
Note: Wideblocks do not handle pagebreaks well, especially in book: true
documents. This is a limitation of Typst which does not (yet) provide a robust
way of detecting and reacting to page breaks.
Figures
You can use figures as normal, also within wideblocks. To get captions on the side, use
- If you want top-aligned captions:
#set figure(gap: 0pt) // neccessary in both cases
#set figure.caption(position: top)
#show figure.caption.where(position: top): note.with(
alignment: "top", counter: none, shift: "avoid", keep-order: true,
dy: -0.01pt, // this is so that the caption is placed above wide figures.
)
- If you want bottom-aligned captions:
#set figure(gap: 0pt) // neccessary in both cases
#set figure.caption(position: bottom) // (this is the default)
#show figure.caption.where(position: bottom): note.with(
alignment: "bottom", counter: none, shift: "avoid", keep-order: true)
Figures in the Margin
For small figures, the package also provides a notefigure command which places
the figure in the margin.
#notefigure(
rect(width: 100%),
caption: [A notefigure.],
)<figure-label>
It takes all the same options as #note[], with some additions. In particular,
-
You can use
#notefigure(note-label: <xyz>, ..)to label the underlying note (if you want to reference it like a note) -
#notefigure(show-caption: .., ..)is how you change the caption rendering. NB.: this function is expected to take two arguments, please consult the docs.
Utilities
#marginalia.header()for easy two/three-column headers#show: marginalia.show-frameto show the page layout with background lines#marginalia.note-numbering()to generate your own numberings from sequences of symbols#marginalia.ref()to reference notes by relative index, without using labels.#marginalia.get-left()and#marginalia.get-right()to get contextual layout information.
Manual
Changelog
- 0.3.0
- Notes and notefigures can now be labeled and referenced. The
labelparameter on notefigures has been removed, anote-labelparameter has been added. - Recommended way to disable numbering a note is using
counter: none, this now works uniformly for notes and notefigures. (Enable markers for a notefigure simply by usingcounter: marginalia.notecounter) - Note markers now link to the anchor (and vice versa). Controlled via new
link-anchorproperty.
- Notes and notefigures can now be labeled and referenced. The
- 0.2.4
- Pages with
height: autowork now. - Added
refutility function.
- Pages with
- 0.2.3: The counter used for notes can now be customized.
- 0.2.2
- More flexible
alignmentparameter replacesalign-baseline. (notefigure.dyno longer takes a relative length, usealignemntinstead.) - Added
show-frameandheaderutility functions.
- More flexible
- 0.2.1: Allow customizing the anchor independently of the in-note number using
anchor-numbering. - 0.2.0
block-stylecan now be a function, allowing to customize the style for even and odd pages.reverseanddoubleparameters have been replaced by a uniformsideparameter.- Setup is now done using the
setupshow-rule. (configure()andpage-setup()have been removed) numberingandflush-numberingparameters are now per-note. (numberedhas been removed.)
- 0.1.4: New styling parameter
block-style. - 0.1.3
- New styling parameters
par-style, andtext-style. - Added
shiftandkeep-orderoptions.
- New styling parameters
- 0.1.1
- Notes will now avoid each other for any amount of notes.
- Added
notefigure. - Added
clearanceconfiguration option.
(Not listing bugfixes, see the release notes on GitHub for the full details.)
Feedback
Have you encountered a bug? Please report it as an issue in my GitHub repository.
Has this package been useful to you?
I am always happy when someone gives me a sticker star⭐