PubSuite Classic

PubSuite Classic is a professional XML-to-PDF editor. You write your document in a structured XML format, style each element through the sidebar panels, and export a pixel-perfect PDF — with a live preview that matches the output exactly.

Getting Started

When you open the editor you see three main areas:

Sidebar
Controls
XML Editor
Source
Live Preview
PDF output
  • Sidebar — tabs for every document setting: Doc, Styles, H/F, TOC, FN (footnotes), Assets, A11y (accessibility & metadata), Map, Inline, Presets.
  • XML Editor — Monaco-powered editor with syntax highlighting. Every change re-renders the preview in real time.
  • Live Preview — a canvas rendering that matches the exported PDF exactly. Click any text block to edit it inline.

Toolbar

ButtonWhat it does
New / Save / LoadStart a blank document, save the project to a .json file, or open one — see Projects
↓ PDFExport the document — see PDF Export
− / + / FitZoom the preview
🔍Find & Replace, in the XML source or in the rendered document (Ctrl+H)
ΩSpecial character picker
◀ (edge of the XML editor)Hides the XML editor so the preview gets the full width; click again to bring it back
Sun / moon iconLight / dark mode (remembered in this browser)
AI / ⚙Open the AI Assistant and its settings
Note: PubSuite Classic uses XML, not Markdown or HTML. The tag names you invent become your style names — <paragraph>, <heading1>, <pullquote> — and you style each one in the Typography panel.

Simple Mode

The Simple / Advanced switch in the top toolbar changes how much of the editor you see. Simple mode is a word-processor surface on the same engine: the XML editor and the advanced panels are hidden, and a ribbon sits above the page. The document itself is untouched — nothing is converted, and you can switch back and forth at any time.

The mode is saved with the project, so a document opens the way you left it. New documents start in Simple; projects saved before this existed open in Advanced.

The ribbon

Undo and redo · paragraph style · font · size · bold, italic, underline · text colour · alignment · line spacing · bulleted and numbered list · nest and un-nest · indent · insert image, table, columns, link, footnote, page break · table of contents on/off · special character.

Lists

The list buttons turn the current paragraph into a bulleted or numbered item, and turn it back if you press the same button again. Once you're in a list:

  • Enter continues the list at the same level.
  • Enter on an empty item steps out one level, and leaves the list entirely from the top level.
  • Tab nests the item, Shift+Tab lifts it back out (the ribbon's ⇥ and ⇤ do the same).

Nesting is stored as <listitem level="1">, so it is visible and editable in the XML too. Each level indents further and cycles the bullet glyph (•, ◦, ▪) or the counter format (1, a, i). Numbering restarts for a nested level and continues where it left off when you come back out.

Links, footnotes and page breaks

Select some text and press 🔗 to turn it into a link — type the address and it's tidied up for you, so example.com becomes https://example.com and an email address becomes a mailto: link. With nothing selected, the link is inserted as its own paragraph. ⌗ opens the cross-reference menu: refer to an anchor (its page number is printed and kept up to date), place a new anchor where you are, mark the selected word as an index term, or drop the generated index into the document. fn drops a footnote at the cursor, ⤓ inserts a page break after the current block, and ☰¶ switches the table of contents on and off (which tags it lists is set in the TOC tab).

How formatting works

As in Google Docs, the ribbon edits the style of the selected paragraph's tag: change the font while a Heading 1 is selected and every Heading 1 follows. The ribbon says which style it just changed, so this is never a surprise. Bold, italic and underline are the exception — with text selected they wrap only that text, exactly as they do in Advanced mode.

Styles available

Normal text, Title, Heading 1–3, Quote, and bulleted or numbered list items, plus images, tables and columns from the ribbon. The first time you use Simple mode, any of these that don't exist yet are created with sensible defaults; styles you already have are never overwritten. A document that uses other tags still renders, and the dropdown shows that tag as Custom rather than mislabelling it.

Format panel

The Format tab shows the style of the block you're in: font, size, line spacing, alignment, space before and after, left and first-line indent, text colour, and Reset this style. It names the tag it edits, and changes reach every block with that tag.

Setup panel

The Setup tab holds the document-wide typography that Simple mode otherwise hides:

  • Reference points — top margin reference, space before "until", space after "from", and the font size reference (what a size in points actually measures: em, cap height or x-height).
  • Base text — the base font and size everything inherits from.
  • Styles — the font and size of Normal text, Title, Heading 1–3, Quote and the two list styles, in one table.

These are the same settings as the Styles tab's Base Settings in Advanced mode, so changing one changes the other.

Editing

Ctrl+B, Ctrl+I and Ctrl+U work on the canvas and wrap the selected text, as the toolbar buttons do. The slash menu and the block toolbar's tag picker only offer the simple styles (plus whatever the block already is, so an Advanced document is never mislabelled). Pressing New in Simple mode starts a blank page with one empty paragraph rather than the sample document.

Panels

Format and Setup sit first in the sidebar, followed by Doc (page size, margins, editor behaviour, spelling), Styles, H/F, TOC, FN and Assets. Map, Inline, Presets and A11y are hidden — switch to Advanced for those.

XML Editor

The editor uses Monaco (the engine behind VS Code) with full XML syntax highlighting, bracket matching, and auto-indentation.

Basic Document Structure

<?xml version="1.0"?>
<document>
  <heading1>Chapter One</heading1>
  <paragraph>Your text goes here.</paragraph>
  <heading2>A Sub-heading</heading2>
  <paragraph>More text.</paragraph>
</document>
The root element doesn't have to be named <document> — any single root element works, and inner tag names are entirely up to you (see XML Reference). This means XML written for another tool or schema can usually be pasted in as-is.

Inline Markup

TagResultExample
<b>Bold<b>important</b>
<i>Italic<i>emphasis</i>
<u>Underline<u>link text</u>
<strong>, <em>Same as <b> and <i><em>emphasis</em>
<super> / <sub>Superscript / subscriptE = mc<super>2</super>, H<sub>2</sub>O
<span>Override colour, font (face) or size (size, in pt) for a few words<span color="#c00" size="14">red</span>
<a> / <link>Hyperlink — blue and underlined, and clickable in the exported PDF<a href="https://example.com">our site</a>
<br/>Line break inside the same blockLine one<br/>Line two
<fn> / <footnote>Footnoteword<fn>This appears at the bottom.</fn>
<index>Renders the word normally and records it for the back-of-book index<index>typography</index>
<ref/>Page reference to an <anchor> — see Tables, Links & Indexsee <ref id="fig1"/>

Keyboard Shortcuts

ShortcutAction
Ctrl+ZUndo
Ctrl+Shift+ZRedo
Ctrl+FFind in editor
Ctrl+HFind & Replace
Ctrl+/Toggle comment
Alt+Shift+FFormat / pretty-print XML
Ctrl+Shift+XOpen the XML tag reference browser (searchable list of suggested tags)

Live Preview

The preview renders your document exactly as it will appear in the exported PDF — same fonts, same layout engine, same measurements.

  • Click to edit inline — click any text block to edit directly without switching to the XML editor.
  • Zoom controls — use the − / + buttons, or Fit to fit the page width.
  • Page count — shown in the toolbar. Long documents paginate automatically.
  • Real-time update — the preview refreshes as you type, after a short debounce delay.

Editing on the Canvas

You can write and restructure the whole document from the preview without touching the XML — every edit made on the canvas is written back into the XML, which stays the single source of truth.

Typing

KeyAction
EnterStarts a new block after the current one. Which tag it gets is set under Doc → Editor Behavior: a fixed default tag, or Ask each time (a tag picker appears)
Shift+EnterLine break inside the same block (inserts <br/>)
/ in an empty blockOpens the slash menu — keep typing to filter, then pick a tag to turn the block into
Ctrl+ASelect all text in the current block
Ctrl+C / Ctrl+X / Ctrl+VCopy, cut, paste
Ctrl+Z / Ctrl+Shift+Z or Ctrl+YUndo / redo
Shift + arrows, Home, EndExtend the selection; Ctrl+Home / Ctrl+End jump to the start / end of the block
Esc or TabStop editing the block

Block Toolbar

Selecting a block shows a small floating toolbar: B / I / U wrap the selected text in <b>, <i> or <u>; changes the block's tag (style); ⧉ duplicates and ✕ deletes the block; + ↑ / + ↓ insert a new block before or after it; and ⠿ moves it — drag it up or down, or just click it to enter place mode and then click where the block should go (Esc cancels).

Three buttons open menus for adding content around the selected block:

  • 🖼 Image — shows the images loaded under Assets as thumbnails. Pick one, pick a width (full width, 75%, 50%, 25% or the image's own size) and insert it before or after the block. The height is worked out from the image's real proportions, so it is never stretched.
  • ▦ Table — with a normal block selected, drag across the grid to choose the size (up to 6 × 8), set a header row, a header column, cell padding, font size, alignment and whether cells start empty or with placeholder text, then insert. With a table selected, the same button becomes the table tools: add a row above or below, add a column left or right, delete the last row or column, switch the header row or header column on and off, and change padding, size, alignment and vertical alignment. Cell text is edited on the canvas like any other text.
  • ▥ Columns — turns the block into a two, three or four column layout by wrapping it in a <columns> container, together with an empty paragraph you can click into and start typing. When the block is already in a container, the menu edits that container instead: column count, gap, balanced heights and a column rule with its own width and colour, or remove the columns again. It also has + Paragraph here and ↦ Column break here for filling the columns, and the selected tag's own flow options — column break before or after.

Selecting Several Blocks

Right-clicking a block opens a menu with change tag, duplicate, insert before or after, copy block XML, paste block, and delete — the way to move a whole block with all its markup somewhere else.

Alt+click (Cmd+click on Mac) selects a block; add Shift to extend the selection to a range of blocks. With several blocks selected, changing the tag from the toolbar changes all of them at once.

Canvas ↔ XML Sync

Whatever you select on the canvas is highlighted in the XML editor, which scrolls to it — so you always know which tag you're working on. This also works for metadata values rendered from your <metadata> block: selecting one jumps to its own tag (for example <publisher>), not the whole metadata container.

Find, Replace & Special Characters

Find & Replace

Open with Ctrl+H or the 🔍 button. Search in chooses between the XML source (matches include tags and attributes) and the Document (canvas) (matches only the visible text, and each hit is selected on the preview). Options: Case sensitive and Regex, then Find next / Find prev / Replace / Replace all. Replacements are always applied to the XML, so both views stay in sync.

Special Characters

The Ω button opens a character picker grouped into Quotes, Dashes, Latin, Extended, Greek, Math, Currency, Arrows and Misc. Clicking a character inserts it at the cursor.

Spell Check

Switch it on under Doc → Spelling. Misspelled words get a red wavy underline in both the XML editor and the preview, the way a word processor marks them.

Dictionaries

Spell checking uses Hunspell dictionaries — the same ones LibreOffice uses — through the open-source Typo.js library. Pick a dictionary in the Dictionary list (English US and GB, German, French, Spanish, Italian, Portuguese, Dutch, Polish, Russian, Croatian). The first time a dictionary is used it is downloaded (a few hundred KB) and then kept in the browser cache; the status line under the list tells you where it's up to. Nothing is sent anywhere — all checking happens in your browser.

Fixing a word

  • In the preview — right-click the underlined word (or Ctrl/Cmd+click) for a menu of suggestions, plus Ignore all and Add to dictionary. A normal left-click still just places the cursor, so marked words stay editable as usual.
  • In the XML editor — put the cursor in the word and open the quick-fix menu (Ctrl+., or the lightbulb) for the same suggestions and actions.

Corrections are written into the XML source, so both views update together and the change can be undone like any other edit. Inline markup around the word is left alone.

What isn't checked

Tag and attribute names, comments, words containing digits, single letters, URLs, email addresses and file names are skipped. Words in ALL CAPS or capitalised at the start of a sentence are not flagged just for their case.

Your own words

Add to dictionary stores a word under Doc → Spelling → Added words, where you can also type words in directly or remove them. Added words are saved with the project and remembered in this browser. Ignore all silences a word until you reload.

Outline & Word Count

The Outline tab in the sidebar, available in both modes, shows how long the document is — words, characters, pages, blocks and a reading estimate — and lists its headings with the page each one landed on. Clicking a heading scrolls the preview to it and selects it in the XML editor.

Headings are the tags you listed in the TOC tab; if you haven't configured a TOC, the usual names (title, heading1–heading4, chapter, section) are used instead. The numbers come from the rendered layout, so they describe what is actually on the page.

Document Panel

The Doc tab controls the page itself, how the canvas editor behaves, and spell checking. Base font and size sit in the Styles tab.

Page Size & Margins

Pick a preset (A4, Letter, A3, A5, Legal) or Custom… and set width and height in mm, in, pt or px. Margins can be set independently on all four sides, with their own unit.

Editor Behavior

Enter key creates decides what pressing Enter on the canvas does: always create a block with the Default tag you set here, or Ask each time.

Spelling

Switch spell checking on or off, choose a dictionary, and manage your added words — see Spell Check.

Document Metadata

Title, author, subject, keywords, date, and language now live in the A11y tab, alongside PDF/UA accessibility settings — see Accessibility & Metadata. This keeps document metadata in one place, since it's tied to XML detection and PDF export in ways page settings aren't.

Typography & Styles

The Styles tab defines how each XML tag looks. Every tag can have its own style. It opens with the document-wide settings below, followed by one card per tag.

Base Typography

  • Base font — default font for any tag without its own style. Built-in: Helvetica, Times-Roman, Courier.
  • Base size — default font size in pt.
  • Smart quotes — converts " and ' to typographic quotes.
  • Ligatures — enables fi, fl, ff ligature substitutions for uploaded OpenType fonts.
  • Top reference — controls whether line leading is measured from cap height, x-height, or full em.
  • Base size height ref — like a style's height reference: whether the base size means the full em, cap height, or x-height.
  • Top Margin Reference — which part of the first line sits exactly on the top margin: Leading Box Top (standard) — the top of the line's full leading box, the classic placement kept for older documents — or the em height, cap height, or x-height.
  • Default space-before / space-after reference — where a block's space before is measured to (leading box top, em top, cap height, x-height) and space after is measured from (leading box bottom, baseline, descender). Applies to every tag that doesn't override it in its own style.
  • Typographic quotes and Metric leading — typographic punctuation handling, and line spacing based on the font's real metrics rather than a flat multiple of the size.

Styles Buttons

  • Detect Tags — adds a style for every tag used in your XML that doesn't have one yet.
  • Format XML — pretty-prints the XML source.
  • Replace fonts — swaps one font for another everywhere it is used, in one step. Pick the font to replace (the list shows only fonts the document actually uses, with a count), pick or type its replacement, and tick where it should apply: the base font, style cards (including bullet, counter and drop-cap fonts), header and footer zones, the table of contents, footnotes, master page overrides, and any font= or face= written into the XML. Groups the font doesn't appear in aren't offered. The change lands on the undo stack like any other edit.
  • Export JSON — saves all your styles to a .styles.json file, together with the Map tab's tag and context mappings and the Inline tab's rules. Only styling is saved — no XML, page setup, fonts or images (use Save for a whole project).
  • Import JSON — loads styles into the current project from a styles export, or from a single style saved with a style card's ↓JSON button. Imported styles are added to the ones you have; a style with the same tag name is replaced. If the imported styles use fonts this project doesn't have, you're told which ones to upload under Assets.
  • Clear All — removes every style definition.

Style Properties

PropertyDescription
Font / Size / UnitFont family, size, and unit (pt, mm, in, or px)
Height referenceWhether the size above means the full em, cap height, or x-height — lets two different fonts line up visually at the size you actually care about
Bold / ItalicWeight and style
ColorHex color for the text
Letter spacingExtra space added between characters, in pt (Advanced Settings)
AlignmentLeft, center, right, or justify
Line spacingSet as a × multiplier (1.0 = single, 2.0 = double), a % percent of the size, or an absolute distance
Space before / afterVertical space around the block, with its own unit. Space before — until and Space after — from override the document default reference points; Space after — match leading of style makes the gap equal to another style's line spacing, so text snaps back onto the same rhythm
First-line indentIndent for the first line only
Left / Right indentBlock indent from the margin
HyphenationAuto-hyphenate long words at line breaks
Keep with nextPrevents a page break between this block and the next
Text transformUppercase, lowercase, or capitalize, without changing the XML text
Drop capNumber of lines the first character spans (0 = off), with its own font and a Cap align ref for how its top lines up with the first line
First / Last of type — use styleGive the first (or last) block of a run of the same tag a different style — for example, no first-line indent on the first paragraph after a heading
Page break if fewer than N lines fitMoves the next block to a new page when fewer than N of its lines would fit after this one
ColumnsNumber of text columns within this block
Running titleText to show in the header/footer for sections using this style
Section numbering levelNumbers this tag automatically as level 1 (chapter), 2 (section), 3 or 4 — e.g. 2.3 — with a configurable Separator after the number (a tab by default)
Section formatNumbering format: 1, i, a, I, A
BorderWidth and color of a rule around the block
PaddingSpace inside the border
Background colorFill color behind the block
Table cell optionsHidden by default — a checkbox reveals vertical alignment and its reference (cap height / x-height / em / leading) for tags used as table cells

Bullets & List Counters

Choose the Bullet glyph, or a List counter format (1, 2, 3 · a, b, c · A, B, C · i, ii, iii · I, II, III), and a Text indent after bullet/counter for the hanging indent. Bullet glyphs and numbered-list counters are both configured on the tag's style card and each get a full, independent set of controls: font, color, size, height reference, a vertical reference point (baseline / cap height / x-height / em box) that the bullet or counter is centered against, then a manual horizontal and vertical offset (each with its own unit) on top of that. Counters also have their own prefix and suffix text fields.

Style Mapping

The Map tab lets you create tag aliases — e.g. map p → paragraph.

The same tab also has a separate Tag → Metadata Field Mappings section, for pointing a specific XML tag straight at a document metadata field (Title, Author, Subject, Keywords, Date, or Language) instead of a style. This is different from a style mapping: a metadata-mapped tag is removed from the rendered body entirely and its text is used to fill in the metadata field. See Document Metadata & Auto-Detection for details and when you'd need this instead of the automatic detection.

Inline Styles

The Inline tab defines styles for inline elements within a parent tag — see Map & Inline Tabs.

Advanced Style Settings

Each style card has an Advanced Settings… button that opens a larger editor for block decoration, text effects, layout and accessibility. Click Save Advanced Settings to apply.

GroupWhat you can set
Block stylingBackground colour; paragraph rules (a line above and/or below the block with its own thickness and offset); borders (none, all sides, or custom per side) with width, colour and border radius; outer margin; inner padding (equal or per side)
HighlightMarker-style highlight behind the text: solid colour or two-colour gradient (with direction and stops), opacity, and how tall it is (full em box, cap height, x-height, or custom) — plus expand top/bottom, shift, and left/right padding
UnderlineStraight, wavy or double; solid or gradient colour; thickness, offset from the baseline, shift and padding. Also underline links applies it to <a> text
StrikethroughColour (solid or gradient), thickness, offset, shift and padding
LinkTurns every block of this style into a link: external URL, internal anchor, or email, with a link colour
ColumnsAlso reachable from the block toolbar's ▥ button. Span all columns pulls a block out of the column flow and draws it across the whole container — the columns stop above it and start again below. Make a tag a column container (column count, gap, balanced heights, optional column rule), mark a style as flowing into columns, force a column break before/after, or let it span all columns (e.g. a heading across a two-column page)
AccessibilitySemantic role for tagged PDF (P, H1–H6, Span, Div, BlockQuote, Code), alternative text, language code, ARIA label
Optical margin alignmentHangs punctuation (quotes, parentheses, hyphens, periods, commas) and round/diagonal letters (T V W Y A X v w y) slightly outside the margin so edges look straight; each group has its own percentage
Word spacingMinimum, desired and maximum word space (% of a normal space) used when justifying
Letter spacing & glyph scalingTracking in pt, and horizontal glyph scaling in %
Widows & orphansKeep with next paragraph, minimum lines after a heading, and how many lines may be left alone at the top (widows) or bottom (orphans) of a page
HyphenationLanguage, minimum word length, minimum characters before and after the hyphen, and whether to break long words that can't be hyphenated

Map & Inline Tabs

Tag → Style Mappings

Point one tag at another tag's style, e.g. p → paragraph, so XML from other sources can reuse the styles you already have.

Context Mappings

Style a tag differently depending on where it appears: a Parent + Child pair is mapped to a Style. For example, blockquote + paragraph → quote-paragraph styles only paragraphs inside a blockquote.

Tag → Metadata Field Mappings

Send a tag's text to a metadata field instead of the page — see Document Metadata & Auto-Detection.

Inline Rendering Rules

The Inline tab controls how repeated child tags are joined into one line. A rule is set for a Parent + Child pair and has a Separator placed between the children, plus an optional Prefix and Suffix around the whole group — each with its own style.

<authors><author>Ana</author><author>Ben</author><author>Cleo</author></authors>
Rule authors:author — separator ", ", prefix "By ", suffix "."
Result:  By Ana, Ben, Cleo.

Rules also apply to repeated tags inside a <metadata> block (for example keywords:keyword). Existing rules are listed under Active Rules, where they can be edited or removed.

Presets

Ready-made document configurations for common use cases. Includes citation standards (Chicago, APA, MLA, Harvard, IEEE) and document structures (Novel, Report, Newsletter, Screenplay, Dissertation). Built-in presets can't be edited or deleted — only your own saved presets get Edit and Delete buttons.

Apply Modes

  • Apply — applies everything: page size, margins, base typography, and all style definitions.
  • Page — applies only page size and margins.
  • Styles — applies only typography settings.

Preset Configurator

Click + New Preset to open the full-screen configurator. Left side: intent cards for a quick starting point, a page size slider, then margin, text size, and text density sliders — each of those three paired with a number field for typing an exact value the slider itself might not reach (page size isn't, since it steps through named sizes like A4 or Letter rather than a plain number). Font is a direct dropdown; orientation and column count are picker buttons; header/footer can be toggled on with basic left/center/right text.

Every property this configures — font size, margins, column count — is a main setting for the preset as a whole. It's meant to get you to a reasonable starting point fast, not to replace the Typography panel for detailed, per-tag adjustments; anything more specific (a particular tag's bullet style, its exact indent, a border) is still edited normally after applying the preset.

Advanced Style Editor — a button switches the right-hand preview over to a full-width per-tag editor, where the preset can define exact starting styles (font, size, spacing, alignment, and more) for specific tags rather than just the document-wide basics on the left.

Reset to Default — discards whatever's been changed in the current editing session and reloads the preset's last-saved values (or a blank starting point, for a brand-new preset that hasn't been saved yet).

Table of Contents

The TOC tab generates an automatic table of contents from your headings. Choose which tags to include and set the leader character (dots, dashes, underline, or none). The TOC is inserted before the first page and updates automatically.

Entry text styling comes from the normal Typography panel — toc_title for the "Table of Contents" heading itself, and toc0, toc1, toc2 for each nesting level, styled exactly like any other tag. The heading's wording is set in TOC Title, and the tags that become entries under TOC Tags.

In the exported PDF, TOC entries also become bookmarks in the viewer's sidebar, each linking to its page.

Page Break Rules

The same tab holds three page-flow lists, each filled by typing a tag name and clicking +:

  • Break Before — every block with this tag starts on a new page (e.g. heading1 for chapters).
  • Break After — a new page starts after every block with this tag.
  • Right Page Tags — the tag always starts on an odd (right-hand) page, inserting a blank page if needed.

Leader Styling

The leader (the dots connecting an entry to its page number) uses the entry's own font/size/color by default. Check Style leader separately to give it its own font, color, size with height reference, a vertical reference point with manual H/V-offset, and letter spacing — independent from the entry text around it.

Footnotes

Use the <fn> tag inline:

<paragraph>This claim is disputed<fn>See Johnson, 2019, p. 42.</fn>.</paragraph>

The FN tab controls font, separator rule, reference mark style, and line spacing. Footnotes are numbered automatically. <footnote> works the same as <fn>, and footnotes may contain <b>/<i> markup.

SettingOptions
PlacementBottom of page, end of document, or end of section
Number styleSuperscript, inline (1.) or bracket ([1]), with a Number gap between the number and the note text
SeparatorWidth as fixed pt, full column, one third or one half, plus thickness
SpacingSpace above the notes block (measured from the separator, with its own reference), space between entries, and space after all notes
LayoutLine spacing and height reference, left and first-line indent, and Auto hanging indent (wrapped lines align with the note text, not the number)
Continuation noticeText shown when a long note has to continue on the next page

Assets

Custom Fonts

Upload TTF or OTF font files. Once uploaded, the font name is available in the style editor. Ligatures and kerning are applied automatically. Fonts are embedded in the exported PDF.

Images

<image src="my-photo.jpg" width="120" height="80" />

Width and height are in points. Images are embedded in the PDF. Upload images first under Assets → Images (any common image type — PNG and JPEG are embedded as-is) and reference them by file name. <img> and <figure> work the same way; path is accepted instead of src, and alt sets the image's alternative text.

Tables, Links & Index

Tables

<table cellpadding="6" fontsize="9" align="left" valign="middle">
  <tr><th>Year</th><th>Sales</th></tr>
  <tr><td>2025</td><td align="right">1,200</td></tr>
</table>

Tables can be built and edited from the ▦ button on the block toolbar (see Editing on the Canvas) rather than typed by hand. <th> cells are bold and centred by default. Table attributes: cellpadding, fontsize, font, color, align, valign (top, middle, bottom, baseline) and vref (the reference used for vertical alignment); a cell's own align overrides the table's. Anything not set as an attribute falls back to the table tag's style.

Rules & Page Breaks

<hr/> draws a horizontal rule. <pagebreak/> (also <page-break/> or <page_break/>) starts a new page — and can switch master pages.

Columns

Blocks inside a column container are laid out as whole blocks: they fill the first column, then continue in the next, and the heights are balanced unless you say otherwise. To decide where a column starts, put a <columnbreak/> between two blocks — everything after it goes to the top of the following column. A style's column break before / after does the same for every block with that tag. Outside a column container the marker does nothing and renders nothing.

<columns>
  <paragraph>Fills the first column.</paragraph>
  <columnbreak/>
  <paragraph>Starts the second column.</paragraph>
</columns>

The container tag's own style carries the column count, gap, balancing and rule — set them from the toolbar's ▥ button or in Advanced Style Settings.

Cross-References

Mark a spot with <anchor id="fig1"/>, then refer to it anywhere with <ref id="fig1"/> — it is replaced by that anchor's page number, prefixed with p. by default (change it with prefix="page ", or prefix="" for none). References update automatically when pages move.

Back-of-Book Index

Wrap terms in <index> as you write, then place <autoindex/> where the index should appear (usually at the end). It lists every term alphabetically with the pages it occurs on.

Hyperlinks

<a href="…"> (or <link url="…">) makes a clickable link in the PDF. To turn every block of a style into a link, use the Link group in Advanced Style Settings.

Accessibility & Metadata

The A11y tab has two things: a PDF/UA accessibility toggle, and Document Metadata (title, author, subject, keywords, date, language).

Document Metadata

Each field can come from two independent places, and it's worth being clear about how they relate:

  • Type a value directly into the field — this always works, with no XML involved, and is what ends up in the exported PDF's own metadata regardless of anything else.
  • Or use a <metadata>/<head>/<front>/<docinfo> block in your XML (see Document Metadata & Auto-Detection) — once a tag exists there for a field, that field's value comes from the XML and the panel field becomes read-only, showing exactly what's in your document. Edit the XML to change it, not the panel.

Next to each field is an Also render in document checkbox. This is only about whether that value also shows up as visible text in the page itself — it's disabled until the field is XML-backed (a value typed directly, with no matching XML tag, has nothing to render from), and checking or unchecking it never creates, edits, or removes anything in your XML. To add a metadata tag to your document, write it directly in the XML; the panel picks it up automatically.

Title and Author always show in the panel, XML-backed or not — useful for PDF-only metadata on a document that doesn't define them in XML at all. Subject and Keywords only appear once they have a reason to (an XML tag, or a value you've typed).

Custom Metadata Fields

Any other tag inside your metadata block — <publisher>, <isbn>, <doi>, anything — is picked up automatically as a custom field. Custom fields are rendered in the document where the metadata block sits (styled through the meta-custom tag in the Typography panel), and are written into the exported PDF's document properties under their tag name. Rendered known fields use meta-title, meta-author, meta-subject, meta-keywords and meta-date.

Clicking a rendered metadata value in the preview highlights its own tag in the XML editor.

PDF/UA

Enable PDF/UA Accessibility produces a PDF intended for screen readers. Per-style semantic roles, alternative text, language and ARIA labels are set in Advanced Style Settings.

Master Pages

A master page is a named, reusable page layout — its own size, margins, and optional header/footer override — that a section of your document can switch to. There's no dedicated panel for this yet; it's set up through the AI Assistant and used from your XML.

Defining a Master

Create a chapter-opener master page with a 120pt top margin

A master can also extend another master, inheriting whatever fields it doesn't set itself, and carry style overrides — specific tag properties (like a heading's color) that only apply while that master is active, layered on top of the tag's normal style rather than replacing it.

Using a Master

<pagebreak master="chapter-opener"/>

Switches to that master starting from the next page. A plain <pagebreak/> with no attributes just starts a new page on whichever master is currently active.

Master Sequences

For alternating layouts — a different master for the very first page, then odd pages, then even pages — define a sequence and activate it once:

<pagebreak sequence="book"/>

From that point, every page — including ones created automatically when content overflows, not just explicit page breaks — picks its master from the sequence's rules, until a different sequence or an explicit master="..." takes over.

AI Assistant

Click the AI button in the toolbar to open the AI drawer. The assistant makes changes to your document settings using natural language.

What the AI can do

  • Apply a citation style or document structure preset
  • Set page size and margins
  • Change base font, size, and line spacing
  • Edit style properties for any tag
  • Enable headers, footers, and page numbers
  • Enable the table of contents
  • Define and update master pages, including inheritance and per-master style overrides — see Master Pages
  • Find and replace text in the document
  • Switch page orientation, set document metadata, and toggle smart quotes, ligatures and typographic spacing
  • Add, remove or clear styles, including many tags in one request
  • Write or restructure XML: replace the document, wrap content in a tag, append new content at the end, and format the XML
  • Configure footnotes, and switch dark mode

AI connection settings (such as your API key) are under the ⚙ Settings button. The drawer keeps a conversation history, which Clear history resets.

Example prompts

Apply Chicago style 17th edition
Set page to A5 with 20mm margins
Make heading1 bold, 18pt, centered with 24pt space before
Enable page numbers in the footer centered
Add a table of contents for heading1 and heading2
Create a chapter-opener master page with a 120pt top margin

PDF Export

Click ↓ PDF in the toolbar. All fonts and images are embedded. The layout engine that generates the PDF is the same one that renders the live preview — output matches exactly.

  • Fonts — fonts uploaded under Assets and chosen in Styles are embedded as real fonts, so text stays selectable and searchable in any character the font supports. Built-in Helvetica, Times and Courier are standard PDF fonts and aren't embedded. If a font can't be embedded, that text falls back to Helvetica and the browser console names the font.
  • Links — <a href> text is clickable.
  • Bookmarks — generated from the table of contents entries.
  • Document properties — title, author, subject, keywords, and any custom metadata fields.
PDF export is available on paid plans. Trial users can use the live preview but cannot export.

Projects

  • Save — saves the current XML and all style settings as a .json file.
  • Load — opens a saved project file and restores XML and styles exactly.
  • New — clears the editor and starts a blank document.
Projects are saved locally as files — they are not stored on the server.

A project file contains everything: XML, styles, header/footer, TOC, footnote and mapping settings, metadata, and your uploaded fonts and images. Separately, your settings are remembered in this browser between sessions — but the XML text and uploaded fonts/images are not, so save a project to keep them. Leaving the editor with unsaved changes asks whether to Save & Leave or Leave without saving.

XML Reference

Document Root

Every document must start with <?xml version="1.0"?> and have a single root element. By convention this is <document>, but any name works — <academicPaper>, <article>, <book>, whatever fits your source. Inner tag names below the root are equally free-form: any tag you use gets picked up automatically and can be styled from the Typography panel (use Detect Tags to add all of them at once).

Document Metadata & Auto-Detection

If a <metadata>, <head>, <front>, or <docinfo> element appears as a direct child of the root, Pub Suite scans its children and fills in the Document panel's metadata fields automatically — no need to rename or restructure your XML first. Recognised tag names (case-insensitive) are:

Metadata fieldMatching tag names
Title<title>, <subtitle>
Author<author>, <creator>, <name>
Subject<subject>
Keywords<keyword>, <keywords>, <tag>
Date<date>, <pubdate>, <publicationdate>
Language<language>, <lang>

Matching is depth-agnostic — <author><name>Jane Doe</name></author> resolves to the same author value as a flat <author>Jane Doe</author>. A tag that repeats — most commonly a wrapper of individual <keyword> entries — has its values joined with a comma automatically. Every metadata element consumed this way is removed from the rendered document body; it will not show up as a stray paragraph.

If your XML uses a metadata tag name that isn't in the table above (e.g. <editor> or <publisher>), it becomes a custom metadata field — rendered in the document and written into the PDF's properties — and the A11y panel lists which custom fields were picked up. If it really belongs in one of the standard fields, open the Map tab and add a Tag → Metadata Field Mapping to point that tag at whichever field it belongs to (Title, Author, Subject, Keywords, Date, or Language), choose whether to read only the tag's own text or flatten everything nested inside it, and set a join separator if the tag repeats. A manual mapping always takes priority over the automatic guesses above.

Auto-detection can be turned off entirely with the Auto-detect metadata from XML checkbox in the Document panel, if you'd rather fill in metadata by hand or rely only on manual Map tab mappings.

Common Block Tags

Suggested tagTypical use
<paragraph>Body text
<heading1>Chapter title
<heading2>Section heading
<blockquote>Extended quotation
<pullquote>Highlighted quote
<caption>Image or figure caption
<bullet>Bulleted list item
<numbered>Numbered list item
<image>Embedded image

Well-formed XML Rules

  • Every opening tag must have a closing tag
  • Self-closing tags end with />
  • Tags must be properly nested — they cannot overlap
  • Attribute values must be quoted
  • Use &amp; for &, &lt; for <, &gt; for >