Work in progress — this reference is being written in the open. Unfinished pages are excluded from search engines.
Paged · IDML Reference
Typography

Drop caps and tabs

DropCapCharacters / DropCapLines / DropCapDetail on a paragraph, and the TabList of TabStop records a Tab snaps to — with alignment, leaders, and the default tab grid.

Pro· reference

Two paragraph-level constructs move individual glyphs without touching the run model: a drop cap enlarges and hangs the opening characters, and a tab snaps the text after it to a stop in the paragraph's TabList.

In short: Both drop caps and tabs are configured on the ParagraphStyleRange. A drop cap uses DropCapCharacters (how many leading characters) and DropCapLines (how many lines tall) to lift the opening characters into an enlarged initial that the rest of the paragraph flows around. A tab needs a Tab marker in the run; at layout time the engine snaps the text after it to the next TabStop in the paragraph's TabList, honouring the stop's Position, Alignment, optional AlignmentCharacter, and optional Leader. When a tab passes every explicit stop, the engine falls back to a default 36 pt tab grid.

Two paragraph-level constructs change where individual glyphs land without touching the run model: a drop cap enlarges the opening characters and hangs them down several lines, and a tab snaps the text after it to a position set by the paragraph's tab stops. Both are configured on the ParagraphStyleRange; the tab also needs a Tab marker in the run to take effect.

Drop caps

A drop cap is described by two counts and a detail value on the ParagraphStyleRange. DropCapCharacters is how many leading characters become the drop cap; DropCapLines is how many lines tall it is. The renderer lifts that many characters into an enlarged initial sized to span that many lines, and flows the rest of the paragraph around it.

Attribute · ParagraphStyleRangeType / valuesSupportNotes
DropCapCharactersshort (0–150)SupportedHow many leading characters form the drop cap. 0 ⇒ no drop cap.
DropCapLinesshort (0–25)SupportedHow many lines tall the drop cap is.
DropCapDetailintSupportedInDesign’s drop-cap sizing/side-bearing detail; read alongside the two counts.

The example below is one paragraph that turns its first character into a three-line drop cap. DropCapCharacters="1" and DropCapLines="3" are the two counts; DropCapDetail="0" carries the side-bearing detail. The package parses to one paragraph and one run — the drop cap is a property of the paragraph, not a separate run.

A paragraph whose first character is lifted into a three-line drop cap.

Stories/Story_ustory.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<idPkg:Story xmlns:idPkg="http://ns.adobe.com/AdobeInDesign/idml/1.0/packaging" DOMVersion="20.0">
  <Story Self="ustory">
    <ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/$ID/[No paragraph style]" DropCapCharacters="1" DropCapLines="3" DropCapDetail="0">
      <CharacterStyleRange AppliedCharacterStyle="CharacterStyle/$ID/[No character style]">
        <Content>Once a paragraph carries DropCapCharacters and DropCapLines, the renderer lifts the leading characters into an enlarged drop cap that hangs down the named number of lines while the body text wraps around it.</Content>
      </CharacterStyleRange>
    </ParagraphStyleRange>
  </Story>
</idPkg:Story>

Tabs and tab stops

A Tab in a run is a single tab character (it sits alongside Content and Br as a leaf of the story tree). On its own it does nothing visible until the line is laid out; then the engine snaps the text after each tab to the next tab stop.

The stops live in a TabList inside the paragraph's Properties, each one a TabStop record. A TabStop carries a Position (in points from the column's left edge), an Alignment, an optional AlignmentCharacter for decimal-style stops, and an optional Leader string tiled across the gap the tab opens up:

Attribute · TabStop (inside ParagraphStyleRange › Properties › TabList)Type / valuesSupportNotes
Positiondouble (pt from column left edge)SupportedRequired — the stop’s location. A TabStop with no Position is dropped.
AlignmentLeftAlign | RightAlign | CenterAlign | CharacterAlignSupportedHow the segment after the tab snaps: starts at / ends at / is centred on / aligns its character on the stop.
AlignmentCharacterstring (default ".")SupportedFor CharacterAlign stops: the character in the segment that lands on the stop. Ignored otherwise.
Leaderstring (e.g. ".", ". ")SupportedTiled across the widened gap (TOC dot leaders). Empty / absent ⇒ no leader. Whole copies only; a leader wider than the gap emits none.

When a tab's pen position has already passed every explicit stop — or the paragraph defines no stops at all — the engine falls back to a default tab grid (every 36 pt). The alignment behaviours map directly:

  • LeftAlign — the segment after the tab starts at the stop.
  • RightAlign — the segment ends at the stop.
  • CenterAlign — the segment is centred on the stop.
  • CharacterAlign — the segment's first occurrence of the alignment character (the decimal point, typically) lands at the stop; a segment without that character falls through to left alignment.

If a stop's alignment can't be honoured without glyphs colliding — for example a RightAlign segment wider than the gap to the stop — the engine falls through to left alignment for that one tab so text never overlaps.

The example below is a single line — Chapter, a tab, Typography, a tab, 261 — with a two-stop TabList: a LeftAlign stop at 144 pt and a RightAlign stop at 432 pt with a dot Leader. It reads like a table-of-contents row. Note that the three Content chunks split by the two Tab markers collapse into a single run, so the package reports one paragraph and one run.

A table-of-contents-style line: a left tab, then a right tab with dot leaders.

Stories/Story_ustory.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<idPkg:Story xmlns:idPkg="http://ns.adobe.com/AdobeInDesign/idml/1.0/packaging" DOMVersion="20.0">
  <Story Self="ustory">
    <ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/$ID/[No paragraph style]">
      <Properties>
        <TabList type="list">
          <ListItem type="record">
            <TabStop Self="utab1" Position="144" Alignment="LeftAlign" AlignmentCharacter="." Leader=""/>
          </ListItem>
          <ListItem type="record">
            <TabStop Self="utab2" Position="432" Alignment="RightAlign" AlignmentCharacter="." Leader="."/>
          </ListItem>
        </TabList>
      </Properties>
      <CharacterStyleRange AppliedCharacterStyle="CharacterStyle/$ID/[No character style]">
        <Content>Chapter</Content>
        <Tab/>
        <Content>Typography</Content>
        <Tab/>
        <Content>261</Content>
      </CharacterStyleRange>
    </ParagraphStyleRange>
  </Story>
</idPkg:Story>

Frequently asked questions

How do you make a drop cap in IDML, and what controls its size? A drop cap is set on the ParagraphStyleRange with two counts: DropCapCharacters is how many leading characters become the drop cap, and DropCapLines is how many lines tall it is. DropCapDetail carries InDesign's sizing and side-bearing detail, read alongside the two counts. A DropCapCharacters of 0 means no drop cap.

Is a drop cap a separate text run? No. The drop cap is a property of the paragraph, not a separate run. In the example, a paragraph that turns its first character into a three-line drop cap parses to one paragraph and one run; the renderer enlarges and hangs the leading characters at layout time.

What does a Tab snap to when the paragraph has no tab stops? When a tab's pen position has passed every explicit TabStop — or the paragraph defines none — the engine falls back to a default tab grid at every 36 pt. Each explicit stop's Alignment maps directly: LeftAlign starts the segment at the stop, RightAlign ends it there, CenterAlign centres it, and CharacterAlign lands the alignment character (a decimal point by default) on the stop.

What is a tab leader, and how is it rendered? A Leader is a string tiled across the gap a tab opens up — the dot leaders in a table of contents, for instance. The engine emits whole copies only: a leader wider than the gap emits none, and an empty or absent Leader produces no leader. If an alignment can't be honoured without glyphs colliding, that one tab falls through to left alignment so text never overlaps.

On this page