change-list

change-list(title: [Summary of changes], level: 1)
one row per marked passage — comment, type of change, page, section.
#import "../../lib.typ": *

#set page(width: 16.6cm, height: auto, margin: 12pt)
#set text(size: 10.5pt)
#set heading(numbering: "1.")
#set-revisions(require-exchange: false, authors: (bob: "Bobby Fischer"))

#change-list()

= Introduction

#added(<r1-1>)[A reviewer's addition.]
#deleted(<bob-1>)[Bobby's own deletion.]

== Background

#replaced(<r1-2>)[A second reviewer comment, addressed in this subsection.][A second reviewer comment, revised in this subsection.]

= Methods

#added(<e1>)[An editor's addition.]
#added(none)[An anonymous typo fix, no anchor attached.]
#touched(<r9-9>)[This paragraph is unchanged --- never listed below.]

Renders nothing in clean mode, like del/suppress — placed once anywhere in shared manuscript content, it only ever shows up in manuscript-tracked.pdf. Rows are sorted by comment identifier — reviewers in order, then co-authors alphabetically by id, then the editor, anchor-less passages last — so the table doubles as a checklist against the letter, not just a readout of document order. touched never appears: nothing changed there to list. A passage with several marks shows every kind it contains, joined with “/” (addition/deletion, say, for a manually mixed passage that isn’t a single rep).

The “Section” column is the nearest preceding heading at level: (top-level by default) — notice the reviewer comment inside “Background” above is listed under “Introduction”, its enclosing top-level section, not the subsection itself.

level: — which heading counts as “Section”

#import "../../lib.typ": *

#set page(width: 16.6cm, height: auto, margin: 12pt)
#set text(size: 10.5pt)
#set heading(numbering: "1.")
#set-revisions(require-exchange: false)

*level: 1 (default) --- "Section" names the top-level heading:*

#change-list()

*level: 2 --- "Section" names the subsection instead:*

#change-list(level: 2)

= Introduction

== Background

#added(<r1-1>)[A reviewer's addition, inside a subsection.]

Same passage, same position — only level: differs between the two calls, and the Section column changes with it: 1 (the default) names the enclosing top-level heading, 2 the enclosing subsection.

title: — avoiding a redundant heading

change-list() prints its own bold “Summary of changes” line above the table by default. If you already write your own heading right before the call, that becomes two headings back to back:

#import "../../lib.typ": *

#set page(width: 16.6cm, height: auto, margin: 12pt)
#set text(size: 10.5pt)
#set-revisions(require-exchange: false)

*Without `title: none` --- your own heading, then the package's own "Summary of changes" on top of it:*

#text(weight: "bold", size: 1.2em)[Summary of Revisions]
#change-list()

*With `title: none` --- no second, redundant heading:*

#text(weight: "bold", size: 1.2em)[Summary of Revisions]
#change-list(title: none)

#added(<r1-1>)[A reviewer's addition.]

title: none removes the package’s own line, leaving just your heading and the table — title: [Some other text] would replace it with different wording instead, for the same reason.

← xrefWorking with tables →