What’s New in Asciidoctor PDF 2.0

This page presents the changes made in each of the patch releases in the Asciidoctor PDF 2.0 release line. The releases are ordered from newest to oldest.

Asciidoctor PDF 2.0.8

Release date: 2022.06.08 | Release notes: v2.0.8 | Issue label: 2.0.8

Improvements

  • Encapsulate logic to adjust column box inside float and dry run.

  • Automatically set height on column box if not specified; update value automatically when reflowing margins.

Bug Fixes

  • Correctly compute value of to cursor on extent when column box starts below top of page.

  • Fix crash in ColumnBox#move_past_bottom when :reflow_margins option is not set.

  • Fix x position of SVG when advanced to next column of column box.

  • at_page_top? should consider top of column box to be top of page.

  • Prevent SVG image taller than column from being advanced to next column.

  • Don’t push section that follows index section in article to new page if last page of index doesn’t extend to bottom of page.

Asciidoctor PDF 2.0.7

Release date: 2022.06.03 | Release notes: v2.0.7 | Issue label: 2.0.7

Improvements

  • Don’t recommend prawn-gmagick if PNG or JPG is corrupt or incomplete.

  • Add helper method to determine when to recommend the prawn-gmagick gem.

Bug Fixes

  • Fix crash when doctitle or section title with automatic ID contains inline image without an explicit width.

  • Use prawn-gmagick, if available, to read raster image referenced by SVG.

  • Allow image path in SVG to refer to any location within Asciidoctor jail (no restriction if safe mode is unsafe).

Asciidoctor PDF 2.0.6

Release date: 2022.05.30 | Release notes: v2.0.6 | Issue label: 2.0.6

Bug Fixes

  • Indent content of collapsible block and apply bottom margin to match style of HTML output.

  • Patch prawn-gmagick to reread bit depth of a PNG image if it extracts the wrong value.

  • Interpret width of SVG correctly when width is defined in file using px units.

  • Don’t crash if inline role defines border width but not border color.

Asciidoctor PDF 2.0.5

Release date: 2022.05.26 | Release notes: v2.0.5 | Issue label: 2.0.5

Bug Fixes

  • Don’t filter TOC entries without an ID when computing the TOC extent.

  • Fix width of multi-word phrase with background and border offset.

Asciidoctor PDF 2.0.4

Release date: 2022.05.25 | Release notes: v2.0.4 | Issue label: 2.0.4

Bug Fixes

  • Fix calculation of TOC extent when TOC entry has children but no ID.

Asciidoctor PDF 2.0.3

Release date: 2022.05.25 | Release notes: v2.0.3 | Issue label: 2.0.3

Improvements

  • Compute the optimize settings in init_pdf and store as a Hash instead of after writing the PDF file.

Bug Fixes

  • Adjust TrimBox to fit inside of BleedBox when using optimizer and compliance is PDF/X.

  • Set height of resized image to available height to avoid float precision error when scaling down image to fit page.

  • Prevent content on title page from overrunning the bounds of a single page and warn; restriction applies to ink_title_page.

Asciidoctor PDF 2.0.2

Release date: 2022.05.22 | Release notes: v2.0.2 | Issue label: 2.0.2

Bug Fixes

  • Use specified column widths to avoid bugs in column width calculation when using colspans.

  • Advance table to next page if rowspan in first row doesn’t fit in space remaining on current page.

Asciidoctor PDF 2.0.1

Release date: 2022.05.21 | Release notes: v2.0.1 | Issue label: 2.0.1

Bug Fixes

  • Scale inline image to fit within available height of page, accounting for the top padding of the line height and the bottom gutter.

  • Short-circuit formatted text routine and log error if fragments in first line can’t fit on an empty page.

  • Break and wrap long contiguous text in source block when linenums is enabled.

Asciidoctor PDF 2.0.0

Release date: 2022.05.18 | Release notes: v2.0.0 | Issue label: 2.0.0

Asciidoctor PDF 2.0 introduces a host of new features and enhancements—​like unbreakable blocks, theme keys for callout lists, automatic orphan prevention for block captions, and improved block margin logic—​just to name a few! Some of these features, improvements, and bug fixes are highlighted in the following sections. For a summary of the release, see the release notes. For a complete list of all changes, see the CHANGELOG.

Paragraph roles and indent

In Asciidoctor PDF 2.0, you can define custom roles in your theme and apply them to specific paragraphs in your document. See Custom Roles to learn how to create a custom role and Use a custom role for how to assign a custom role to a paragraph.

In light of roles now being supported on paragraphs, the lead category in the theme has been dropped and replaced by a built-in role named lead. See Built-in roles for details.

To control the indent of inner paragraphs (instead of all paragraphs), you can set the new prose-text-indent-inner key in your theme. See Prose Category Keys for details.

Breakable by default

In Asciidoctor PDF 2.0, the following blocks are breakable by default, which includes automatic anchor and caption orphan prevention:

  • Admonitions

  • Block images

  • Code blocks (literal, listing, and source)

  • Examples

  • Open blocks

  • Quote blocks

  • Sidebars

  • Verses

Tables and sections are breakable by default, but do not provide automatic anchor and caption orphan prevention. For tables, that means the anchor and caption can be left on the current page if the table is advanced to the next page. For sections, that means the section’s title may be left on the current page if the first content block doesn’t fit. However, you can turn on orphan prevention for tables and sections by adding the (seemingly redundant) breakable option as a hint.

Unbreakable option

The unbreakable option can be applied to all delimited blocks (including admonitions and tables), but not sections. When the unbreakable option is applied to a block, the converter will advance the block and its caption and anchor to the next page if it detects that the block would break across pages and it can fit on a single page.

Notitle option

The untitled option has been renamed to notitle. With the name change, it’s also gained new capabilities. The notitle option hides a section title in the body of a document, but displays the title in the TOC and allows the anchor resulting from that title to still be referencable. It can also be used to add an entry to the TOC for a preamble, anonymous preface, and imported PDF pages. See Hide Section Titles for examples and more details.

Blocks and block captions

Blocks and block captions gained a lot of new theming capabilities in Asciidoctor PDF 2.0. Here are a few of the highlights:

Padding

The theme can now control the padding on a block using a 2-value array for ends and sides or 3-value array with implied left side value.

Border width

The border width of delimited blocks, admonitions, and block images can be customized per edge with the border-width key.

Border style

The border style of delimited blocks, admonitions, and block images can be changed with the border-style key. Border styles include dashed, dotted, double, and solid.

Line height

Wherever font properties are accepted in the theme, you can now control the line height of blocks using the line-height key.

Anchor positioning

The anchor location for blocks can be positioned relative to the content using the block-anchor-top theme key.

Caption text alignment

The text alignment of captions can now be controlled independent of the block alignment using the global caption-text-align theme key or per block category with <category>-caption-text-align. The image-caption-text-align and table-caption-text-align theme keys accept the value inherit in addition to the standard text alignment values. The value inherit resolves to the alignment of the block image or table.

Global caption text decoration

The text decoration style, color, and width can be applied to captions globally with the caption-text-decoration-style, caption-text-decoration-color, and caption-text-decoration-width theme keys. See Caption Category Keys for more information.

Caption background color

You can now specify a background color for captions globally using the caption-background-color theme key or per block category (<category>-caption-background-color). See Caption Category Keys for more information.

Caption max-width

A caption’s max-width value can be set to a percentage of the content by passing the percentage as an argument to fit-content function.

First line of abstract

The theme can control the font color of first line of abstract using abstract-first-line-font-color key.

In addition to the new theme keys, breakable behavior, and unbreakable option for blocks, Asciidoctor PDF now uses smarter bottom margin logic that prevents extra space from being added below blocks, particularly when blocks are nested or used inside an AsciiDoc table cell.

Notable fixes for blocks
  • Syntax highlighting isn’t applied to a source block if the specialchars substitution is disabled.

  • Borders, shading, and padding aren’t applied to collapsible blocks.

  • The callouts substitution can be removed on code blocks.

Tables

Border widths and styles

The table border width can be customized per edge with the border-width key. The border style can be specified per edge by assigning an array of styles to the border-style key. Border styles include dashed, dotted, and solid.

Grid widths and styles

The width of table grid lines can be specified for rows and columns with the grid-width key. The style of the grid lines can be specified for rows and columns with the grid-style key. Grid styles include dashed, dotted, and solid. Thank you to @hextremist for adding the ability to style the horizontal and vertical lines of the table grid independently.

Maximum caption width

The maximum caption width for tables can be set to a percentage of the content by passing an argument to the fit-content function.

Caption end

The table-caption-side theme key has been renamed to table-caption-end.

Notable fixes for tables
  • Vertical center alignment is correctly applied to regular table cells.

  • The border bottom is correctly applied to a table row when frame and grid are none.

  • The font size of a literal table cells and nested blocks in AsciiDoc table cells is now scaled.

  • AsciiDoc table cells inherit the font properties from the table.

  • The content of an AsciiDoc table cell is prevented from overrunning the footer or subsequent pages.

  • The top and bottom padding is taken into account when computing the height of an AsciiDoc table cell.

  • An error message is logged if a table cell is truncated.

  • Instead of raising an error, the converter logs an error and skips the table if the content cannot fit within the designated width of a cell.

Callout lists and numbers

The theming language now has a callout-list category. The new theme keys let you customize the font properties, text alignment, and item spacing of callout lists. The callout-list category includes the margin-top-after-code key that can control the top margin of callout lists that immediately follow a code block.

Notable fixes for callouts
  • Callout numbers in a callout list stay with primary text when an item is advanced to the next page.

  • A sequence of two or more callouts separated by spaces in a code block are processed correctly.

  • The font family assigned to conums in the theme is applied to the callout numbers displayed in code blocks.

Images

Caption end

You can now configure whether the caption for a block image is placed above or below the image using the caption-end theme key. See Block Image Category Keys for the list of available image-caption theme keys and their value types.

Text alignment roles

The text alignment roles, such as text-center, are now supported on block images.

Roles for inline images

Roles and inherited roles are now supported on inline images.

Notable fixes for images
  • Warnings from background SVGs are now passed through to the logger.

  • SVGs are correctly scaled down when fit=scale-down.

Icons

Image-based icons

Asciidoctor PDF 2.0 now supports image-based icons. They’re resolved from iconsdir and should have the icontype file extension.

Add a link to an icon

The link attribute can now be set on the icon macro.

Admonition icon image

An admonition icon image can now be remote, if allow-uri-read is set, or a data URI. The textual label on an admonition is displayed if the icon image fails to embed.

Background color and border offset

You can now control the background color and border offset (only for background) of links from the theme.

Link macro

The id attribute can now be set on the link macro.

Inline formatting

Typographical quotation marks

You can now define single and double quotation marks, such as › and », using the quotes key in the theme. See Quotes Category Keys for details. Thank you to @klonfish for adding this feature to the theming language.

Hexadecimal characters

Character references that contain both uppercase and lowercase hexadecimal characters are now supported. Thank you to @etihwnad for adding this capability.

Notable inline formatting fixes
  • A closing quote preceded by a trailing ellipsis is kept together with the text enclosed in typographic quotes.

  • The font size for superscript and subscript is computed correctly when the parent element uses em and % units.

  • Hyphenation exceptions are respected when a word is adjacent to a non-word character.

  • The pre-wrap role on honored on a phrase.

Fonts, font styles, and text transforms

Small caps

The text-transform theme key now accepts the smallcaps value. When smallcaps is specified, the lowercase letters are replaced with the small capital letter variants.

normal_italic

The new normal_italic value for the font-style key resets the font style to normal, then applies the italic variant of a font family.

Noto Sans

Noto Sans is now bundled with Asciidoctor PDF. It is used as a fallback font in the sans-with-fallback-font theme and can be declared in a custom theme.

Ceiling and floor characters

The left and right ceiling and floor characters (⌈, ⌉, ⌊, and ⌋)were added to the M+ fallback font. Thank you to @oddhack for adding these characters to the font subset.

Checkmark, numero, and y with diaeresis glyphs

The heavy checkmark glyph (✔) was added to the fallback font; the checkmark and heavy checkmark (✓ and ✔) were added to the monospaced font; the № and ÿ glyphs were added to the default and fallback fonts.

Covers and title page

Front and back cover images

The front and back cover images can now be defined in the theme and the target can be a data URI.

Deactivate title page

The title page can now be deactivated from the theme by assigning false to the title-page category key.

TOC and PDF outline

PDF outline title and levels

You can now deactivate the PDF outline by unsetting the outline document attribute (:!outline:) as well as customize its title with outline-title and the section level depth and expansion with outlinelevels. See PDF Outline for details.

Deactivate running content on TOC pages

The header or footer can be deactivated on TOC pages by assigning the noheader or nofooter options on the toc macro.

TOC dot leader

The theme can control the font size of the dot leader in the TOC.

TOC location

The TOC can now be placed following the preamble by assigning the preamble value to the :toc: document attribute. Also, the TOC is only displayed at the first location of a toc macro.

Extended converter

An extended converter can now override the get_entries_for_toc method to insert or filter TOC entries.

Notable fixes for the TOC
  • An image now renders at the end of a section title in the corresponding TOC entry.

Footnotes

Reset numbering

Footnote numbering is now reset in each chapter.

Footnote reference label

The xreftext of a chapter is now added to the label of a footnote reference that refers to a previous chapter.

Unresolved footnote color

The theme can configure the font color of an unresolved footnote using the unresolved role.

Notable fixes for footnotes
  • A missing footnote reference is shown in superscript.

  • Footnotes defined in an AsciiDoc table cell are now rendered with the footnotes at the end of an article or chapter.

Index

Index columns

The theme can now configure the number of index columns using the index-columns key.

Style of page numbers

The new index-pagenum-sequence-style document attribute controls the style of sequential page numbers in the index when media=screen.

Notable fixes for the index
  • The index section isn’t rendered if there are no index entries.

  • A blank line is no longer inserted in the index when a term is forced to break.

  • Prepress page margins are honored on subsequent pages in the index.

  • Space in front of a hidden index term is now collapsed.

Running content and page numbering

Base theme

The basic running footer is now enabled when you use the base theme or extend the base theme. (Previously, the basic running footer was only enabled if you used or extended the default theme.)

Select the page where running content starts

Specify the page on which the running content starts being displayed by assigning an integer to the start-at theme key on the running-content category. Running content can also start after the TOC, wherever the TOC is placed, by assigning the keyword after-toc to the start-at key.

Configure where integer page numbering starts

Specify the page on which the integer (1-based) page numbering begins using the start-at key on the page-numbering category. Integer page numbering can start at the front cover by assigning the keyword cover to the start-at key. Or, you can have the page numbering start after the TOC, wherever the TOC is placed, by assigning after-toc to the start-at key. Alternatively, the theme can specify an offset from the first body page where the page numbering should begin when an integer is assigned to start-at.

Margin and content margin

The margin and content margin of the running content per periphery (header or footer) and per side (recto or verso) can now be configured from the theme. The margins in running content can be specified using a 2-value array for ends and sides or 3-value array with implied left side value.

Part and chapter numbers

If the partnums attribute is set, the part-numeral attribute is automatically set in the running content. If the sectnums attribute is set, the chapter-numeral attribute is automatically set in the running content.

Select a background per layout

The page-layout attribute is now set in the running content. You can use this attribute to select a background per layout.

Notable fixes for running content and page numbering
  • The pdf-folio-placement setting is honored even when media=prepress.

  • Prepress page margins honor the value of pdf-folio-placement.

Themes

Print-optimised themes

Asciidoctor PDF 2.0 has two new print-optimized themes, named default-for-print and default-for-print-with-fallback-font.

Extend base theme

A custom theme does not inherit from the base theme by default; it must be specified explicitly using extends: base.

Extends hierarchy

Asciidoctor PDF only extends a theme in the extends hierarchy once unless the theme is modified with !important.

Power operator

The theming language now supports the power operator. It has the same precedence as multiply and divide.

Rouge theme

A Rouge theme can now be specified as a theme class or instance (API only).

Base theme changes

The top and bottom padding on quote and verse blocks has been reduced in the base theme. The base-border-color is now set and used as the default border color. The border colors have been removed in the base theme so all border colors can be controlled using the base-border-color key when extending the theme.

Default theme changes

The top and bottom padding on quote blocks is now uniform in the default theme.

Dependencies and scripts

The following dependencies and scripts were added to Asciidoctor PDF 2.0.

  • The asciidoctor/pdf/nogmagick script was added to unregister the Gmagick handler for PNG images.

Deprecated

The following features are deprecated with the release of Asciidoctor PDF 2.0 and will be removed in the next major release.

  • The blockquote category prefix is deprecated in the theme; use the quote prefix instead. See Quote Category Keys.

  • The key category prefix is deprecated in the theme; use the kbd prefix instead. See Keyboard Macro Category Keys.

  • The literal category prefix is deprecated in the theme; use the codespan prefix instead. See Codespan Category Keys.

  • The outline-list category prefix is deprecated in the theme; use the list prefix instead. See List Category Keys.

  • The Optimizer#generate_file method is deprecated; use Optimizer#optimize_file instead.

Removed

The following dependencies and deprecated features have been removed with the release of Asciidoctor PDF 2.0.

  • Support for Ruby < 2.7 and JRuby < 9.2 has been removed.

  • The deprecated chapter-label attribute has been replaced by the chapter-signifier attribute.

  • The untitled option has been removed; use the notitle option instead.

  • Support for the deprecated pdf-style and pdf-stylesdir attributes has been removed.

  • The deprecated Pdf module alias in the API has been removed in favor of PDF.

  • The deprecated “ascii” fonts have been removed; only the more complete "subset" fonts are now bundled with the gem.

  • The previously undocumented vertical-spacing key has been removed from the built-in themes.

  • The top-margin key on block and prose categories in theme has been removed; space between delimited blocks and lists is now controlled using bottom margins only.

  • The lead category keys in theme have been replaced with the built-in role named lead.

  • safe_yaml gem has been removed; YAML.safe_load from the Ruby stdlib is used instead.

  • Support for the <color> tag in passthrough and theme content has been removed; use <font color="…​"> instead; may affect themes that use pseudo-HTML in the value of the content key.

  • The asciidoctor-pdf/converter and asciidoctor-pdf/version shim scripts have been removed; use asciidoctor/pdf/converter and asciidoctor/pdf/version instead.

  • The unneeded _mb functions (e.g., uppercase_mb) have been removed; multibyte support for upcase, downcase, and capitalize is now provided by corelib.