github iamgio/quarkdown v1.15.0

13 hours ago

Added

 

CSL bibliography styles (breaking change)

Quarkdown's internal bibliography management is now powered by CSL (Citation Style Language).

  • A curated selection of citation styles from the CSL Style Repository is now supported. The style parameter now accepts a CSL style identifier (e.g. ieee, apa, chicago-author-date, nature). The default style is now ieee.

    Breaking change: plain and ieeetr styles do not exist anymore, and have been replaced by ieee.

  • Along with BibTeX (.bib) files, the following file formats are now accepted:

    • CSL JSON (.json)
    • YAML (.yaml/.yml)
    • EndNote (.enl)
    • RIS (.ris)
  • Rendered bibliography entries are now localized to the document locale, set via .doclang.

 

Multi-key citations

.cite now accepts a comma-separated list of keys (e.g. .cite {einstein, hawking}) to produce a single combined citation label, whose format depends on the active citation style (e.g. [1], [2] for IEEE, (Einstein, 1905; Hawking, 1988) for APA).

 

Formatted captions

Captions for all supported elements now accept inline formatting (including inline function calls), rather than plain text.

![Pi](pi.png "The symbol of *pi*, which approximately equals .pi")
Formatted caption

 

Scoped page formatting

.pageformat now supports scoping formats to specific pages in paged documents via two combinable parameters:

  • side (left or right): restricts formatting to recto or verso pages, enabling mirrored margins and other asymmetric layouts.
  • pages (e.g. 2..5): restricts formatting to an inclusive range of page indices.
.pageformat size:{A4}
.pageformat side:{left} margin:{2cm 3cm 2cm 1cm}
.pageformat side:{right} margin:{2cm 1cm 2cm 3cm}
.pageformat pages:{1..3} borderbottom:{4px}

 

New syntax: Tight function calls

Inline function calls can now be wrapped in curly braces to delimit them from surrounding content, without relying on whitespace.

abc{.uppercase {def}}ghi

 

.heading primitive function

The new .heading function creates headings with granular control over their behavior, unlike standard Markdown headings (#, ##, ...).
It allows explicit control over numbering (numbered), table of contents indexing (indexed), page breaks (breakpage), depth, and reference ID (ref).

 

.pagebreak primitive function

The new .pagebreak function provides an explicit way to insert a page break as an alternative to the <<< syntax.

 

File tree

The new .filetree function renders a visual file tree from a Markdown list.

.filetree
    - src
      - main.ts
      - ...
    - README.md

Bold entries (**name**) are highlighted with a distinct background color, useful for drawing attention to specific items.

.filetree
    - src
      - **main.ts**
      - utils.ts
    - README.md

 

Better heading configuration for table of contents and bibliography

Both .tableofcontents and .bibliography now accept the following optional parameters to control the heading that precedes them:

  • breakpage: controls whether the heading triggers an automatic page break.
  • headingdepth: the depth of the heading (1-6).
  • numberheading: controls whether the heading is numbered in the document hierarchy.
  • indexheading: when enabled, the heading is included in the document's own table of contents.

 

Subscript and superscript text

The .text function now accepts a script parameter with sub and sup values for subscript and superscript text.

 

Changed

 

Removed includeunnumbered parameter from .tableofcontents (breaking change)

The includeunnumbered parameter has been removed, in favor of the more granular heading configuration previously mentioned.
Now all indexable headings are included in the ToC by default, regardless of their numbering.

 

.container's margin now suppresses children's margins

When an explicit margin is applied to a .container, it now suppresses the margins of its direct children, for a more intuitive and flexible layout configuration.

 

.fullspan now relies on .container

.fullspan, used to create a block spanning over multiple columns in a multi-column layout, is now shorthand for .container fullspan:{yes}.

 

Fixed

 

Stabilized multi-column layout

The multi-column layout via .pageformat columns:{N} is no longer experimental, and now works reliably across all document types.

 

Added call stack limit

Infinite recursion in function calls is now detected and reported as a clear error.

 

Fixed default browser not opening on Linux (Wayland and XDG environments)

On Linux systems where the Java AWT Desktop API does not support the BROWSE action (e.g., Wayland), --browser default now falls back to xdg-open automatically.
Additionally, --browser xdg is now a supported named choice for the --browser CLI option.

Thanks @szy1840!

 

Fixed scroll position not fully restored during live preview on long paged documents

When editing long paged documents with live preview, the scroll position could sometimes be restored only partially because of long paged.js load times. The swap now reliably waits for the content to be fully loaded.

 

Fixed Mermaid diagrams preventing page breaks

Fixed an issue that caused Mermaid diagrams in paged documents to cause subsequent content to overflow instead of being pushed to the next page.

 

Fixed tree traversal not reaching non-body nodes

Fixed an issue that caused tree traversal-dependent features, such as cross-references, to not work in titles of .box and .collapse, and in block quote attributions.

 

Improved lexer performance

The lexer has been optimized to reduce regex builds to a minimum, resulting in significantly improved performance for large documents.


Sponsors

Thanks to our sponsors! 🎉

@vitto4

Falconer

Don't miss a new quarkdown release

NewReleases is sending notifications on new releases.