# 9. Figures, tables and equations ## 9.1 Figures and panels A figure holds its panels, its caption and its notes. A panel's own content is its label only. Its image and region are evidence, not content: re-extracting the image at native resolution adds an asset and changes no hash. | Panel attribute | Holds | | --- | --- | | `image` | `{sha256, media_type, native, dpi?}`: the embedded image, at native resolution when the PDF holds one. | | `crop` | `{sha256, media_type, dpi}`: a crop of the panel's region at a fixed resolution. | | `figure_text` | `[{id, text, role, page_fp?, boxes?}]`: text found inside the panel, with `role` `axis-label`, `tick-label`, `legend`, `annotation` or `other`. | Text inside a figure is not prose and is not split into sentences. Its items have IDs ([4.2](04-identity.md#42-minting-node-ids)) so that a digitization can anchor its axis labels to them. A panel's region on the page is its location ([7.4](07-geometry.md#74-locationsjsonl)). ## 9.2 Tables A table holds its caption, an optional head, one body and its notes. Rows and cells are nodes, with all five values, so the gate, the hashes and the database treat them like any other node, and a cell is addressed like a sentence. Columns are defined in the table's `columns` attribute, each with an ID and a header path: the IDs of the header cells above it, outermost first. Header text is stored once, in the header cells. A row's `header_path` lists the cells that label it: a row-group header and the row's own header cell. A cell records its column, its spans and its role; the expanded grid is derived, never stored. So inserting a row that a reading dropped adds a row node and changes no other row's or cell's ID or hash, and fixing a header cell changes that cell, not the table. A table continued across pages is one table node; its pages are locations. For people, a cell can be shown as "Table 2, row CT–CT, column K_r" from its header paths. ## 9.3 Equations An equation keeps its source as written, `tex` from a conversion or `typst` from a draft, and its printed number as its `label`, so numbering never collides with a renderer's own. An equation that the source numbers line by line (Eq. 3a) has `equation-line` children, each with its own label and source. MathML is derived by a pinned tool and recorded, with the tool's name and version, in `derived/mathml.jsonl`.