Matterhorn 16-001 · PDF/UA-1 UA1:7.6-1
A numbered list that does not say it is numbered
An L element whose items are numbered lacks the /ListNumbering attribute that tells the reader the numbering scheme.
The condition, as the protocol states it. “List is an ordered list, but no value for the ListNumbering attribute is present.”
Matterhorn Protocol 1.1, checkpoint 16, index 16-001, section UA1:7.6-1. The protocol marks this as requiring human judgement.
What a screen reader actually does
The reader cannot announce the list as ordered, so "step 3 of 7" becomes just another bullet.
What is in the file
A tagged list is four element types — L, LI, Lbl, LBody — and one attribute that belongs to the list as a whole. The attribute lives in an attribute object owned by List, on the L element:
30 0 obj
<< /Type /StructElem /S /L /P 9 0 R
/A << /O /List /ListNumbering /Decimal >>
/K [ 31 0 R 34 0 R 37 0 R ] >>
endobj
31 0 obj << /Type /StructElem /S /LI /P 30 0 R /K [ 32 0 R 33 0 R ] >> endobj
32 0 obj << /Type /StructElem /S /Lbl /P 31 0 R /K [ 4 ] >> endobj % paints "1."
33 0 obj << /Type /StructElem /S /LBody /P 31 0 R /K [ 5 ] >> endobj % the step itself
ISO 32000-1 defines ListNumbering with nine values. Four describe unnumbered lists — None, Disc, Circle, Square — and five describe numbered ones: Decimal, UpperRoman, LowerRoman, UpperAlpha, LowerAlpha. The default, when the key is absent, is None.
That default is the whole of this condition. A list labelled 1, 2, 3 with no /A entry, or with an attribute object that has no ListNumbering key, is a list that says, in its structure, that it has no numbering.
What a reader loses
Less than you might expect, and something real.
When the numbers are painted on the page and tagged inside Lbl, a screen reader that reads labels reads them as text. “1. Submit the form. 2. Pay the fee.” is usually still heard, because the digits are content and content is read. The failure is not that the numbers vanish.
What goes is the declaration. Anything that rebuilds the list from the structure tree rather than from the painted characters — a conversion to another format, a reader presenting the list in its own list mode — is told by the file that the list is unordered. A reader that would announce what kind of list it has entered has nothing to announce.
The less visible cost is that the document now disagrees with itself: labels that count, and a list that says it does not. A checker can find that; a person reviewing the page by eye cannot.
Where it comes from
Lists built by hand. Acrobat’s New Tag command asks for a type and a title and creates the element. An L made that way has no attribute object until somebody adds one.
Generators that write the four element types and stop. The grammar — L holding LI, LI holding Lbl and LBody — is what most validators and Acrobat’s own checker look at, so a tool can get it exactly right and never write an attribute.
Retagging. A run of numbered paragraphs turned into a list after the fact, by hand or by a tool, starts with no attributes either. That is condition 16-003 being fixed and this one being created.
How to check it free
Acrobat Pro’s Tags panel. Open it from the hamburger menu (Windows) or the View menu (macOS): Show/Hide → Side Panels → Tags (the current interface labels it Accessibility tags). Select the <L>, choose Properties from the Options menu, and on the Tag tab click Edit Attribute Objects. No attribute object, or one with no ListNumbering key, is the condition.
Not Acrobat’s Accessibility Checker. Its list rules are List items and Lbl and LBody, both structural, per Adobe’s description of the checker.
Not veraPDF either. Its PDF/UA-1 rule set has no rule under clause 7.6, which is consistent with the protocol marking this a judgement.
Reading the objects. qpdf --qdf --object-streams=disable in.pdf plain.pdf writes a copy whose objects are plain text. Search it for /S /L and look at the dictionary around each hit for /ListNumbering.
How to fix it free, in Acrobat Pro
Adobe documents the attribute-object dialog in its Tags panel guide, using table cell spans as the example. The steps for a list are the same with a different owner and key:
- In the Tags panel, select the
<L>element and choose Properties from the Options menu. - On the Tag tab, click Edit Attribute Objects.
- Select Attribute Objects, then New Item. Acrobat creates an attribute object dictionary.
- Expand it, select the owner entry — it is created as
Layout— and click Change Item. ChangeLayouttoList. - Select the dictionary again, click New Item, and in Add Key And Value enter
ListNumberingas the key andDecimal(or the scheme that matches the labels) as the value. Adobe’s example sets Value Type to Integer for a span count; this value is a name, so choose the name type, not text.
Repeat for each numbered list. There is no batch command for it.
If the document is exported from a source file, do not assume a re-export fixes this: check one exported list with the steps above first. A producer that left the attribute out once will leave it out again.
Where Taggart differs
Taggart decides whether a list is ordered from its labels, read as a reader would meet them: the text the Lbl paints on the page, or its /ActualText where it has one. If at least 60% of an L’s labels — and at least two — look like enumerators (1., 2), iv, B.), the list is ordered, and a missing ListNumbering is reported:
This list has numbered item labels but no /ListNumbering attribute, so the reader cannot announce the numbering scheme.
A list whose labels are bullets is unordered and is not reported. So is a list with no Lbl elements, or with labels that are neither clearly numbers nor clearly bullets: there the heuristic has nothing to go on, and the judgement the protocol asks for stays with you.
The repair is list-numbering, which is in “Fix All Safe”. It writes /A << /O /List /ListNumbering /Decimal >> — or adds the key to the attribute object already there — and logs each list it touched:
page 1 StructTreeRoot[0]/Document[0]/L[1]: set /ListNumbering /Decimal
The scheme comes from the labels. Digits give Decimal. A list whose first label is i or I, or whose labels are roman numerals longer than one letter, gets LowerRoman or UpperRoman. Any other single letter gives LowerAlpha or UpperAlpha, so a list lettered c., d., e. is alphabetical even though c and d are also roman digits. The repair acts on exactly the lists the check recognises as ordered, and the change log is where to confirm it read each one the way you would.
The finding is a warning, and in the application it also sits in the review queue, where you can record that a flagged list is not in fact numbered.
How Taggart handles it
The protocol marks this condition as needing human judgement, so no validator can decide it outright. Taggart applies a heuristic to find the likely cases and reports each one as warning for you to settle in the review queue. A heuristic finds what it was built to find and can miss the rest; what this one looks for is described above.
The fix is Set ListNumbering. It is mechanical, so “Fix All Safe” applies it along with the others in one pass and lists what it changed. Your original file is never modified.
Whatever Taggart changes, the page still looks identical. Fixes edit the PDF object model, not the content streams, and every remediation is re-rendered and compared against the original at structural similarity ≥ 0.999 before you get the file back. A tool that quietly reflows your document is worse than no tool.
Frequently asked questions
The numbers are in the Lbl tags already. Why is that not enough?
Because the labels are content and ListNumbering is structure. A reader that speaks the label reads "1." like any other text, so the digits usually survive. What is missing is the list's own statement of its scheme, and in its absence the PDF specification's default applies: None, meaning no numbering at all.
Which value should I use?
The one that matches the labels: Decimal for 1, 2, 3; LowerAlpha or UpperAlpha for letters; LowerRoman or UpperRoman for i, ii, iii. It is a PDF name, /Decimal, not the text (Decimal). Choosing among them, and the values that are not permitted, is condition 16-002.
Why does the protocol leave this to a person?
Whether a list is ordered is a fact about what it means. Steps in a procedure are ordered; a list of committee members that happens to be numbered may not be. A tool can guess from the labels, and Taggart does, but the protocol marks the condition as a human judgement and Taggart reports it as a warning.
Does Acrobat's Accessibility Checker find this?
No. Its two list rules check that every LI sits in an L and that an LI holds only Lbl and LBody. Neither looks at the list's attributes, so a list with no ListNumbering passes both.
Where this sits in the standards
| Standard | Reference |
|---|---|
| Matterhorn Protocol 1.1 | Checkpoint 16 (Lists), index 16-001 |
| PDF/UA-1 (ISO 14289-1) | Clause 7.6-1 |
| WCAG 2.1 | 1.3.1 Info and Relationships — Level A |
| EN 301 549 / Section 508 / ADA Title II | All three point at WCAG 2.1 Level AA for non-web documents, so a Level A or AA criterion here is in scope for each of them. |
Related conditions
- 16-002 ListNumbering value is not one of the permitted valuesListNumbering is present but carries a value outside the permitted set — often /None or /Disc on a genuinely ordered list.
- 16-003 Content is a list but is not tagged as a listBulleted or numbered content is a run of paragraphs, with the bullet characters sitting in the text as literal glyphs.
- 09-005 A list-related structure element does not conform to ISO 32000-1, Table 336The list grammar is broken: an LI outside an L, an Lbl or LBody outside an LI, a list item with no LBody.
Other conditions in checkpoint 16
Checkpoint 16 covers lists. These are its other failure conditions; the ones without a link are in the rule set but do not have a written page yet.
- 16-002 ListNumbering value is not one of the permitted valuesListNumbering is present but carries a value outside the permitted set — often /None or /Disc on a genuinely ordered list.
- 16-003 Content is a list but is not tagged as a listBulleted or numbered content is a run of paragraphs, with the bullet characters sitting in the text as literal glyphs.
Check your own file. Taggart’s validator is free and unlimited — 75 of the 87 Matterhorn conditions software can decide, with the other 12 listed for you to confirm; no watermark, no expiry, and no account needed up to 60 pages.
Checked with Taggart on a generated file that fails this condition on . The Acrobat steps follow Adobe’s documentation and were not walked through by hand. Last updated .