For binary releases, see https://github.com/jgm/pandoc/releases.

Want to know when a new release is available? Subscribe to pandoc-announce , a low-volume mailing list that is just for announcements of new releases.

These have been removed from githubMarkdownExtensions , though they’re still turned on for legacy markdown_github .

Trim down githubMarkdownExtensions . Previously it included all of the following, which make sense for the legacy markdown_github but not for gfm , since they are part of base commonmark and thus can’t be turned off in gfm :

To add an attribute to an inline-level element, put it immediately after the element:

Multiple attributes may be used and will be combined:

To add an attribute to a block-level element, e.g. a paragraph, put it before the block:

Add generic attributes extension. This allows attributes to be added to any block or inline element in a uniform way. Since the Pandoc AST doesn’t include attributes on each element type, the attributes will sometimes be added by creating a surrounding Div or Span container. Currently this extension is only compatible with the commonmark and gfm readers.

Many more extensions now work with commonmark and gfm .

Add commonmark_x output format. This is commonmark with a number of useful pandoc extensions enabled.

Make it possible to compile using Stack on NixOS (#6439, Mathieu Boespflug).

INSTALL.md: fix FreeBSD port link (#6422, Mo). The FreeBSD port was renamed from pandoc to hs-pandoc in 2010. The old pandoc port is still at version 1.5.1.1

Revert 0e48a02 and dependency on base-noprelude, which hasn’t been updated for ghc 8.10 (see #6187).

Use latest skylighting. This fixes a bug with lua multiline comments (and may improve handling of other syntaxes as well). IT also adds aria-hidden="true" to the empty a elements, which helps people who use screen readers.

Lua filters: improve error messages for failing filters (#6332, Albert Krewinkel). Print the Lua error properly instead of displaying their show string.

Fixed Katex standalone script (#6399, Lucas Escot). Global macros are now persistent when using the HTML Writer with the --katex option.

Text.Pandoc.UUID: Fix getRandomUUID , which previously would return the same value twice in a row. Make getRandomUUID polymorphic in PandocMonad. Remove getUUID (#6228, Joseph C. Sible).

epub.css: wrap overlong lines in highlighted code blocks (#6242). This fixes a problem in iBooks v2.4 with our earlier horizontally scrolling code blocks. The problem seems to be a bug in iBooks, not pandoc, but since iBooks is a major target we’re changing pandoc’s default behavior so that pandoc-produced epubs work on that platform.

The preformatted code block parser has been extended to check if the first attribute of the block is not a key=value pair, and in that case it will be considered as a class.

Unify defaults and markdown metadata parsers (#6328, Nikolay Yakimov). Clean up code in Text.Pandoc.Readers.Metadata and properly handle errors in yamlToMeta . This fixes parsing of Boolean fields in metadata withinin defaults files and reduces code duplication.

Add an option to disable certificate validation (#6156, Cédric Couralet, Cécile Chemin, Juliette Fourcot). This commit adds the option --no-check-certificate , which disables certificate checking when resources are fetched by HTTP.

Support new Table type (Christian Despres). The Builder.simpleTable now only adds a row to the TableHead when the given header row is not null. This uncovered an inconsistency in the readers: some would unconditionally emit a header filled with empty cells, even if the header was not present. Now every reader has the conditional behaviour. Only the XWiki writer depended on the header row being always present; it now pads its head as necessary.

linux/Dockerfile: upgrade to alpine 3.11 (#6180, Albert Krewinkel). This is used to build the static linux binaries.

Text.Pandoc.App: set resource path at the beginning so it can affect things like include-in-header (#5982).

PDF via wkhtmltopdf: put user-specified options last (#6171). Certain options (e.g. cover ) need to come after flags on the command line.

Always use custom prelude (#6187, Albert Krewinkel). Previously, the custom prelude was used only with older GHC versions, as a workaround for problems with ghci. The ghci problems are resolved by replacing package base with base-noprelude , allowing for consistent use of the custom prelude across all GHC versions.

Use implicit Prelude (#6187, Albert Krewinkel). The previous behavior was introduced as a fix for #4464. It seems that this change alone did not fix the issue, and stack ghci and cabal repl only work with GHC 8.4.1 or newer, as no custom Prelude is loaded for these versions. Given this, it seems cleaner to revert to the implicit Prelude.

EPUB writer: fix regression on detection of front/back/bodymatter (#6170). This bug caused sections with epub:type dedication to be misplaced in bodymatter instead of frontmatter as specified in the manual. The same problem would affect other epub:types. The pattern matching needed to be changed with the use of makeSection .

Markdown reader: Fix table alignment when heading begins with t (#6153). Due to a typo ( t instead of \t ) we were center aligning column headings that begin with a lowercase t !

In docs, update URLs and use https: wherever possible (#6090, Salim B).

Update filter documentation (#6065). Improve cabal v2 instructions. Remove example using pandoc API directly (we have other docs for that and it was outdated).

Use latest doclayout, doctemplates (#6031). The new version of doclayout fixes a memory leak that affected --include-in-header with large files (and possibly other cases involving extremely long lines).

Use versioned directory for windows release zipfile. Also remove old make-windows-installer.bat , superseded by GitHub actions workflow, and modify pandoc.wxs for new paths.

Text.Pandoc.App.CommandLineOptions: Change setVariable to use Text instead of String . This avoids some unnecessary unpacking.

Make pandoc.List a callable constructor (Albert Krewinkel). It is now possible to construct a new List via pandoc.List() instead of pandoc.List:new() .

Add methods insert , remove , and sort to pandoc.List (Albert Krewinkel). Example of use:

Allow filtering of element lists (#6038, Albert Krewinkel). Lists of Inline and Block elements can now be filtered via Inlines and Blocks functions, respectively. This is helpful if a filter conversion depends on the order of elements rather than a single element. For example, the following filter can be used to remove all spaces before a citation:

LaTeX template: add space option to xeCJK with PassOptionsToPackage (#6002). Otherwise we can get a clash with documentclasses that already load the package.

Text.Pandoc.CSV: fix bug in CSV parser; previously an extra blank record would sometimes be inserted at the end.

Add timing info for filters in --verbose mode (#6112). When verbose mode is specified (verbosity == INFO), print a notice when running a filter and when a filter completes (including timing).

The jats output format is now an alias for jats_archiving . The module Text.Pandoc.Writers.JATS now exports writeJatsArchiving , writeJatsPublishing , and writeJatsArticleAuthoring , as well as the legacy writeJATS [API change].

Add csv as an input format (#6100). The CSV table is converted into a pandoc simple table. A new module Text.Pandoc.Readers.CSV exports readCSV [API change].

Text.Pandoc.BCP47: Change getLang to handle block-level contents (#6008). Some readers (e.g. RST) will populate the lang metadata field with block-level content. getLang has been modified to handle this. Previously in these cases the LaTeX writer would not properly set the “main language” of the document.

Text.Pandoc.PDF: Fix runTeXProgram so that the input source is always overwritten (#6027). Previously it wasn’t overridden if the file already existed, which led to bad results on subsequent runs when pdf-engine-opt=-output-directory= was used to specify an explicit temp dir.

JATS template: Update JATS dtd (Arfon Smith, #6020). Use the archiving and interchange DTD rather than the more restrictive journal publishing DTD (which doesn’t permit ext-link as a valid child).

MANUAL: A bit clearer explanation for --base-header-level . We now say exactly how to translate between the deprecated --base-header-level and --shift-heading-level-by .

Text.Pandoc.Shared: Improve makeSections so we don’t get doubled “number” attributes in EPUB output (or anywhere else) (#5986).

Text.Pandoc.PDF: Ensure UTF8 when printing source in --verbose mode, avoiding an error on platforms that default to something other than UTF-8 (#5997).

Improved table of contents generation in markdown, RTF, commonmark, better handling cases where section headings are enclosed in divs.

Fix regression with --number-sections . Starting with 2.8, --number-sections also had the effect of --section-divs , even if --section-divs was not specified.

Note that backslashes are rendered as HTML entities, as there appears no alternative to produce a plain backslash if it is followed by markup. This may cause problems when used with confluence, where rendering seems to fail in this case.

Jira writer: use jira-wiki-markup renderer (Albert Krewinkel, #5926). The following improvements are included in this change:

Fix README.md so that relative links from manual become absolute. Previously they’d be broken links when viewed on GitHub or Hackage. So we add the base URL for the pandoc manual.

Use doctemplates 0.8. Rename template ‘filters’ as ‘pipes’ to avoid confusion with the other notion of filter used by pandoc.

Fix regression in makeSections (#5965). Previously hierarchicalize (the ancestor of makeSections ) would put header attributes on the containing Div. In 2.8 this behavior changed, which broke some tools depending on pandoc. Here we roll back this change, so that attributes again migrate from the header to the containing Div when makeSections is run. Note that attributes are retained on the header as well (unlike before) – with the exception of the id attribute, which of course cannot be duplicated.

ConTeXt template: Adjust to title formatting (#5949, Denis Maier). Add \setupinterlinespace to title , subtitle , date and author elements: otherwise longer titles that run over multiple lines will look squashed as \tfd etc. won’t adapt the line spacing to the font size.

LaTeX template: keep the \author{} command even if author is not specified (#5961, Yihui Xie). Avoids a LaTeX warning.

ConTeXt template: Fix \startcslreferences and use ConTeXt syntax conventions (#5945, Denis Maier). The old version had a too large a skip at the beginning of the reference list.

HTML writer: add task-list class to ul if all elements are task list items. This will allow styling unordered task lists in a way that omits the bullet.

Roll back part of of --shift-heading-level-by change (#5957). With positive heading shifts, starting in 2.8 this option caused metadata titles to be removed and changed to regular headings. This behavior is incompatible with the old behavior of --base-header-level and breaks old workflows, so we have rolled back the change. Note that there is now an asymmetry in positive and negative heading level shifts: With positive shifts, the metadata title stays the same and does not get changed to a heading in the body, while with negative shifts, a heading can be converted into the metadata title.

Fix regression with behavior of --variable (#5962). Previously -Vfoo=1 -Vfoo=2 would produce a list value for foo; with 2.8 it produced just 2 . This commit restores the earlier behavior.

linux tarball: add architecture -amd64 to filename. Now it will be: pandoc-VERSION-linux-ARCH.tar.gz .

Add .gitattributes (#5747). This ensures that the golden files in test/fb2/reader/ don’t have newlines converted. This should fix a test failure on GitHub CI with Windows.

Add diff-zip.sh to tools (John MacFarlane, Agustín Martín Barbero). This is intended to make it easier to test differences in zip containers, like epub, docx, or odt.

Use throwError instead of fail when appropriate.

Text.Pandoc.Pretty has been removed [API change]. We now use the new external doclayout module instead.

Fix Lua function names in pandoc.system (niszet). Change get_current_directory to get_working_directory and with_temp_directory to with_temporary_directory , to conform to the manual.

Export make_sections , remove hierarchicalize . Lua filters that use hierarchicalize will need to be rewritten to use make_sections .

Furthermore, the attributes field of AST elements can now be a plain key-value table even when using the attributes accessor:

This also works when using the attr setter:

Attr values can now be given as normal Lua tables (Albert Krewinkel, #5744). This can be used as a convenient alternative to constructing Attr values with pandoc.Attr . Identifiers are taken from the id field, classes must be given as space separated words in the class field. All remaining fields are included as attributes. With this change, the following lines now create equal elements:

New unexported module Text.Pandoc.Lua.Walk (Albert Krewinkel). Lua filters must be able to traverse sequences of AST elements and to replace elements by splicing sequences back in their place. Special Walkable instances can be used for this; those are provided in a new module Text.Pandoc.Lua.Walk .

Traverse nested blocks and inlines in correct order (Albert Krewinkel, #5667). Traversal methods are updated to use the new Walk module so that sequences with nested Inline (or Block) elements are traversed in the order in which they appear in the linearized document.

Switch to new pandoc-types and use Text instead of String [API change]. (Christian Despres, #5884).

Change merge behavior for metadata. Previously, if a document contained two YAML metadata blocks that set the same field, the conflict would be resolved in favor of the first. Now it is resolved in favor of the second (due to a change in pandoc-types). This makes the behavior more uniform with other things in pandoc (such as reference links and --metadata-file ).

Allow combining -Vheader-includes and --include-in-header (#5904). Previously header-includes set as a variable would be clobbered by material included using --include-in-header .

Don’t look for template files remotely for remote input (#5579). Previously pandoc would look for the template at a remote URL when a URL was used for the input file, instead of taking it from the data directory.

When --ipynb-output is used with the default “best” format, strip ANSI escape codes for non-ipynb output (#5633). These cause problems in many formats, including LaTeX.

Fix gfm_auto_identifiers behavior with emojis (#5813). Note that we also now use emoji names for emojis when ascii_identifiers is enabled.

Make some writers sensitive to ‘unlisted’ class on headings (#1762). If this is present on a heading with the ‘unnumbered’ class, the heading won’t appear in the TOC. This class has no effect if ‘unnumbered’ is not also specified. This affects HTML-based writers (including slide shows and EPUB), LateX (including beamer), RTF, and PowerPoint. Other writers do not yet support unlisted .

Allow PDF output to stdout (#5751). PDF output now behaves like other binary formats: it will not be output to the terminal, but can be sent to stdout using either -o - or a pipe. The intermediate format will be determined based on the setting of --pdf-engine .

Allow --metadata-file to be used repeatedly to include multiple metadata files (Owen McGrath, #5702). Values in files specified first will be overridden by those in later files.

Add --shift-heading-level-by option and deprecate --base-heading-level (#5615). The new option does everything the old one does, but also allows negative shifts. It also promotes the document metadata (if not null) to a level-1 heading with a +1 shift, and demotes an initial level-1 heading to document metadata with a -1 shift. This supports converting documents that use an initial level-1 heading for the document title.

The --list-extensions[=FORMAT] option now lists only extensions that affect the given FORMAT.

Add --defaults / -d option. This adds the ability to specify a collection of default values for options in a YAML file. For example, one might define a set of defaults for letters, and then do pandoc -d letter myletter.md -o myletter.pdf . See the documentation of this feature in MANUAL.txt.

Improved sample lua tikz filter in lua-filters docs (#5445, Matthew Doty). There are three changes:

Fix broken links in documents (#5473, Shim Myeongseob). Also, use absolute links to pandoc.org when possible, so that the links can be followed by people viewing these documents on GitHub.

EPUB2/3 templates: Move inline styles to default epub.css (#5466). NOTE: Those who use a custom CSS stylesheet with EPUB should add these lines:

beamer template: Fix using Beamer with geometry (#5505, Daniel Maslowski). Beamer already loads geometry, so we need to use the \geometry command to set geometry options.

Lua: add pandoc.system module (#5468, Albert Krewinkel). The system Lua module provides utility functions to interact with the operating- and file system. E.g. print(pandoc.system.get_current_directory()) or lua pandoc.system.with_temporary_directory('tikz', function (dir) -- write and compile a TikZ file with pdflatex end)

Improve output of Lua tests (#5499, Albert Krewinkel). This makes use of tasty-lua, a package to write tests in Lua and integrate the results into Tasty output. Test output becomes more informative: individual tests and test groups become visible in test output. Failures are reported with helpful error messages.

Text.Pandoc.Logging: Add IgnoredElement constructor for LogMessage . SkippedConetnt doesn’t work for some XML-based readers which don’t have access to parsec source positions.

Text.Pandoc.Class: Fix handling of file: URL scheme in downloadOrRead (#5517, Mauro Bieg). Previously file:/ URLs were handled wrongly and pandoc attempted to make HTTP requests, which failed.

Lua: add Version type to simplify comparisons (Albert Krewinkel). Version specifiers like PANDOC_VERSION and PANDOC_API_VERSION are turned into Version objects. The objects simplify version-appropriate comparisons while maintaining backward-compatibility. A function pandoc.types.Version is added as part of the newly introduced module pandoc.types , allowing users to create version objects in scripts.

Add unicode code point in “Missing character” warning (#5538). If the character isn’t in the console font, the message is pretty useless, so we show the code point for anything non-ASCII.

Org writer: always indent src blocks content by 2 spaces (#5440, Albert Krewinkel). Emacs always uses two spaces when indenting the content of src blocks, e.g., when exiting a C-c ' edit-buffer. Pandoc used to indent contents by the space-equivalent of one tab, but now always uses two spaces, too.

EPUB writer: Fix document section assignments (#5546). For example, introduction should go in bodymatter, not frontmatter, and epigraph, conclusion, and afterward should go in bodymatter, not backmatter. For the full list of assignments, see the manual.

RST writer: treat Span with no attributes as transparent (#5446). Previously an Emph inside a Span was being treated as nested markup and ignored. With this patch, the Span is just ignored.

OpenDocument writer: Roll back automatic figure/table numbering (#5474). This was added in pandoc 2.7.2, but it makes it impossible to use pandoc-crossref. So this has been rolled back for now, until we find a good solution to make this behavior optional (or a creative way to let pandoc-crossref and this feature to coexist).

Docx reader: Add support for w:rtl (#5545). Elements with this property are put into Span inlines with dir="rtl" .

Fix --self-contained so it works when output format has extensions. Previously if you used --self-contained with html-smart or html+smart , it wouldn’t work.

Add tex_math_dollars to multimarkdownExtensions (#5512). This form is now supported in multimarkdown, in addition to tex_math_double_backslash .

linux build process: Remove clone of pandoc-citeproc (#5366). It wasn’t being used; cabal.project specifies the version to use.

stack.yaml - remove -Wmissing-home-modules This seems to cause problems with stack ghci. Remove RTS options.

Text.Pandoc.ImageSize: Improve pdfSize so it handles a wider range of PDFs (#4322, with help from Richard Davis).

Text.Pandoc.Writers.Shared: metaValueToJSON : use Number Values for integers. Pandoc’s MetaValue doesn’t have a distinguished number type, so numbers are put in MetaStrings. If the MetaString consists entirely of digits, we convert it to a Number. We should probably consider adding a MetaNumber constructor to MetaValue, for better round-tripping with JSON etc. This change aids round-tripping in ipynb metadata fields, like toc_depth .

Text.Pandoc.Shared - improve metaToJSON behavior with numbers. We now do a better job marshalling numbers from MetaString or MetaInlines into JSON Number.

Docx writer: Use w:br without attributes for line breaks (#5377). We previously added the attribute type="textWrapping" , but this causes problems on Word Online.

HTML reader: read data-foo attribute into foo (#5392). The HTML writer adds the data- prefix for HTML5 for nonstandard attributes. But the attributes are represented in the AST without the data- prefix, so we should strip this when reading HTML.

If your workflow requires the current behavior, here is a lua filter that will add the .html extension:

Vimwiki reader: improve handling of internal links (#5414). We no longer append .html to link targets, and we add a title wikilink . This mirrors behavior of other wiki readers. Generally the .html extension is not wanted. It may be important for output to HTML in certain circumstances, but it can always be added using a filter that matches on links with title wikilink .

Tests.Old: specify --data-dir=../data to ensure tests can find data files even if they haven’t been installed. Remove old pandoc_datadir environment variable, which hasn’t done anything for a long time.

Text.Pandoc.Shared: Improve filterIpynbOutput . Ensure that images are prioritized over text. best should include everything for ipynb.

Markdown writer: improve handling of raw blocks/inline. We now emit raw content using raw_attribute when no more direct method is available. Use of raw_attribute can be forced by disabling raw_html and raw_tex .

Docx writer: avoid extra copy of abstractNum and num elements in numbering.xml. This caused pandoc-produced docx files to be uneditable using Word Online (#5358).

Allow -o/--output to be used with --print-default-data-file , --print-highlighting-style , --print-default-template . Note that -o must occur BEFORE the --print* command on the command line (this is documented, #5357).

Add tectonic as an option for –pdf-engine (#5345, Cormac Relf). Runs tectonic on STDIN instead of a temporary .tex file, so that it looks in the working directory for \include and \input like the rest of the engines. Allows overriding the output directory args with --pdf-engine-opt=--outdir --pdf-engine-opt="$DIR" .

Rearrange --help output in a more rational way, with common options at the beginning and options grouped by function (#5336).

Old tests: remove need for temp files by using pipeProcess .

Markdown writer: use markdown="1" when appropriate for Divs: when native_divs and markdown_in_html_blocks are disabled but raw_html and markdown_attribute are enabled.

ipynb reader: handle images referring to attachments. Previously we didn’t strip off the attachment: prefix, so even though the attachment was available in the mediabag, pandoc couldn’t find it.

LaTeX reader: don’t let \egroup match { . braced now actually requires nested braces. Otherwise some legitimate command and environment definitions can break.

Add latexmk as an option for --pdf-engine (#3195). Note that you can use --pdf-engine-opt=-outdir=bar to specify a persistent temp directory.

asciidoctor is now an output format separate from asciidoc , to accommodate some minor implementation-specific differences (currently just in the treatment of display math).

Add command line option --ipynb-output=all|none|best (#5339). Output cells in ipynb notebooks often contain several different versions of an output, with different MIME types, e.g. an HTML table and a plain-text fallback. Specifying --ipynb-output=best (the default) ensures that the best version for the output format is used. all includes all versions, and none suppresses them all, leaving output cells empty.

Slide show formats behavior change: content under headers less than slide level is no longer ignored, but included in the title slide (for HTML slide shows) or in a slide after the title slide (for beamer). This change makes possible 2D reveal.js slideshows with content in the top slide on each stack (#4317, #5237).

Use XDG data directory for user data directory (#3582). Instead of $HOME/.pandoc , the default user data directory is now $XDG_DATA_HOME/pandoc , where XDG_DATA_HOME defaults to $HOME/.local/share but can be overridden by setting the environment variable. If this directory is missing, then $HOME/.pandoc is searched instead, for backwards compatibility. However, we recommend moving local pandoc data files from $HOME/.pandoc to $HOME/.local/share/pandoc . On Windows the default user data directory remains the same.

Tests: Cleaned up findPandoc in Tests.Helpers , so it works well with cabal v2.

Removed custom Setup.hs, use build-type: simple. The only thing we gained from the custom build was automatic installation of the man page when using ‘cabal install’. But custom builds cause problems, e.g., with cross-compilation. Installation of the man page is better handled by packagers. Note to packagers (e.g. Debian): it may be necessary to add a step installing the man page with the next release.

data/pandoc.lua: auto-fix nested constructor arguments (Albert Krewinkel). Incorrect types to pandoc element constructors are automatically converted to the correct types when possible. This was already done for most constructors, but conversions are now also done for nested types (like lists of lists).

Normalize Windows paths to account for change in ghc 8.6 (#5127). When pandoc is compiled with ghc 8.6, Windows paths are treated differently, and paths beginning \\server no longer work. This commit rewrites such patsh to \\?\UNC\server which works. The change operates at the level of argument parsing, so it only affects the command line program.

Use safeRead instead of read everywhere in the code (John MacFarlane, Mauro Bieg, #5162, #5180).

Text.Pandoc.Process: update pipeProcess (Albert Krewinkel). The implementation of pipeProcess was rewritten to fix sporadic failures caused by prematurely closed pipes.

Improve error messages for UTF-8 decoding errors. Now we give the filename and byte offset (#4765).

Text.Pandoc.Writers.Shared - add toTableOfContents . [API change] This is refactored out from the Markdown writer. It can be used in other writers to create a table of contents.

Text.Pandoc.Writers: Changed types of writeJSON ; it now runs in an instance of PandocMonad, like the other readers and writers. [API change]

Text.Pandoc.Readers: Changed types of readJSON ; it now runs in an instance of PandocMonad, like the other readers and writers. [API change]

MediaWiki writer: fix caption, use ‘thumb’ instead of ‘frame’ (#5105). Captions used to have the word ‘caption’ prepended; this has been removed. Also, ‘thumb’ is used instead of ‘frame’ to allow images to be resized.

Man/Ms writers: Don’t escape - as \- . The \- gets rendered in HTML and PDF as a unicode minus sign.

Texinfo writer: Use header identifier for anchor if present (#4731). Previously we were overwriting an existing identifier with a new one.

MediaWiki reader: use _ instead of - in auto-identifiers (#4731). We may not still be exactly matching mediawiki’s algorithm.

Allow some command line options to take URL in addition to FILE. --include-in-header , --include-before-body , --include-after-body .

Implement task lists (#3051, Mauro Bieg). Added task_lists extension. Task lists are supported from markdown and gfm input. They should work, to some degree, in all output formats, though in most formats you’ll get a bullet list with a unicode character for the box. In HTML, you get checkboxes and in LaTeX/PDF output, a box is used as the list marker. API changes:

pandoc.cabal: Add cabal flag derive_json_via_th (Albert Krewinkel) Disabling the flag will cause derivation of ToJSON and FromJSON instances via GHC Generics instead of Template Haskell. The flag is enabled by default, as deriving via Generics can be slow (see #4083).

Text.Pandoc.XML: in toHtml5Entities , prefer shorter entities when there are several choices for a particular character.

Text.Pandoc.Writers.ICML: Consolidate adjacent strings, inc. spaces. This avoids splitting up the output unnecessarily into separate elements.

Text.Pandoc.Writers.HTML: Use plain " instead of " outside of attributes.

In addition, ibooks-specific metadata can now be included via an XML file. (Previously, it could only be included via YAML metadata, see #2693.)

are now included from an epub XML metadata file. You can also include this information in your YAML metadata, like so:

Text.Pandoc.Readers.FB2: Do not throw error for unknown elements in <body> (Alexander Krotov). Some libraries include custom elements in their FB2 files.

Text.Pandoc.App: split into several unexported submodules (Albert Krewinkel): Text.Pandoc.App.FormatHeuristics, Text.Pandoc.App.Opt, Text.Pandoc.App.CommandLineOptions, Text.Pandoc.App.OutputSettings. This is motivated partly by the desire to reduce recompilations when something is modified, since App previously depended on virtually every other module.

Custom writers: Custom writers have access to the global variable PANDOC_DOCUMENT (Albert Krewinkel, #4957). The variable contains a userdata wrapper around the full pandoc AST and exposes two fields, meta and blocks . The field content is only marshaled on-demand, performance of scripts not accessing the fields remains unaffected.

Fix MetaList constructor (Albert Krewinkel). Passing a MetaList object to the constructor pandoc.MetaList now returns the passed list as a MetaList. This is consistent with the constructor behavior when passed an (untagged) list.

Ensure that MetaList elements behave like Lists. Methods usable on Lists can also be used on MetaList objects.

Raw table fields of AST elements should be considered an implementation detail and might change in the future. Accessing element properties should always happen through the fields listed in the Lua filter docs.

Iterate over AST element fields when using pairs . This makes it possible to iterate over all ield names of an AST element by using a generic for loop with pairs`:

Rename ReaderOptions fields, use snake_case. Snake case is used in most variable names, using camelCase for these fields was an oversight. A metatable is added to ensure that the old field names remain functional.

Push ListAttributes via constructor (Albert Krewinkel). This ensures that ListAttributes, as present in OrderedList elements, have additional accessors (viz. start , style , and delimiter ).

Allow access to pandoc state (#5015). Lua filters and custom writers now have read-only access to most fields of pandoc’s internal state via the global variable PANDOC_STATE .

Report traceback when an error occurs. A proper Lua traceback is added if either loading of a file or execution of a filter function fails. This should be of help to authors of Lua filters who need to debug their code.

Log warnings about missing title attributes now include a suggestion about how to fix the problem (#4909).

Org reader: Add partial support for #+EXCLUDE_TAGS option. (#4284, Brian Leung). Headers with the corresponding tags should not appear in the output.

RST reader: Pass through fields in unknown directives as div attributes (#4715). Support class and name attributes for all directives.

With --katex in HTML formats, do not use the autorenderer (#4946). We no longer surround formulas with \(..\) or \[..\] . Instead, we tell katex to convert the contents of span elements with class “math”. Since math has already been identified, this avoids wasted time parsing for LaTeX delimiters. Note, however, that this may yield unexpected results if you have span elements with class “math” that don’t contain LaTeX math. Also, use latest version of KaTeX by default (0.9.0).

Powerpoint writer: support raw openxml (Jesse Rosenthal, #4976). This allows raw openxml blocks and inlines to be used in the pptx writer. Caveats: (1) It’s up to the user to write well-formed openxml. The chances for corruption, especially with such a brittle format as pptx, is high. (2) Because of the tricky way that blocks map onto shapes, if you are using a raw block, it should be the only block on a slide (otherwise other text might end up overlapping it). (3) The pptx ooxml namespace abbreviations are different from the docx ooxml namespaces. Again, it’s up to the user to get it right. Unzipped document and ooxml specification should be consulted.

CommonMark (and gfm) writer: Add plain text fallbacks. (#4528, quasicomputational). Previously, the writer would unconditionally emit HTML output for subscripts, superscripts, strikeouts (if the strikeout extension is disabled) and small caps, even with raw_html disabled. Now there are plain-text (and, where possible, fancy Unicode) fallbacks for all of these corresponding (mostly) to the Markdown fallbacks, and the HTML output is only used when raw_html is enabled.

AsciiDoc writer: always use single-line section headers, instead of the old underline style (#5038). Previously the single-line style would be used if --atx-headers was specified, but now it is always used.

Improved detection of format based on extension (in Text.Pandoc.App). We now ensure that if someone tries to convert a file for a format that has a pandoc writer but not a reader, it won’t just default to markdown.

For HTML5 output, --ascii now uses HTML5 character reference entities rather than numerical entities.

--ascii now works with LaTeX output. 100% ASCII output can’t be guaranteed, but the writer will use commands like \"{a} and \l whenever possible, to avoid emitting a non-ASCII character.

--ascii is now implemented in the writers, not in Text.Pandoc.App, via the new writerPreferAscii field in WriterOptions . Now the write* functions for Docbook, HTML, ICML, JATS, LaTeX, Ms, Markdown, and OPML are sensitive to writerPreferAscii . Previously the to-ascii translation was done in Text.Pandoc.App, and thus not available to those using the writer functions directly.

This module also contains Pushable and Peekable instances required to get pandoc’s data types to and from Lua. Low-level Lua operation remain hidden in Text.Pandoc.Lua.

Text.Pandoc.Writers.Markdown: Ensure blank between raw block and normal content (#4629). Otherwise a raw block can prevent a paragraph from being recognized as such.

Text.Pandoc.Writers.OpenDocument: Improve bullet/numbering alignment (#4385). This change eliminates the large gap we used to have between bullet and text, and also ensures that numbers in numbered lists will be right-aligned.

Text.Pandoc.Writers.AsciiDoc: Prevent illegal nestings. Adjust header levels so that n+1 level headers are only found under n level headers, and the top level is 1.

Handle tables in table cells (#4953). Although this is not documented in the spec, some versions of Word require a w:p element inside every table cell. Thus, we add one when the contents of a cell do not already include one (e.g. when a table cell contains a table).

Add framework for custom properties (#3034). So far, we don’t actually write any custom properties, but we have the infrastructure to add this.

Text.Pandoc.Readers.Docx: Trigger bold/italic with bCs, iCs (#4947). These are variants for “complex scripts” like Arabic and are now treated just like b, i (bold, italic).

Support breq math environments: dmath , dgroup , darray . This collects some of the general-purpose code from the LaTeX reader, with the aim of making the module smaller.

Fix bugs omitting raw tex (#4527). The default is -raw_tex , so no raw tex should result unless we explicitly say +raw_tex . Previously some raw commands did make it through.

Make macroDef polymorphic and allow in inline context. Otherwise we can’t parse something like \lowercase{\def\x{Foo}} . I have actually seen tex like this in the wild.

Tokenize before pulling tokens, rather than after (#4408). This has some performance penalty but is more reliable.

Text.Pandoc.Readers.JATS: Use foldl' instead of maximum to account for empty lists (Alexander Krotov).

Lua filter internals: push Shared.Element as userdata (Albert Krewinkel). Hierarchical Elements were pushed to Lua as plain tables. This is simple, but has the disadvantage that marshaling is eager: all child elements will be marshaled as part of the object. Using a Lua userdata object instead allows lazy access to fields, causing content marshaling just (but also each time) when a field is accessed. Filters which do not traverse the full element contents tree become faster as a result.

Build Windows binary using ghc 8.6.1 and cabal new-build. This fixes issues with segfaults in the 32-bit Windows binaries (#4283).

JATS writer: remove ‘role’ attribute on ‘bold’ and ‘sc’ elements (#4937). The JATS spec does not allow these.

ODT Writer: Improve table header row style handling (Nils Carlson). This changes the way styles for cells in the header row and normal rows are handled in ODT tables. Previously a new (but identical) style was generated for every table, specifying the style of the cells within the table. After this change there are two style definitions for table cells, one for the cells in the header row, one for all other cells. This doesn’t change the actual styles, but makes post-processing changes to the table styles much simpler as it is no longer necessary to introduce new styles for header rows and there are now only two styles where there was previously one per table.

ConTeXt writer: change \ to / in Windows image paths (#4918). We do this in the LaTeX writer, and it avoids problems. Note that / works as a LaTeX path separator on Windows.

Markdown reader: distinguish autolinks in the AST. With this change, autolinks are parsed as Links with the uri class. (The same is true for bare links, if the autolink_bare_uris extension is enabled.) Email autolinks are parsed as Links with the email class. This allows the distinction to be represented in the AST.

Clean up appveyor build and Windows package creation. We now use 64-bit stack and ghc 8.4.3, lts-12 for the 64-bit build. The WiX-based msi is now 64-bit for 64-bit builds (fixing #4795).

HTML5 template: add the title-block-header identifier to the header element, to make it easier to style precisely (#4767, J. B. Rainsberger).

LaTeX writer/template: be sensitive to filecolor variable (#4822). linkcolor only affects internal links, and urlcolor only affects linked URLs. For external links, the option to use is filecolor .

Haddock writer: Use proper format for latex math in haddock (#4571, Joe Hermaszewski). Inline math in \(..\) , display math in \[..\] , tex is now used. Previously we’d “fake it with unicode” and fall back to tex when that didn’t work. But newer haddock versions support latex math.

FB2 writer: put coverpage element between title and date rather than in document-info element (#4854).

EPUB writer: set epub:type on body element in each chapter, depending on the epub:type of the first section (#4823). This only affects epub3. See http://www.idpf.org/epub/profiles/edu/structure/#h.l0bzsloklt10

ODT reader: deal gracefully with missing <office:font-face-decls/> (#4336). This allows pandoc to parse ODT document produced by KDE’s Calligra.

Add --metadata-file option (Mauro Bieg, #1960), which allows users to specify metadata in a YAML file, regardless of the input format (#1960).

We here record another undocumented (but desirable) change in 2.2.3: numerical metadata fields are now parsed as MetaInlines rather than MetaString.

Markdown reader: Properly handle boolean values in YAML metadata (#4819). This fixes a regression in 2.2.3, which cause boolean values to be parsed as MetaInlines instead of MetaBool.

LaTeX template: Moved some beamer code in default.latex template. This change allows beamer themes to change the template and font (as Metropolis does) (#4450).

RST template: use titleblock instead of title . Users of custom RST templates will want to update this.

Lua Utils module: add function blocks_to_inlines (#4799, Albert Krewinkel). Exposes a function converting which flattenes a list of blocks into a list of inlines. An example use case would be the conversion of Note elements into other inlines.

MediaWiki writer: Avoid extra blank line in tables with empty cells (#4794). Note that the old output is semantically identical, but the new output looks better.

DocBook reader: metadata handling improvements. Now we properly parse title and subtitle elements that are direct children of book and article (as well as children of bookinfo, articleinfo, or info). We also now use the subtitle metadata field for subtitles, rather than tacking the subtitle on to the title.

Markdown reader: Allow unquoted numbers and booleans as YAML mapping keys. Previously in 2.2.2 you could not do

Org reader: fix parsers relying on parseFromString (#4784, Albert Krewinkel). Emphasis was not parsed when it followed directly after some block types (e.g., lists).

Fix for bug in parsing \input in rawLaTeXBlock and rawLaTeXInline (#4781). (This primarily affects the markdown reader, and other readers that accept raw tex.) Starting in 2.2.2, everything after an \input (or \include ) in a markdown file would be parsed as raw LaTeX.

Fix regression finding templates in user data directory (#4777). Under version 2.2.1 and prior pandoc found latex templates in the templates directory under the data directory, but this broke in 2.2.2.

Exclude foundation 0.0.21 for ghc 7.10. Otherwise cabal gets confused because of the way ghc 7.10 is excluded in foundation’s cabal file. This can be removed when haskell-foundation/foundation#500 is fixed.

Remove network-uri flag and use ‘Network.Socket’. This removes a compiler warning. There is no need for the old network-uri flag, since network 2.6 was released in 2014.

In API docs, clarify how Ext_east_asian_line_breaks extension works (kaizshang91). Note that it will not take effect when readers/writers are called as libraries (#4674).

Clarify macOS install in INSTALL.md (#4661). Make the binary package installer the recommended method, and note that on some older versions of macOS, homebrew installs from source and takes a lot of disk space (#4664, Ian).

Text.Pandoc.Emoji now exports emojiToInline , which returns a Span inline containing the emoji character and some attributes with metadata (class emoji , attribute data-emoji with emoji name). (API change, Anders Waldenborg, #4743).

Custom writer: fix error message on script failure (Albert Krewinkel). Error messages produced by Lua were not displayed by Pandoc.

reveal.js writer and template: reuse mathjax URL provided by the argument to --mathjax or the normal pandoc default, rather than a hard-coded one in the template (#4701).

EPUB writer: Properly escape pagetitle. Previously we weren’t escaping & and other XML characters in the pagetitle, so a title containing a & would be invalid.

Markdown and commonmark/github writers now respect the emoji extension. So, -f markdown+emoji -t markdown+emoji now leaves :smile: as :smile: rather than converting it to a smile character.

Markdown writer: Preserve implicit_figures with attributes, even if implicit_attributes is not set, by rendering in raw HTML (#4677).

Texinfo writer: Use @sup and @sub instead of custom macros (#4728, Alexander Krotov).

TikiWiki reader: Improve list parsing (#4722, Mauro Bieg). Remove trailing Space from list items. Parse lists that have no space after marker.

CommonMark reader: Handle ascii_identifiers extension (#4742, Anders Waldenborg). Non-ascii characters were not stripped from identifiers even if the ascii_identifiers extension was enabled (which is is by default for gfm).

Note: HsYAML implements YAML 1.2, in which the valid true values are true , True , TRUE . This means a change in the semantics of YAML metadata that could affect users: y , yes , and on no longer count as true values.

Use HsYAML instead of yaml for translations and YAML metadata (#4747). yaml wraps a C library; HsYAML is pure Haskell. Advances #4535.

ConTeXt template: New Greek fallback typeface (Pablo Rodríguez, #4405). CMU Serif gives better typographic results than the previous Greek fallback DejaVu Serif.

Text.Pandoc.Class: Catch IO errors when writing media files and issue a warning, rather than an error (Francesco Occhipinti, #4559).

Text.Pandoc.Shared: add uriPathToPath . This adjusts the path from a file: URI in a way that is sensitive to Windows/Linux differences. Thus, on Windows, /c:/foo gets interpreted as c:/foo , but on Linux, /c:/foo gets interpreted as /c:/foo . See #4613.

test-pandoc-utils.lua : more robust testing on both windows and *nix. Previously the pipe tests were only run if \bin/false and /bin/sed were present, which they aren’t in default MacOS and Windows systems. Fixed by using tr and false , which should always be in the path on a *nix system, and find and echo for Windows.

Org reader: Fix image filename recognition (Albert Krewinkel). Use a function from the filepath library to check whether a string is a valid file name. The custom validity checker that was used before gave wrong results (e.g. for absolute file paths on Windows, kawabata/ox-pandoc#52).

Removed old lib directory. This was used for something long ago, but plays no role now.

Fix bash completion for --print-default-data-file (#4549). Previously this looked in the filesystem, even if pandoc was compiled with embed_data_files (and sometimes it looked in a nonexistent build directory). Now the bash completion script just includes a hard-coded list of data file names.

ms template: Fix date. Previously .ND was used, but this only works if you have a title page, which we don’t. Thanks to @teoric.

Changes to tests to accommodate changes in pandoc-types. In https://github.com/jgm/pandoc-types/pull/36 we changed the table builder to pad cells. This commit changes tests (and two readers) to accord with this behavior.

Make --ascii work for all XML formats (ICML, OPML, JATS,…), and for ms and man .

appveyor: use VS 2013 environment instead of VS 2015 for Windows builds.

Make weigh-pandoc into a benchmark program. Remove weigh-pandoc flag. weigh-pandoc is now built (and run) automatically when you build (and run) benchmarks.

Removed old-locale flag and Text.Pandoc.Compat.Time. This is no longer necessary since we no longer support ghc 7.8.

pandoc.cabal: fix up other-extensions and language fields. Language is now consistently Haskell2010 , and other-extensions is consistently NoImplicitPrelude . Everything else to be specified in the module header as needed.

ConTeXt template: Added pdfa variable to generate PDF/A (#4294, Henri Menke). Instructions on how to install the ICC profiles on ConTeXt standalone can be found in the wiki: http://wiki.contextgarden.net/PDFX#ICC_profiles . If the ICC profiles are not available the log will contain error messages.

LaTeX template: Provide bidi package’s option using \PassOptionsToPackage (#4357, Václav Haisman). This avoid a clash when polyglossia loads it first and then it is loaded again for XeLaTeX.

Raise error if someone tries to print docx, odt, etc. template (#4441).

Add custom Prelude to give clean code for Monoid and Semigroup that works with ghc 7.10-8.4. The custom Prelude ( prelude/Prelude ) is used for ghc versions < 8.4. NoImplicitPrelude is used in all source files, and Prelude is explicitly imported (this is necessary for ghci to work properly with the custom prelude).

Add Semigroup instances for everything for which we defined a Monoid instance previously (API change):

Beamer writer: put hyperlink after \begin{frame} and not in the title (#4307). If it’s in the title, then we get a titlebar on slides with the plain attribute, when the id is non-null. This fixes a regression in 2.0.

Docx writer: Fixed formatting of DefaultStyle ordered lists in docx writer. We want decimal for the top level, not lower roman.

Haddock writer: In the writer, we now render tables always as grid tables, since Haddock supports these.

Haddock reader: Better table handling, using haddock-library’s new table support, if compiled against a version that includes it. Note that tables with col/rowspans will not translate well into Pandoc.

Removed ghc-prof-options. As of cabal 1.24, sensible defaults are used.

Lua filters: store constructors in registry (Albert Krewinkel). Lua functions used to construct AST element values are stored in the Lua registry for quicker access. Getting a value from the registry is much faster than getting a global value (partly to idiosyncrasies of hslua); this change results in a considerable performance boost.

Tests: Abstract powerpoint tests out to OOXML tests (Jesse Rosenthal). There is very little pptx-specific in these tests, so we abstract out the basic testing function so it can be used for docx as well. This should allow us to catch some errors in the docx writer that slipped by the roundtrip testing.

Lua: register script name in global variable (#4393). The name of the Lua script which is executed is made available in the global Lua variable PANDOC_SCRIPT_FILE , both for Lua filters and custom writers.

Slides: Use divs to set incremental/non-incremental (#4381, Jesse Rosenthal). The old method (list inside blockquote) still works, but we are encouraging the use of divs with class incremental or nonincremental .

RST template: remove definition of ‘math’ role as raw. This used to be needed prior to v 0.8 of docutils, but now math support is built-in.

Allow changing emphasis syntax (#4378). The characters allowed before and after emphasis can be configured via #+pandoc-emphasis-pre and #+pandoc-emphasis-post , respectively. This allows to change which strings are recognized as emphasized text on a per-document or even per-paragraph basis. Example:

Move metaValueToInlines to from Docx writer to Text.Pandoc.Writers.Shared , so it can be used by other writers (Jesse Rosenthal).

Fix inconsistent column widths (#4238). This fixes a bug whereby column widths for the body were different from widths for the header in some tables.

Allow macro definitions inside macros (#4253). Previously we went into an infinite loop with

Pass through macro defs in rawLaTeXBlock even if the latex_macros extension is set (#4246). This reverts to earlier behavior and is probably safer on the whole, since some macros only modify things in included packages, which pandoc’s macro expansion can’t modify.

Generate README.md from template and MANUAL.txt. make README.md will generate the README.md after changes to MANUAL.txt have been made.

Lua.Module.Utils : make stringify work on MetaValues (John MacFarlane). I’m sure this was intended in the first place, but currently only Meta is supported.

Stop exporting pushPandocModule (API change). The introduction of runPandocLua renders direct use of this function obsolete.

Bump hslua version to 0.9.5. This version fixes a bug that made it difficult to handle failures while getting lists or a Map from Lua. A bug in pandoc, which made it necessary to always pass a tag when using MetaList or MetaBlock, is fixed as a result. Using the pandoc module’s constructor functions for these values is now optional (if still recommended).

data/pandoc.lua : fix attribute names of Citation (#4222). The fields were named like the Haskell fields, not like the documented, shorter version. The names are changed to match the documentation and Citations are given a shared metatable to enable simple extensibility.

data/pandoc.lua : fix Element inheritance. Extending all elements of a given type (e.g., all inline elements) was difficult, as the table used to lookup unknown methods would be reset every time a new element of that type was created, preventing recursive property lookup. This is was changed in that all methods and attributes of supertypes are now available to their subtypes.

data/pandoc.lua : split type and behavior tables. Clearly distinguish between a type and the behavioral properties of an instance of that type. The behavior of a type (and all its subtypes) can now be amended by adding methods to that types behavior object, without exposing the type objects internals. E.g.:

data/pandoc.lua : make all types subtypes of AstElement . Pandoc , Meta , and Citation were just plain functions and did not set a metatable on the returned value, which made it difficult to amend objects of these types with new behavior. They are now subtypes of AstElement, meaning that all their objects can gain new features when a method is added to the behavior object (e.g., pandoc.Pandoc.behavior ).

The current pandoc-types version is made available to Lua programs in the global PANDOC_API_VERSION . It contains the version as a list of numbers.

Text.Pandoc.Class: make FileTree opaque (don’t export FileTree constructor). This forces users to interact with it using insertInFileTree and getFileInfo , which normalize file names.

Use latest skylighting and omit the missingIncludes check, fixing a major performance regression in earlier releases of the 2.x series (#4226). Behavior change: If you use a custom syntax definition that refers to a syntax you haven’t loaded, pandoc will now complain when it is highlighting the text, rather than doing a check at the start. This change dramatically speeds up invocations of pandoc on short inputs.

Allow filters and lua filters to be interspersed (#4196). Previously we ran all lua filters before JSON filters. Now we run filters in the order they are presented on the command line, whether lua or JSON. There are two incompatible API changes: The type of applyFilters has changed, and applyLuaFilters has been removed. Filter is also now exported.

Removed stack.pkg.yaml . We only really need stack.yaml ; we can put flag settings for pandoc-citeproc there.

Added stack.lts9.yaml for building with lts 9 and ghc 8.0.2. We still need this for the alpine static linux build, since we don’t have ghc 8.2.2 for that yet.

Removed default.theme data file (#4096). It is no longer needed now that we have --print-highlight-style .

Updated reference.docx (#4175). Instead of just “Hello, world”, the document now contains exemplars of most of the styles that have an effect on pandoc documents. This makes it easier to see the effect of style changes.

Update latex template to work with recent versions of beamer. The old template produced numbered sections with some recent versions of beamer. Thanks to Thomas Hodgson.

Allow lenient decoding of latex error logs, which are not always properly UTF8-encoded (#4200).

Text.Pandoc.Extensions: Alphabetical order constructors for Extension . This makes them appear in order in --list-extensions .

Text.Pandoc.Class: Add insertInFileTree [API change]. This gives a pure way to insert an ersatz file into a FileTree . In addition, we normalize paths both on insertion and on lookup.

Fixed regression: when target is PDF, writer extensions were being ignored. So, for example, pandoc -t latex-smart -o file.pdf did not work properly.

Allow --list-extensions to take an optional FORMAT argument. This lists the extensions set by default for the selected FORMAT. The extensions are now alphabetized, and the + or - indicating the default setting comes before, rather than after, the extension.

reveal.js template: add title-slide identifier to title slide (#4120). This allows it to be styled more easily.

Man writer: omit internal links (#4136). That is, just print the link text without the URL.

LaTeX reader: fix \ before newline (#4134). This should be a space, as long as it’s not followed by a blank line. This has been fixed at the tokenizer level.

Create shared Text.Pandoc.Writers.OOXML module (Jesse Rosenthal). This is for functions used by both Powerpoint and Docx writers.

Add PowerPoint (pptx) writer (Jesse Rosenthal). It works following the standard Pandoc conventions for making other sorts of slides. Caveats:

Fix CSS issues involving line numbers (#4128). Highlighted code blocks are now enclosed in a div with class sourceCode . Highlighting CSS no longer sets a generic color for pre and code; we only set these for class sourceCode .

Fix a bug in 2.0.4, whereby pandoc could not read the theme files generated with --print-highlight-style (#4133). Improve JSON serialization of styles.

Add epub.md , getting-started.md to docs. These used to live in the website repo.

Changelog: fix description of lua filters in 2.0 release (Albert Krewinkel). Lua filters were initially run after conventional (JSON) filters. However, this was changed later to make it easier to deal with files in the mediabag. The changelog is updated to describe that feature of the 2.0 release correctly.

Clearer deprecation warning for --latexmathml, --asciimathml, -m . Previously we only mentioned --latexmathml , even if -m was used.

Use skylighting 0.4.4.1, fixing the color of unmarked code text when numberLines is used (#4103).

Use latest tagsoup. This fixes a bug in parsing HTML tags with & (but not a valid entity) following them (#4094, #4088).

Lua/StackInstances : push Pandoc and Meta via constructor. Pandoc and Meta elements are now pushed by calling the respective constructor functions of the pandoc Lua module. This makes serialization consistent with the way blocks and inlines are pushed to lua and allows to use List methods with the blocks value.

The List metatable is assigned to the tables which get passed to the constructors MetaBlocks , MetaInline , and MetaList . This enables the use of the resulting objects as lists.

Add basic lua List module (#4099, #4081). The List module is automatically loaded, but not assigned to a global variable. It can be included in filters by calling List = require 'List' . Lists of blocks, lists of inlines, and lists of classes are now given List as a metatable, making working with them more convenient. E.g., it is now possible to concatenate lists of inlines using Lua’s concatenation operator .. (requires at least one of the operants to have List as a metatable):

revealjs template: add tex2jax configuration for the math plugin. With the next release of reveal.js, this will fix the problem of $ s outside of math contexts being interpreted as math delimiters (#4027).

Text.Pandoc.Shared.blocksToInlines : rewrote using builder. This gives us automatic normalization, so we don’t get for example two consecutive Spaces.

Change fixDisplayMath from Text.Pandoc.Writers.Shared so that it no longer produces empty Para ’s as an artifact.

Let papersizes a0 , a1 , a2 , … be case-insensitive by converting the case as needed in LaTeX and ConTeXt writers.

Docx reader: don’t strip out empty paragraphs (#2252). Users who have a conversion pipeline from docx may want to consider adding --strip-empty-paragraphs to the command line.

Add --strip-empty-paragraphs option. This works for any input format. It is primarily intended for use with docx and odt documents where empty paragraphs have been used for inter-paragraph spaces.

Add --print-highlight-style option. This generates a JSON version of a highlighting style, which can be saved as a .theme file, modified, and used with --highlight-style (#4106, #4096).

LaTeX template: include natbib/biblatex after polyglossia (#4073). Otherwise we seem to get an error; biblatex wants polyglossia language to be defined.

EPUB writer: Fixed path for cover image (#4069). It was previously media/media/imagename , and should have been media/imagename .

MANUAL: clarify that math extensions work with HTML. Clarify that tex_math_dollars and tex_math_single_backslash will work with HTML as well as Markdown.

Add amuse extension (Alexander Krotov) to enable Amuse wiki behavior for muse . New Ext_amuse constructor for Extension . Note: this is switched on by default; for Emacs behavior, use muse-amuse .

Text.Pandoc.Parsing.uri: allow & and = as word characters (#4068). This fixes a bug where pandoc would stop parsing a URI with an empty attribute: for example, &a=&b= wolud stop at a . (The uri parser tries to guess which punctuation characters are part of the URI and which might be punctuation after it.)

Allow table-like access to attributes in lua filters (Albert Krewinkel, #4071). Attribute lists are represented as associative lists in Lua. Pure associative lists are awkward to work with. A metatable is attached to attribute lists, allowing to access and use the associative list as if the attributes were stored in as normal key-value pair in table. Note that this changes the way pairs works on attribute lists. Instead of producing integer keys and two-element tables, the resulting iterator function now returns the key and value of those pairs. Use ipairs to get the old behavior. Warning: the new iteration mechanism only works if pandoc has been compiled with Lua 5.2 or later (current default: 5.3).

Lua filters: preload text module (Albert Krewinkel, #4077). The text module is preloaded in lua. The module contains some UTF-8 aware string functions, implemented in Haskell. The module is loaded on request only, e.g.:

Use lua filter to generate man page from MANUAL.txt , replacing old Haskell filters. This is easier and faster.

Fix regression with --metadata (#4054). Values specified with --metadata should replace a metadata value set in the document itself, rather than creating a list including a new value.

Removed etc. from abbreviations file. Often etc. ends a sentence, and we want the period to be treated as a sentence-ending period.

Add lua filter functions walk_inline and walk_block in the pandoc module, to apply filters inside particular inline and block elements.

Fixed URIs in data/jats.csl . They were being rendered twice, leading to invalid XML in default JATS output with pandoc-citeproc.

SelfContained: use base64 for css links with media attribute (#4026). This fixes --self-contained with S5.

Use texmath 0.10, which adds support for a wider range of symbols and fixes default column alignments in MathML and OMML.

Improved fix to #3989 (parsing of HTML tags containing > in an attribute or comment). The previous fix (in 2.0.1) only worked in certain cases.

Fixed example of slide columns structure in changelog (#4015). Also documented this feature in MANUAL.txt.

Text.Pandoc.ImageSize : Add Millimeter constructor to Dimension (#4012) [API change]. Now sizes given in ‘mm’ are no longer converted to ‘cm’.

HTML Writer: consistently use dashed class-names (Mauro Bieg, #3556). Note: this change may require some changes in CSS rules. footnoteRef has become footnote-ref , titleslide has become title-slide , and footnoteBack has become footnote-back .

Make fenced_divs affect the Markdown writer. If fenced_divs is enabled, Divs will be rendered as fenced divs.

Fixed regression in parsing of HTML comments in markdown and other non-HTML formats ( Text.Pandoc.Readers.HTML.htmlTag ) (#4019). The parser stopped at the first > character, even if it wasn’t the end of the comment.

Allow ibooks-specific metadata in epubs (#2693). You can now have the following fields in your YAML metadata, and it will be treated appropriately in the generated EPUB:

Add space_in_atx_header extension (#3512). This is enabled by default in pandoc and GitHub markdown but not the other flavors. This requirse a space between the opening #’s and the header text in ATX headers (as CommonMark does but many other implementations do not). This is desirable to avoid falsely capturing things ilke

This was previously enabled by default; now it is forbidden by default.

Added spaced_reference_links extension (#2602). It allows whitespace between the two parts of a reference link: e.g.

Added four_space_rule extension. This triggers the old pandoc parsing rule for content nested under list items (the “four space rule”).

This change was motivated by a slew of bug reports from people who expected lists to work differently (#3125, #2367, #2575, #2210, #1990, #1137, #744, #172, #137, #128) and by the growing prevalance of CommonMark (now used by GitHub, for example). Those who prefer the old behavior can use -f markdown+four_space_rule .

Here the code block will start with two spaces, whereas under the four-space rule, it would start with code . With the four-space rule, indented code under a list item always must be indented eight spaces from the margin, while the new rules require only that it be indented four spaces from the beginning of the first non-space text after the list marker (here, a ).

Here we have an indented code block under the list item, even though it is only indented six spaces from the margin, because it is four spaces past the point where a continuation paragraph could begin. With the four-space rule, this would be a regular paragraph rather than a code block.

will be parsed as a list item with a sublist; under the four-space rule, it would be a list with two items.

Documents that adhere to the four-space rule should, in most cases, be parsed the same way by the new rules. Here are some examples of texts that will be parsed differently:

Lists in markdown by default now use the CommonMark variable nesting rules (#3511). The indentation required for a block-level item to be included in a list item is no longer fixed, but is determined by the first line of the list item. To be included in the list item, a block must be indented to the level of the first non-space content after the list marker. Exception: if are 5 or more spaces after the list marker, then the content is interpreted as an indented code block, and continuation paragraphs must be indented two spaces beyond the end of the list marker. See the CommonMark spec for more details and examples.

Allow a theme file as argument to --highlight-style . Also include a sample, default.theme , in data/ .

Added –abbreviations=FILE option for custom abbreviations file (#256). Dfault abbreviations file ( data/abbreviations ) contains a list of strings that will be recognized by pandoc’s Markdown parser as abbreviations. (A nonbreaking space will be inserted after the period, preventing a sentence space in formats like LaTeX.) Users can override the default by putting a file abbreviations in their user data directory ( ~/.pandoc on *nix).

Added --resource-path=SEARCHPATH command line option (#852). SEARCHPATH is separated by the usual character, depending on OS (: on unix, ; on windows). Default resource path is just working directory. However, the working directory must be explicitly specified if the --resource-path option is used.

Added --epub-subdirectory option (#3720). This specifies the subdirectory in the OCF container that holds the EPUB specific content. We now put all EPUB related content in an EPUB/ subdirectory by default (later this will be configurable).

Set PANDOC_READER_OPTIONS in environment where filters are run. This contains a JSON representation of ReaderOptions , so filters can access it.

Added lua filters (Albert Krewinkel, #3514). The new --lua-filter option works like --filter but takes pathnames of special lua filters and uses the lua interpreter baked into pandoc, so that no external interpreter is needed. Note that lua filters are all applied after regular filters, regardless of their position on the command line. For documentation of lua filters, see doc/lua-filters.md .

Add --request-header option, to set request headers when pandoc makes HTTP requests to fetch external resources. For example: --request-header User-Agent:blah .

Support has been added for beamer and all HTML slide formats.

Added new syntax for including raw content in any output format, enabled by the raw_attribute extension (which is on by default for markdown and multimarkdown ). The syntax is the same as for fenced code blocks or code inlines, only with {=FORMAT} for attributes, where FORMAT is the name of the output format (e.g., ms , html ).

New syntax for Divs, with fenced_divs extension enabled by default (#168). This gives an attractive, plain-text way to create containers for block-level content.

New input format vimwiki (Vimwiki markup) (Yuchen Pei, #3705). Note that there is a new data file, data/vimwiki.css , which can be used to display the HTML produced by this reader and pandoc’s HTML writer in the style of vimwiki’s own HTML export.

New input format gfm (GitHub-flavored CommonMark) (#3841). This uses bindings to GitHub’s fork of cmark. markdown_github has been deprecated in favor of gfm .

New output format gfm (GitHub-flavored CommonMark) (#3841). This uses bindings to GitHub’s fork of cmark, so it should parse gfm exactly as GitHub does (excepting certain postprocessing steps, involving notifications, emojis, etc.). markdown_github has been deprecated in favor of gfm .

New output format jats (Journal Article Tag Suite). This is an XML format used in archiving and publishing articles. Note that a URI-encoded CSL stylesheet ( data/jats.csl ) is added automatically unless a stylesheet is specified using --css .

New output format ms (groff ms). Complete support, including tables, math, syntax highlighting, and PDF bookmarks. The writer uses texmath’s new eqn writer to convert math to eqn format, so a ms file produced with this writer should be processed with groff -ms -e if it contains math.

Reader functions no longer presuppose that CRs have been stripped from the input. (They strip CRs themselves, before parsing, to simplify the parsers.)

Added support for translations (localization) (#3559). Currently this only affects the LaTeX reader, for things like \figurename . Translation data files for 46 languages can be found in data/translations .

Make --ascii work with DocBook output too.

Rename --latex-engine to --pdf-engine , and --latex-engine-opt to --pdf-engine-opt .

Removed --parse-raw and readerParseRaw . These were confusing. Now we rely on the +raw_tex or +raw_html extension with latex or html input. Thus, instead of --parse-raw -f latex we use -f latex+raw_tex , and instead of --parse-raw -f html we use -f html+raw_html .

With --filter R filters are now recognized, even if they are not executable (#3940, #3941, Andrie de Vries).

Support SVG in PDF output, converting with rsvg2pdf (#1793).

Make epub an alias for epub3, not epub2.

Removed --epub-stylesheet ; use --css instead (#3472, #847). Multiple stylesheets may be used. Stylesheets will be taken both from --css and from the stylesheet metadata field (which can contain either a file path or a list of them).

--mathml and MathML in HTMLMathMethod no longer take an argument. The argument was for a bridge JavaScript that used to be necessary in 2004. We have removed the script already.

--katex improvements. The latest version is used, and the autoload script is loaded by default.

Change MathJax CDN default since old one is shutting down (#3544). Note: The new URL requires a version number, which we’ll have to update manually in subsequent pandoc releases in order to take advantage of mathjax improvements.

--self-contained : don’t incorporate elements with data-external="1" (#2656). You can leave an external link as it is by adding the attribute data-external=“1” to the element. Pandoc will then not try to incorporate its content when --self-contained is used. This is similar to a feature already supported by the EPUB writer.

Allow --extract-media to work with non-binary input formats (#1583, #2289). If --extract-media is supplied with a non-binary input format, pandoc will attempt to extract the contents of all linked images, whether in local files, data: uris, or external uris. They will be named based on the sha1 hash of the contents.

Make papersize: a4 work regardless of the case of a4 . It is converted to a4 in LaTeX and A4 in ConTeXt.

Make east_asian_line_breaks affect all readers/writers (#3703).

Underlined elements are now treated consistently by readers (#2270, hftf); they are always put in a Span with class underline . This allows the user to treat them differently from other emphasis, using a filter. Docx, Org, Textile, Txt2Tags, and HTML readers have been changed.

Improved behavior of auto_identifiers when there are explicit ids (#1745). Previously only autogenerated ids were added to the list of header identifiers in state, so explicit ids weren’t taken into account when generating unique identifiers. Duplicated identifiers could result. This simple fix ensures that explicitly given identifiers are also taken into account.

Use table-of-contents for contents of toc, make toc a boolean (#2872). Changed markdown, rtf, and HTML-based templates accordingly. This allows you to set toc: true in the metadata; this previously produced strange results in some output formats. For backwards compatibility, toc is still set to the toc contents. But it is recommended that you update templates to use table-of-contents for the toc contents and toc for a boolean flag.

Change behavior with binary format output to stdout. Previously, for binary formats, output to stdout was disabled unless we could detect that the output was being piped (and not sent to the terminal). Unfortunately, such detection is not possible on Windows, leaving windows users no way to pipe binary output. So we have changed the behavior in the following way: Output to stdout is allowed when it can be determined that the output is being piped (on non-Windows platforms).

If the -o option is not used, binary output is never sent to stdout by default; instead, an error is raised.

option is not used, binary output is never sent to stdout by default; instead, an error is raised. If -o - is used, binary output is sent to stdout, regardless of whether it is being piped. This works on Windows too.

Better error behavior: uses of error have been replaced by raising of PandocError , which can be trapped and handled by the calling program.

Removed hard_line_breaks extension from markdown_github (#3594). GitHub has two Markdown modes, one for long-form documents like READMEs and one for short things like issue coments. In issue comments, a line break is treated as a hard line break. In README, wikis, etc., it is treated as a space as in regular Markdown. Since pandoc is more likely to be used to convert long-form documents from GitHub Markdown, -hard_line_breaks is a better default.

Include backtick_code_blocks extension in mardkown_mmd (#3637).

Escape MetaString values (as added with -M/--metadata flag) (#3792). Previously they would be transmitted to the template without any escaping. Note that --M title='*foo*' yields a different result from --- title: *foo* --- In the latter case, we have emphasis; in the former case, just a string with literal asterisks (which will be escaped in formats, like Markdown, that require it).

Allow em , cm , in for image height/width in HTML, LaTeX (#3450).

HTML writer: Insert data- in front of unsupported attributes. Thus, a span with attribute foo gets written to HTML5 with data-foo , so it is valid HTML5. HTML4 is not affected. This will allow us to use custom attributes in pandoc without producing invalid HTML. (With help from Wandmalfarbe, #3817.)

Plain writer: improved super/subscript rendering. We now handle more non-digit characters for which there are sub/superscripted unicode characters. When unicode sub/superscripted characters are not available, we use _(..) or ^(..) (#3518).

Docbook, JATS, TEI writers: print INFO message when omitting interior header (#3750). This only applies to section headers inside list items, e.g., which were otherwise silently omitted.

Change to --reference-links in Markdown writer (#3701). With --reference-location of section or block , pandoc will now repeat references that have been used in earlier sections. The Markdown reader has also been modified, so that exactly repeated references do not generate a warning, only references with the same label but different targets. The idea is that, with references after every block, one might want to repeat references sometimes.

ODT/OpenDocument writer: Support lang attribute (#1667).

attribute (#1667). Added support for --toc (#2836). Thanks to @anayrat .

Docx writer: lang meta, see #1667 (Mauro Bieg, #3515).

Change FigureWithCaption to CaptionedFigure (iandol, #3658).

Use Table rather than Table Normal for table style (#3275). Table Normal is the default table style and can’t be modified.

Pass through comments (#2994). We assume that comments are defined as parsed by the docx reader: I want some text to have a comment on it. We assume also that the id attributes are unique and properly matched between comment-start and comment-end.

Bookmark improvements. Bookmark start/end now surrounds content rather than preceding it. Bookmarks generated for Div with id (jgm/pandoc-citeproc#205).

Add keywords metadata to docx document properties (Ian).

RST writer: support unknown interpreted text roles by parsing them as Span with role attributes (#3407). This way they can be manipulated in the AST.

HTML writer: Line block: Use class instead of style attribute (#1623). We now issue <div class="line-block"> and include a default definition for line-block in the default templates, instead of hard-coding a style on the div.

and include a default definition for in the default templates, instead of hard-coding a on the div. Add class footnoteBack to footnote back references (Timm Albers). This allows for easier CSS styling.

to footnote back references (Timm Albers). This allows for easier CSS styling. Render SmallCaps as span with smallcaps class (#1592), rather than using a style attribute directly. This gives the user more flexibility in styling small caps in CSS.

With reveal.js we use data-src instead of src for images for lazy loading.

instead of for images for lazy loading. Special-case .stretch class for images in reveal.js (#1291). Now in reveal.js, an image with class stretch in a paragraph by itself will stretch to fill the whole screen, with no caption or figure environment.

Added warnings for non-rendered blocks to writers.

Writers now raise an error on template failure.

When creating a PDF via LaTeX, warn if the font is missing some characters (#3742).

Remove initial check for PDF-creating program (#3819). Instead, just try running it and raise the exception if it isn’t found at that point. This improves things for users of Cygwin on Windows, where the executable won’t be found by findExecutable unless .exe is added. The same exception is raised as before, but at a later point.

Readers issue warning for duplicate header identifiers (#1745). Autogenerated header identifiers are given suffixes so as not to clash with previously used header identifiers. But they may still coincide with an explicit identifier that is given for a header later in the document, or with an identifier on a div, span, link, or image. We now issue a warning in this case, so users can supply an explicit identifier.

CommonMark reader now supports emoji , hard_line_breaks , smart , and raw_html extensions.

Markdown reader: Don’t allow backslash + newline to affect block structure (#3730). Note that as a result of this change, the following, which formerly produced a header with two lines separated by a line break, will now produce a header followed by a paragraph: # Hi

there This may affect some existing documents that relied on this undocumented and unintended behavior. This change makes pandoc more consistent with other Markdown implementations, and with itself (since the two-space version of a line break doesn’t work inside ATX headers, and neither version works inside Setext headers).

Org reader (Albert Krewinkel, unless noted): Support table.el tables (#3314).

tables (#3314). Support macros (#3401).

Support the #+INCLUDE: file inclusion mechanism (#3510). Recognized include types are example , export , src , and normal org file inclusion. Advanced features like line numbers and level selection are not implemented yet.

file inclusion mechanism (#3510). Recognized include types are , , , and normal org file inclusion. Advanced features like line numbers and level selection are not implemented yet. Interpret more meta value as inlines. The values of the following meta variables are now interpreted using org-markup instead of treating them as pure strings: keywords (comma-separated list of inlines), subtitle (inline values), nocite (inline values, can be repeated).

(comma-separated list of inlines), (inline values), (inline values, can be repeated). Support

export option (#3940). This turns all newlines in the text into hard linebreaks.

RST reader: Improved admonition support (#223). We no longer add an admonition class, we just use the class for the type of admonition, note for example. We put the word corresponding to the label in a paragraph inside a Div at the beginning of the admonition with class admonition-title . This is about as close as we can get to RST’s own output.

Initial support of .. table directive. This allows adding captions to tables.

Support .. line-block directive. This is deprecated but may still be in older documents.

Support scale and align attributes of images (#2662).

Implemented implicit internal header links (#3475).

Support RST-style citations (#853). The citations appear at the end of the document as a definition list in a special div with id citations . Citations link to the definitions.

Recurse into bodies of unknown directives (#3432). In most cases it’s better to preserve the content than to emit it. This isn’t guaranteed to have good results; it will fail spectacularly for unknown raw or verbatim directives.

Handle chained link definitions (#262). For example, .. _hello: .. _goodbye: example.com Here both hello and goodbye should link to example.com .

Support anchors (#262). E.g. `hello` .. _hello: paragraph This is supported by putting “paragraph” in a Div with id hello .

Support :widths: attribute for table directive.

Implement csv-table directive (#3533). Most attributes are supported, including :file: and :url: .

Support unknown interpreted text roles by parsing them as Span with “role” attributes (#3407). This way they can be manipulated in the AST.

HTML reader: parse a span with class smallcaps as SmallCaps .

LaTeX reader: Implemented \graphicspath (#736).

(#736). Properly handle column prefixes/suffixes. For example, in \begin{tabular}{>{$}l<{$}>{$}l<{$} >{$}l<{$}} each cell will be interpreted as if it has a $ before its content and a $ after (math mode).

each cell will be interpreted as if it has a before its content and a after (math mode). Handle komascript \dedication (#1845). It now adds a dedication field to metadata. It is up to the user to supply a template that uses this variable.

(#1845). It now adds a field to metadata. It is up to the user to supply a template that uses this variable. Support all \textXX commands, where XX = rm , tt , up , md , sf , bf (#3488). Spans with a class are used when there is nothing better.

commands, where XX = , , , , , (#3488). Spans with a class are used when there is nothing better. Expand

ewenvironment macros (#987).

macros (#987). Add support for LaTeX subfiles package (Marc Schreiber, #3530).

Better support for subfigure package (#3577). A figure with two subfigures turns into two pandoc figures; the subcaptions are used and the main caption ignored, unless there are no subcaptions.

Add support for \vdots (Marc Schreiber, #3607).

(Marc Schreiber, #3607). Add basic support for hyphenat package (Marc Schreiber, #3603).

Add basic \textcolor support (Marc Schreiber).

support (Marc Schreiber). Add support for tabularx environment (Marc Schreiber, #3632).

environment (Marc Schreiber, #3632). Better handling of comments inside math environments (#3113). This solves a problem with commented out \end{eqnarray} inside an eqnarray (among other things).

inside an eqnarray (among other things). Parse tikzpicture as raw verbatim environment if raw_tex extension is selected (#3692). Otherwise skip with a warning. This is better than trying to parse it as text!

extension is selected (#3692). Otherwise skip with a warning. This is better than trying to parse it as text! Add \colorbox support (Marc Schreiber).

support (Marc Schreiber). Set identifiers on Spans used for \label .

. Have \setmainlanguage set lang in metadata.

set in metadata. Support etoolbox’s \ifstrequal .

. Support plainbreak , fancybreak et al from the memoir class (bucklereed, #3833).

, et al from the memoir class (bucklereed, #3833). Support \let . Also, fix regular macros so they’re expanded at the point of use, and NOT also the point of definition. \let macros, by contrast, are expanded at the point of definition. Added an ExpansionPoint field to Macro to track this difference.

. Also, fix regular macros so they’re expanded at the point of use, and NOT also the point of definition. macros, by contrast, are expanded at the point of definition. Added an field to to track this difference. Support simple \def macros. Note that we still don’t support macros with fancy parameter delimiters, like \def\foo#1..#2{...} .

macros. Note that we still don’t support macros with fancy parameter delimiters, like . Support \chaptername , \partname , \abstractname , etc. (#3559, obsoletes #3560).

, , , etc. (#3559, obsoletes #3560). Put content of \ref , \label , \eqref commands into Span with attributes, so they can be handled in filters (Marc Schreiber, #3639)

, , commands into with attributes, so they can be handled in filters (Marc Schreiber, #3639) Add Support for glossaries and acronym package (Marc Schreiber, #3589). Acronyms are not resolved by the reader, but acronym and glossary information is put into attributes on Spans so that they can be processed in filters.

and package (Marc Schreiber, #3589). Acronyms are not resolved by the reader, but acronym and glossary information is put into attributes on Spans so that they can be processed in filters. Use Link instead of Span for \ref . This makes more sense semantically and avoids unnecessary Span [Link] nestings when references are resolved.

instead of for . This makes more sense semantically and avoids unnecessary nestings when references are resolved. Rudimentary support for \hyperlink .

. Support \textquoteleft|right , \textquotedblleft|right (#3849).

, (#3849). Support \lq , \rq .

, . Implement

ewtoggle , \iftoggle , \toggletrue|false from etoolbox (#3853).

, , from etoolbox (#3853). Support \RN and \Rn , from biblatex (bucklereed, #3854).

and , from biblatex (bucklereed, #3854). Improved support for \hyperlink , \hypertarget (#2549).

, (#2549). Support \k ogonek accent.

ogonek accent. Improve handling of accents. Handle ogonek, and fall back correctly with forms like \"{} .

. Better support for ogonek accents.

Support for \faCheck and \faClose (Marc Schreiber, #3727).

and (Marc Schreiber, #3727). Support for xspace (Marc Schreiber, #3797).

(Marc Schreiber, #3797). Support \setmainlanguage or \setdefaultlanguage (polyglossia) and \figurename .

or (polyglossia) and . Better handling of \part in LaTeX (#1905). Now we parse chapters as level 0 headers, and parts as level -1 headers. After parsing, we check for the lowest header level, and if it’s less than 1 we bump everything up so that 1 is the lowest header level. So \part will always produce a header; no command-line options are needed.

in LaTeX (#1905). Now we parse chapters as level 0 headers, and parts as level -1 headers. After parsing, we check for the lowest header level, and if it’s less than 1 we bump everything up so that 1 is the lowest header level. So will always produce a header; no command-line options are needed. Add block version of \textcolor (Marc Schreiber).

(Marc Schreiber). \textcolor works as inline and block command (Marc Schreiber).

works as inline and block command (Marc Schreiber). \textcolor will be parse as span at the beginning of a paragraph (Marc Schreiber).

will be parse as span at the beginning of a paragraph (Marc Schreiber). Read polyglossia/babel \text(LANG){...} (bucklereed)

(bucklereed) Improved handling of include files in LaTeX reader (#3971). Previously \include wouldn’t work if the included file contained, e.g., a begin without a matching end.

wouldn’t work if the included file contained, e.g., a begin without a matching end. Support \expandafter (#3983).

(#3983). Handle \DeclareRobustCommand (#3983). Currently it’s just treated as a synonym for

ewcommand .

(#3983). Currently it’s just treated as a synonym for . Handle \lettrine (Mauro Bieg).

Math improvements due to updates in texmath: Improved handling of accents and upper/lower delimiters.

Support for output in GNU eqn format (used with *roff).

Allow \boldsymbol + a token without braces, and similarly with other styling commands.

+ a token without braces, and similarly with other styling commands. Improve parsing of \mathop to allow multi-character operator names.

to allow multi-character operator names. Add thin space after math operators when “faking it with unicode.”

walk is now used instead of bottomUp in the ToJSONFilter instance for a -> [a] (pandoc-types). Note that behavior will be slightly different, since bottomUp ’s treatment of a function [a] -> [a] is to apply it to each sublist of a list, while walk applies it only to maximal sublists. Usually the latter behavior is what is wanted, and the former can be simulated when needed. But there may be existing filters that need to be rewritten in light of the new behavior. Performance should be improved.