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

Paragraph styles

The ParagraphStyle element and its key attributes — identity, the BasedOn parent, font and size defaults, alignment, indents, and spacing — plus the RootParagraphStyleGroup that holds them.

Pro· reference

A paragraph style is the most attribute-rich style in IDML, carrying both paragraph geometry and the character defaults a paragraph's text starts from.

In short: A <ParagraphStyle> defines how a whole paragraph is formatted — its alignment, indents, and spacing — and the font, size, and fill its text falls back on when no character style sets them. Every paragraph style lives in <RootParagraphStyleGroup> inside Resources/Styles.xml, is keyed by its Self id regardless of any group nesting, and inherits from a parent through BasedOn down to the uneditable [No paragraph style] root. This page is the attribute reference for the fields our parser reads; for how those fields combine with parents and local overrides, see the cascade.

A <ParagraphStyle> is the most attribute-rich style in IDML. It carries both paragraph geometry (alignment, indents, spacing) and the character defaults a paragraph's text starts from (font, size, fill), so a run that applies no character style still has a complete set of values to fall back on. This page is the attribute reference for the fields our parser reads; for how they combine with parents and local overrides, see the cascade.

Where they live

Every <ParagraphStyle> sits inside <RootParagraphStyleGroup> in Resources/Styles.xml. InDesign may nest user styles inside intermediate <ParagraphStyleGroup> elements for organisation; the parser flattens these — it keys every style by its Self id regardless of grouping, so a group's nesting does not affect resolution. Two default styles are always present: the editable "Normal Paragraph Style" and the uneditable root, ParagraphStyle/$ID/[No paragraph style], which is the bottom of every cascade.

<RootParagraphStyleGroup>
  <ParagraphStyle Self="ParagraphStyle/$ID/[No paragraph style]"
                  Name="$ID/[No paragraph style]"
                  AppliedFont="Open Sans" PointSize="12" FillColor="Color/Black"/>
  <ParagraphStyle Self="ParagraphStyle/Body" Name="Body"
                  BasedOn="ParagraphStyle/$ID/[No paragraph style]"
                  PointSize="14" SpaceAfter="6"/>
</RootParagraphStyleGroup>

Identity and inheritance

Attribute · ParagraphStyleType / valuesSupportNotes
Selfstring idSupportedThe style id, e.g. "ParagraphStyle/Body". What a paragraph references via AppliedParagraphStyle. A colon in the name encodes as %3a inside Self.
NamestringParsed, not yet renderedHuman-readable name; the [No paragraph style] root uses the $ID/ form. Informational — resolution keys on Self, not Name.
BasedOnstring idSupportedThe parent style id, or the root sentinel. May also appear as a <BasedOn> child inside <Properties>; both forms are read. Drives the cascade.

Character defaults

These carry the font, size, and colour a paragraph's text starts from. They are the same attributes a character style can override, and a run can override again locally. AppliedFont may appear as an attribute or as an <AppliedFont> child inside <Properties>.

Attribute · ParagraphStyleType / valuesSupportNotes
AppliedFontstring (font family)SupportedFont family name. Attribute or <AppliedFont> Properties child. The renderer resolves it against the fonts supplied to it.
FontStylestring (e.g. "Regular", "Bold")SupportedNamed face within the family.
PointSizedouble (pt)SupportedType size in points.
FillColorstring (Color/Swatch id)SupportedGlyph fill; a reference into Resources/Graphic.xml.
FillTintdouble (0–100%)SupportedFill tint percentage; absent means use the swatch at full strength.
StrokeColorstring (Color/Swatch id)SupportedGlyph outline paint. "Swatch/None" normalises to unset so the cascade can fall through.
StrokeWeightdouble (pt)SupportedOutline weight when StrokeColor resolves.
Trackingdouble (1/1000 em)SupportedInter-glyph spacing added to every advance; divide by 1000 for the em fraction.
CapitalizationNormal | SmallCaps | AllCaps | CapToSmallCapSupportedAllCaps uppercases before shaping; SmallCaps approximated until OpenType smcp lands.
PositionNormal | Superscript | Subscript | OTSuperscript | OTSubscriptParsed, not yet renderedBaseline position; captured but scaling/shift not yet applied.
UnderlinebooleanSupportedUnderline decoration.
StrikeThrubooleanSupportedStrike-through decoration.

Paragraph geometry

Justification is parsed into a typed enum; an unrecognised value falls through to the cascade (effectively left-aligned). The binding-aware values ToBindingSide / AwayFromBindingSide are accepted and treated as LeftAlign / RightAlign because binding side is not yet plumbed through.

Attribute · ParagraphStyleType / valuesSupportNotes
JustificationLeftAlign | CenterAlign | RightAlign | LeftJustified | CenterJustified | RightJustified | FullyJustified | ToBindingSide | AwayFromBindingSideSupportedHorizontal alignment. FullyJustified currently composes like LeftJustified; binding-aware values fall back to Left/Right.
FirstLineIndentdouble (pt)SupportedExtra indent on the first line of the paragraph.
SpaceBeforedouble (pt)SupportedVertical space added above the paragraph.
SpaceAfterdouble (pt)SupportedVertical space added below the paragraph.
HyphenationbooleanSupportedIDML default is true; an explicit false disables the hyphenator for the paragraph.
AppliedLanguagestring (e.g. "$ID/English: USA")SupportedPicks the hyphenation dictionary; unknown values fall back to English-US.
MinimumWordSpacing / DesiredWordSpacing / MaximumWordSpacingdouble (% of normal)SupportedJustification word-spacing range; drives the composer's shrink/stretch ratios.
DropCapCharacters / DropCapLinesshortSupportedNumber of leading characters that drop, and how many lines they span.

The parser reads a number of further families off <ParagraphStyle> — a <TabList> of <TabStop> children, bullets-and-numbering attributes (BulletsAndNumberingListType, NumberingExpression, NumberingFormat, …), letter/glyph-spacing knobs, paragraph shading / rules / borders, and CJK kinsoku / mojikumi references. Those belong to the typography and lists chapters; this page covers the core formatting an ordinary paragraph applies.

One attribute is read and deliberately not acted on: NextStyle. It only affects which style InDesign applies to the next paragraph as you type, so it has no bearing on rendering an existing document. Parsed, not yet renderedNextStyle (authoring-only)

Frequently asked questions

What is the difference between a paragraph style and a character style? A paragraph style formats a whole paragraph — its alignment, indents, and spacing — and also carries the character defaults (font, size, fill) its text starts from. A character style formats only a run inside a paragraph and usually sets just the few attributes that differ from the surrounding text.

Where do paragraph styles live in an IDML package? Every <ParagraphStyle> sits inside <RootParagraphStyleGroup> in Resources/Styles.xml. InDesign may nest user styles inside intermediate <ParagraphStyleGroup> elements, but the parser flattens these and keys every style by its Self id, so grouping does not affect resolution.

What does a paragraph reference to get its formatting? A paragraph names its paragraph style through AppliedParagraphStyle, whose value is the style's Self id. The parser then resolves that style down its BasedOn chain to a full set of values.

Are there paragraph-style attributes the parser reads but does not render? Yes. NextStyle is authoring-only — it only affects which style InDesign applies to the next paragraph as you type — and Position is captured but not yet scaled or shifted. Both are flagged as parsed-not-rendered in the tables above.

On this page