How a table sits in a story as its own paragraph's content, ends with that paragraph's Br, breaks across threaded frames, repeats headers and oversets.
ProIII·explanation
A table is part of the text flow: it is the content of a paragraph, draws where that paragraph lands, and breaks across frames between rows.
In short A <Table> sits inside a <CharacterStyleRange> of a paragraph, normally as that
paragraph's only content. The paragraph before it ends with its <Br/>, and when text follows
the table, a <Br/> right after </Table> ends the table's paragraph. The table draws where
its paragraph lands as the story flows through its frames. When it does not fit, it continues
in the next frame of the thread, breaking between rows, with its header and footer rows repeated.
Rows that no frame can hold are overset.
Because a table rides on a paragraph, it has no position of its own. It starts where its
paragraph starts: at the paragraph's place in the column, after the text above it. Whatever
follows the table in the story continues below it. Moving the paragraph moves the table.
The table's paragraph follows the paragraph model
like any other: its mark is the last thing in it, after </Table>, inside the same
<CharacterStyleRange>. Without that <Br/>, the text after the table would be part of the
table's paragraph. A table at the very end of a story needs no mark, like any last paragraph.
The paragraph's attributes still apply to the table as a whole. Its alignment places a table that
is narrower than the column, and its space before and after separate the table from its
neighbours, together with the table's own SpaceBefore and SpaceAfter.
In Paged: a table that shares a <CharacterStyleRange> with the text paragraphs before and
after it is currently drawn after the following text instead of between the paragraphs. Writing
the table's paragraph in a range of its own, as the example does, places it correctly. This is a
known engine issue.
A story can be threaded through a chain of
frames. A table taller than the room left in its frame continues in the next frame of the chain:
the first frame holds as many rows as fit, and the rest follow at the top of the next. A table
breaks between rows. A row with KeepWithNextRow="true" moves to the next frame together with
the row after it, and a row with StartRow set starts in the next column, frame or page.
Header rows repeat at the top of each continuation and footer rows at the bottom of each part but
the last; see the table model for BreakHeaders,
BreakFooters, SkipFirstHeader and SkipLastFooter.
In Paged: a table breaks between rows across the frames of its thread, honouring
KeepWithNextRow, and repeats its header and footer rows once per frame. A row is never split
across frames. Supported · verified
When the last frame of the thread cannot hold the remaining rows, they are overset: they stay in
the story but are not drawn, exactly like overset text.
In Paged: rows the last frame cannot hold are overset and reported, following InDesign's own
output for tables that do not fit. Supported · verified
How is a table positioned on the page?
It is not positioned directly. It is the content of a paragraph and draws where that paragraph
lands in the story's frames.
Does the paragraph that holds a table need a <Br/>?
Yes, when more text follows. The <Br/> comes right after </Table>, in the same
<CharacterStyleRange>, and ends the table's paragraph. A table at the end of the story needs
none.
What happens when a table is taller than its frame?
It continues in the next frame of the thread, breaking between rows. Header and footer rows
repeat in each part. Rows that no frame can hold are overset.
Can I keep two rows together across a frame break?
Yes. Set KeepWithNextRow="true" on the first <Row>, and the two rows always share a frame.