Managing witnesses and textual variants

Unofficial ConTeXt Wiki mirror

Last modified: 2026-08-29

Work in progress.

This orientation page and the related guides are currently being drafted and reviewed. Please feel free to edit, correct, or improve them.

Critical apparatus guides: ← Guide 2 — Formatting a critical apparatus · Orientation · Glossary · Guide 3 of 6 · Next: Guide 4 — Using multiple apparatus layers →


A critical apparatus repeatedly refers to manuscripts, printed editions, and other textual witnesses. In a short example, sigla can be typed directly:

\reading{Judgment}{B D}

In a larger edition, this becomes fragile. The same witness may occur hundreds of times, its printed siglum may change, and its description may be needed in an introduction, a witness table, or a discussion of textual relationships.

This guide develops a small witness-management interface in ordinary ConTeXt. It separates:

The progression is:

Stage Problem Result
1 A siglum is repeated as literal text The witness is declared once
2 The source needs a stable name distinct from the printed siglum Identifier and siglum are separated
3 Apparatus entries need one or several declared witnesses Readings use reusable witness references
4 The apparatus must describe more than alternative wording Named commands represent omissions, additions, and other operations
5 Several witnesses repeatedly appear together Witness groups store and reuse that relationship

How this guide works. Each step adds one small layer to the same witness interface. The examples begin with a single declaration, then reuse it in apparatus entries before introducing lists, groups, and safeguards.

For definitions of the principal terms, see the Glossary of critical edition terms.

1. Understand the witness record

A useful witness declaration should distinguish four elements:

Element Function Example
Identifier Stable key used in the ConTeXt source ms-b
Siglum Short form printed in the apparatus B
Type General category of witness manuscript
Description Full human-readable identification Oxford, Bodleian Library, MS 567

The identifier and siglum are not the same thing. The source may continue to use ms-b even if the printed siglum later changes from B to Ox.

Editorial principle. The identifier belongs to the source structure; the siglum belongs to the printed edition. Keeping them separate allows the visible notation to change without rewriting every apparatus entry.

2. Declare and retrieve one witness

ConTeXt variables provide a compact way to store several fields under one identifier.

\define[4]\definewitness
  {\setvariables
     [witness:#1]
     [siglum={#2},
      type={#3},
      description={#4}]}
Argument Content
#1 Stable witness identifier
#2 Printed siglum
#3 Witness type
#4 Full description

Declare one witness:

\definewitness
  {ms-b}
  {B}
  {manuscript}
  {Oxford, Bodleian Library, MS 567}

Define three retrieval commands:

\define[1]\witness
  {\getvariable{witness:#1}{siglum}}

\define[1]\witnesstype
  {\getvariable{witness:#1}{type}}

\define[1]\witnessdescription
  {\getvariable{witness:#1}{description}}

At this stage, the declaration stores data only. Typography is controlled separately.

3. Control the appearance of sigla

Define one shared style:

\define[1]\witnessstyle
  {{\it #1}}

Then apply it in the retrieval command:

\define[1]\witness
  {\witnessstyle
     {\getvariable{witness:#1}{siglum}}}

To print every siglum in bold instead, redefine only:

\define[1]\witnessstyle
  {{\bf #1}}

Design principle. Witness declarations store editorial information. Commands such as \witnessstyle control its presentation. Metadata and typography should remain separate.

4. Declare a working set of witnesses

\definewitness{ms-a}{A}{manuscript}{Paris manuscript}
\definewitness{ms-b}{B}{manuscript}{Oxford manuscript}
\definewitness{ms-c}{C}{manuscript}{Cambridge manuscript}
\definewitness{ms-d}{D}{manuscript}{London manuscript}
\definewitness{editio-princeps}{E}{printed edition}{Basel, 1520}
\definewitness{revised-edition}{F}{printed edition}{Paris, 1542}

The identifiers are descriptive and stable. The apparatus remains compact because only the sigla are printed.

5. Use declared witnesses in readings

Define:

\define[2]\reading
  {#1 #2}

A single witness:

\reading
  {Judgment}
  {\witness{ms-b}}

Several witnesses:

\reading
  {Judgment}
  {\witness{ms-b}\space
   \witness{ms-d}}

The printed result is:

Judgment B D

The witness interface can now be combined with the apparatus commands from Building a simple critical apparatus:

6. Represent common textual operations

A reading supplies textual wording. A textual operation describes what happens to the text.

Command Function Example output
\omission Record absence of the lemma om. E
\addition Record additional wording add. and directs the will F
\transposition Record different word order transp. experience and reason D
\conjecture Record an editorial proposal Reason conj. Smith
\uncertainreading Mark uncertain transcription Judgment? C
\illegible Record illegible text illeg. D
\define[1]\omission
  {{\it om.} #1}

\define[2]\addition
  {{\it add.} #1 #2}

\define[2]\transposition
  {{\it transp.} #1 #2}

\define[2]\conjecture
  {#1 {\it conj.} #2}

\define[2]\uncertainreading
  {#1? #2}

\define[1]\illegible
  {{\it illeg.} #1}

Editorial caution. Abbreviations such as om., add., transp., and illeg. are not built-in ConTeXt meanings. They belong to the editorial conventions of the edition and should be documented there.

7. Process witness lists more compactly

\define[1]\processwitness
  {\witness{#1}\space}

\define[1]\witnesslist
  {\processcommalist[#1]\processwitness}

Then:

\witnesslist{ms-a,ms-b,ms-d}

prints:

A B D

Small implementation detail. The simple processor adds a trailing space. Check the final punctuation and spacing in the actual apparatus design.

8. Define reusable witness groups

\define[2]\definewitnessgroup
  {\setvalue{witnessgroup:#1}{#2}}

\define[1]\witnessgroup
  {\witnesslist{\getvalue{witnessgroup:#1}}}

Declare:

\definewitnessgroup{family-alpha}{ms-a,ms-b}
\definewitnessgroup{family-beta}{ms-c,ms-d}
\definewitnessgroup{all-editions}{editio-princeps,revised-edition}

Use:

\reading
  {Judgment}
  {\witnessgroup{family-alpha}}

Sometimes an edition prints a collective label instead:

\define[2]\definegrouplabel
  {\setvalue{witnessgroup:label:#1}{#2}}

\define[1]\grouplabel
  {\getvalue{witnessgroup:label:#1}}

\definegrouplabel{family-alpha}{\alpha}
Command Result
\witnessgroup{family-alpha} Prints the member sigla
\grouplabel{family-alpha} Prints the collective family label

Editorial meaning. A witness group should represent a documented relationship among witnesses, not merely a convenient abbreviation.

9. Add visible safeguards

A guarded group command can be written as:

\define[1]\witnessgroup
  {\doifdefinedelse
     {witnessgroup:#1}
     {\witnesslist
        {\getvalue{witnessgroup:#1}}}
     {{\bf [undefined witness group: #1]}}}

Likewise:

\define[1]\grouplabel
  {\doifdefinedelse
     {witnessgroup:label:#1}
     {\getvalue{witnessgroup:label:#1}}
     {{\bf [undefined group label: #1]}}}

Version check. Guarded tests involving variables should be compiled with the ConTeXt release used for the edition. These warnings are useful safeguards, but they are not a substitute for full dataset validation.

10. Reuse witness metadata outside the apparatus

\starttabulate[|l|l|p|]
\NC Siglum
\NC Type
\NC Description
\NC\NR
\HL

\NC \witness{ms-a}
\NC \witnesstype{ms-a}
\NC \witnessdescription{ms-a}
\NC\NR

\NC \witness{ms-b}
\NC \witnesstype{ms-b}
\NC \witnessdescription{ms-b}
\NC\NR
\stoptabulate

Changing a siglum centrally updates both the apparatus and the descriptive table.

11. Understand the data model

Information Example Meaning
Witness declaration \definewitness{ms-b}{B}{...}{...} Describes what the witness is
Apparatus evidence \reading{Judgment}{\witness{ms-b}} Records what the witness reads at one location
Witness group \definewitnessgroup{family-alpha}{ms-a,ms-b} Records a relationship among witnesses

The present macros remain a direct-composition interface. They do not yet provide automatic sorting, duplicate detection, witness-specific reports, filtering by operation, or export to another format.

Data model. Witness declarations describe sources; apparatus entries describe textual evidence at particular locations; group declarations describe relationships among witnesses.

12. Complete working example

13. What this guide has established

Mechanism Result
Witness declaration Store identifier, siglum, type, and description once
Witness retrieval Print the current siglum from a stable source identifier
Named textual operations Distinguish readings, omissions, additions, and other cases
Witness lists Process several identifiers more compactly
Witness groups Reuse documented relationships among witnesses
Safeguards Make undeclared identifiers or groups visible

What this guide has established. Witnesses can be declared once and referenced through stable identifiers. Their sigla, types, descriptions, groups, and associated textual operations can then be reused without hard-coding the same information throughout the apparatus.

14. Choose the next guide

Next task Continue with
Change the typography of the apparatus Guide 2
Create several independent note layers Guide 4
Compose an original text and translation in parallel Guide 5
Register, sort, filter, and validate critical records Guide 6
Process structured TEI critical data Building critical editions from TEI XML

Online resources

Related pages

Critical apparatus guides: ← Guide 2 — Formatting a critical apparatus · Orientation · Glossary · Guide 3 of 6 · Next: Guide 4 — Using multiple apparatus layers →