All Versions
28
Latest Version
Avg Release Cycle
39 days
Latest Release
1248 days ago

Changelog History
Page 2

  • v2.9.2 Changes

    February 16, 2020

    ➕ 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].

    Introduce new format variants for JATS writer (#6014, Albert Krewinkel):

    • jats_archiving for the “Archiving and Interchange Tag Set”,
    • jats_publishing for the “Journal Publishing Tag Set”, and
    • jats_articleauthoring for the “Article Authoring Tag Set.”

    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].

    🚚 --defaults: Support bibliography and csl fields. Move addMeta from Text.Pandoc.App.CommandLineOptions to Text.Pandoc.App.Opt (internal change).

    ➕ 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).

    LaTeX reader:

    • Allow & in LaTeX citation keys (#6110).
    • Improve caption and label parsing.
    • Don’t emit empty Span elements for labels.
    • Put tables with labels in a surrounding Div.
    • Resolve \ref to table numbers (#6137).
    • Skip comments in more places where this is needed (#6114).
    • Allow beamer overlays for all commands in all raw tex (#6043). This affects parsing of raw tex in LaTeX and in Markdown and other formats.

    - Improve parsing of raw environments (#6034). If parsing fails in a raw environment (e.g. due to special characters like unescaped _), try again as a verbatim environment, which is less sensitive to special characters. This allows us to capture special environments that change catcodes as raw tex when -f latex+raw_tex is used.

    RST reader:

    - Add highlight directive (#6140, Lucas Escot).

    MediaWiki writer:

    - Prevent triple [[[ which confuses MediaWiki (#6119).

    HTML reader:

    - Don’t parse data-id as id attribute. And similarly don’t parse any data-X as X when X is a valid HTML attribute.

    Org reader:

    - Simplify parsing of sub- and superscripts (#6127, Albert Krewinkel). Speeds up parsing of single-word, markup-less sub- and superscripts.

    LaTeX writer:

    • Group biblatex citations even with prefix and suffix (#5849, Ethan Riley). Previously biblatex citations were only grouped if there was no prefix. This patch allows them to be grouped in subgroups split by prefixes and suffixes, which allows better citation sorting.
    • Fix regression in handling of columns in beamer slides (#6033). Columns in title slides were causing problems with slide division.

    - Fix duplicate frame classes in LaTeX/Beamer output (#6107).

    HTML writer:

    • Fix duplicate attributes on headings (#6062), regression from 2.7.x.
    • Fix --number-offset with HTML TOC. Eventually it would be worth adding a parameter to makeSections so this could be done at that level; then it would also affect other writers that construct TOC manually.
    • reveal.js: restore old behavior for 2D nesting (#6032). The fix to #6030 actually changed behavior, so that the 2D nesting occurred at slide level N-1 and N, instead of at the top-level section. This commit restores the v2.7.3 behavior. If there are more than 2 levels, the top level is horizontal and the rest are collapsed to vertical.

    - reveal.js: ensure that pauses work even in title slides (#5819).

    Markdown writer:

    - Fix regression: spurious dots in markdown_mmd metadata output (#6133).

    Docx writer:

    - Fix regression with Compact style on tight lists (#6072). Starting in 2.8, the docx writer no longer distinguishes between tight and loose lists, since the Compact style is omitted. This is a side-effect of the fix to #5670, as explained in the changelog. This patch fixes the problem by extending the exception currently offered to Plain blocks inside tables to Plain blocks inside list items.

    Jira writer:

    - Fix output of table headers (Albert Krewinkel, #6035).

    ➕ Add Text.Pandoc.Image with unexported svgToPng.

    Text.Pandoc.XML: Export html5Attributes, html4Attributes, rdfaAttributes (formerly unexported in Text.Pandoc.Writers.HTML). [API change]

    Text.Pandoc.Shared: Export a new function findM (#6125, Joseph C. Sible).

    🌲 Text.Pandoc.Logging: Add RunningFilter, FilterCompleted constructors to LogMessage [API change].

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

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

    Lua filters:

    👍 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:

    function isSpaceBeforeCite (spc, cite)
      return spc and spc.t == 'Space'
       and cite and cite.t == 'Cite'
    end
    
    function Inlines (inlines)
      for i = #inlines-1,1,-1 do
        if isSpaceBeforeCite(inlines[i], inlines[i+1]) then
          inlines:remove(i)
        end
      end
      return inlines
    end
    

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

    local numbers = pandoc.List {2, 3, 1}
    numbers:sort() -- numbers is now {1, 2, 3}
    

    👉 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 tests for pandoc.List module (Albert Krewinkel).

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

    🚀 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.

    Extensive code cleanup (#6141, #6128, #6129, #6130, #6123, #6105, 6102, #6117, #6124, #6115, #6116, #6111, Joseph C. Sible).

    🛠 Fix hlint warnings (Albert Krewinkel).

    ✅ 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 latest texmath.

    ✅ Use latest skylighting and fix test suite (#6086).

    sample.lua: Fix typo in descriptive comments (#6136, Caleb Maclennan). Fix typo in error message (#6135).

    ➕ Add Docker and GH Actions instructions/links to INSTALL.md.

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

    📄 Lua filter docs:

    • Cross-link constructors and types (Albert Krewinkel). Thanks to @bpj for the idea.
    • Sort pandoc.List methods alphabetically (Albert Krewinkel).
    • Unify, fix anchors and internal links (#6061, Albert Krewinkel). Links and anchors now follow consistent conventions, like lowercase-only anchor names. This breaks some links to specific sections in the document, but will make it much easier to link documentation in the future.

    - Clarify filter function execution order (#6059, Albert Krewinkel).

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

  • v2.9.2.1 Changes

    March 24, 2020

    Click to expand changelog

    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!

    Text.Pandoc.Readers.Roff:

    • Fix parsing of \. in man/ms readers (#6175). Previously due to a typo it was being parsed as ```.

    - Fix parsing of \' in man/ms readers (#6175). It was being parsed as a backtick.

    Jira reader (Albert Krewinkel):

    • Fix parsing of tables without preceding blankline (#6198). A bug was fixed which caused faulty parsing if a table was not preceded by a newline and the first table cell had no space after the initial | characters.
    • Fix parsing of strikeout, emphasis (#6196). A bug was fixed which caused non-emphasized text containing digits and/or non-special symbols (like dots) to sometimes be parsed incorrectly.

    - Support colored inline text, indented lists (#6183, #6184).

    Ms writer:

    • Fix definition lists so indent even when paragraph indent is set to 0 (as is the default). Also ensure indent for display math that falls back to TeX.

    - Use .QS/.QE instead of .RS/.RE for block quotes.

    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.

    🚚 AsciiDoc writer: remove redundant otherwise guard in inlineToAsciiDoc (#6146, Ryan Scott).

    Text.Pandoc.Class:

    • Fix missing import when data files are not embedded (Albert Krewinkel).
    • Subdivide Text.Pandoc.Class into small unexported modules and ensure that all functions have Haddock documentation (#6106, Albert Krewinkel).

    - Finer grained imports of Text.Pandoc.Class submodules (#6203, Albert Krewinkel).

    Text.Pandoc.XML: Add to list of HTML5 attributes: allow, autocapitalize, decoding, enterkeyhint, imagesizes, imagesrcset, loading.

    👀 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.

    📦 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.

    ✂ Remove outdated checks for no longer supported base versions (Albert Krewinkel).

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

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

    🚀 Change macOS release candidate CI process so that notarized packages can be produced (#6169).

    Make MANUAL more explicit about nonbreaking space handling by all_symbols_escapable (#6154, Fabien Schurter).

    trypandoc (Mike Tzou):

    • Add checkbox for standalone option (#6189).
    • Use strict mode for JavaScript code (#6188).
    • Fetch resources over https (#6188).

    - Remove unnecessary attributes on style, script elements (#6188).

    🚀 Use details tag to make GitHub releases changelog collapsible.

    ⚡️ Update filter code in doc/filters.md so it works with latest pandoc (#6185).

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

  • v2.9.1 Changes

    December 23, 2019

    ➕ Add Jira reader (Albert Krewinkel, #5556).

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

    • non-jira raw blocks are fully discarded instead of showing as blank lines;
    • table cells can contain multiple blocks;
    • unnecessary blank lines are removed from the output;
    • markup chars within words are properly surrounded by braces;
    • preserving soft linebreaks via --wrap=preserve is supported.

    👀 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.

    🛠 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.

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

    0️⃣ Ensure that later default file values for variable replace earlier ones (5988).

    HTML reader: Add nav to list of block-level tags.

    Org reader (Albert Krewinkel):

    • Wrap named table in Div, using name as id (#5984). Tables which are given a name via #+NAME: or #+LABEL: are wrapped in an additional Div, with the name set as the Div’s ID.
    • Report parsing errors properly.

    - Fix parsing problem for colons in headline (#5993).

    0️⃣ 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).

    Text.Pandoc.Templates: Strip directory before trying to find partial in data files (#5987).

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

    ➕ Added tests for --toc and --section-divs.

    Text.Pandoc.MIME: Added glsl MIME type for WebGL maps (#6000, Jared Lander).

    🗄 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.

    lua-filters.md:

    • Remove spurious dot in title (#5996, Mauro Bieg).
    • Replace metadata example with image centering (#6004, Albert Krewinkel). Thanks to @efx for proposing this filter.
  • v2.9.1.1 Changes

    January 06, 2020

    Markdown reader:

    - Fix parsing bug affected indented code after raw HTML (#6009, #5360).

    LaTeX writer:

    • Fix regression in beamer slide structure with certain slide levels (#6030).
    • Allow framebreaks for beamer’s TOC (Heiko Schlittermann, #6012)

    - Properly handle unnumbered headings level 4+ (#6018). Previously the \paragraph command was used instead of \paragraph* for unnumbered level 4 headings.

    HTML writer:

    • Fix revealjs slide structure regression with certain slide levels (#6030).

    - Add newlines to make slide show output more readable.

    Org writer:

    - Remove extra spaces from table cells (Albert Krewinkel, #6024).

    ⚡️ 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).

    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.

    📇 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.

    🛠 Fix test/tables.org (Albert Krewinkel).

    👉 Use HTTPS in copyright message (Felix Yan, #6010)

  • v2.9 Changes

    December 12, 2019

    Text.Pandoc.Templates [API change]

    • Add Monad wrappers WithDefaultPartials and WithPartials. Wrapping these around an instance of PandocMonad gives us different instances of TemplateMonad, with different search behavior in retrieving partials. To compile a template and limit partial search to pandoc’s data files, use runWithDefaultPartials (compileTemplate ...). To compile a template and allow partials to be found locally (either on the file system or via HTTP, in the event that the main template has an absolute URL), ue runWithPartials (compileTemplate ...).
    • Export getTemplate, which seeks a template locally, or via HTTP if the template has an absolute URL, falling back to the data files if not found.

    - Export compileDefaultTemplate – does getDefaultTemplate and compiles the result, raising an error on failure.

    Text.Pandoc.Class [API change]

    - Remove TemplateMonad instances for PandocIO and PandocPure. These were too limiting and caused a bug whereby a local partial could be used even when the default template was requested. We now rely on instances provided in the Templates module.

    Text.Pandoc.App.OutputSettings: Simplify template retrieval code.

    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.

    reveal.js template: Add title-slide-attributes variable (#5981, Frederik Elwert).

    📜 More informative JSON parse error (#5973).

    📦 Use external emojis package (forked from pandoc). Removed emoji data in Text.Pandoc.Emoji.

    🛠 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.

    🛠 Fix --toc-depth regression in 2.8 (#5967).

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

    🛠 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.

    Document display math syntax in manual.

  • v2.8.1 Changes

    December 06, 2019

    ➕ Add ascii_identifiers as a supported extension for markdown. This fixes a regression in 2.8.

    🛠 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.

    📇 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.

    Text.Pandoc.Shared: Fix makeSections so it doesn’t turn column Divs into sections.

    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.

    HTML-based templates: Add CSS to suppress bullet on unordered task lists.

    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.

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

    Generate Emoji module with TH.

    • Add Text.Pandoc.Emoji.TH.
    • Replace long literal list in Text.Pandoc.Emoji with one-liner generating it from emoji.json using TH.
    • Add Makefile target to download emoji.json.

    - Remove tools/emoji.hs.

    Increase GC allocation space for compilation in cabal.project.

    Clean up manual on PDF generation backend options (#5940).

    🚀 Update release checklist to include code signing step and update Windows release-candidate builds (#5950).

  • v2.8 Changes

    November 22, 2019

    👌 Improvements in templates system (from doctemplates):

    • Pandoc templates now support a number of new features that have been added in doctemplates: notably, elseif, it, partials, filters, and syntax to control nesting and reflowing of text. These changes make pandoc more suitable out of the box for generating plain-text documents from data in YAML metadata. It can create enumerated lists and even tabular structures.
    • We now used templates parameterized on doclayout Doc types. The main impact of this change is better reflowing of content interpolated into templates. Previously, interpolated variables were rendered independently and intepolated as strings, which could lead to overly long lines. Now the templates interpolated as Doc values which may include breaking spaces, and reflowing occurs after template interpolation rather than before.
    • Remove code from the LaTeX, Docbook, and JATS writers that looked in the template for strings to determine whether it is a book or an article, or whether csquotes is used. This was always kludgy and unreliable.

    - Change template code to use new API for doctemplates.

    ➕ 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.

    🚩 Raise error on unsupported extensions (#4338).

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

    ➕ Add -L option as shortcut for --lua-filter.

    ➕ 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.

    👍 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.

    --ascii now uses numerical hex character references (#5718).

    👍 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.

    👉 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.

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

    0️⃣ 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.

    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.

    👍 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.

    📇 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).

    Don’t add a newline to fragment output if there’s already one.

    🔄 Change exit codes and document in MANUAL.txt:

    • PandocAppError was 1, is now 4
    • PandocOptionError was 2, is now 6

    - PandocMakePDFError was 65, is now 66

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

    HTML reader:

    • Better handling of <q> with cite attribute (#5798, Ole Martin Ruud). If a <q> tag has a cite attribute, we interpret it as a Quoted element with an inner Span.
    • Add support for HTML <samp> element (#5792, Amogh Rathore). The <samp> element is parsed as Code with class sample.
    • Add support for HTML <var> element (#5799, Amogh Rathore). The <var> element is parsed as Code with class variable.
    • Add support for <mark> elements (Florian B, #5797). Parse <mark> elements from HTML as Spans with class mark.
    • Add support for <kbd> elements, parsing them as Span with class kbd (Daniele D’Orazio, #5796).

    - Add support for <dfn>, parsing this as a Span with class dfn (#5882, Florian Beeres).

    Markdown reader:

    • Headers: don’t parse content over newline boundary (#5714).
    • Handle inline code more eagerly within lists (Brian Leung, #5627).
    • Removed some needless lookaheads.
    • Don’t parse footnote body unless extension enabled.
    • Fix small super/subscript issue (#5878). Superscripts and subscripts cannot contain spaces, but newlines were previously allowed (unintentionally). This led to bad interactions in some cases with footnotes. With this change newlines are also not allowed inside super/subscripts.

    - Use take1WhileP for str, table row. This yields a small but measurable performance improvement.

    LaTeX reader:

    • Fix parsing of optional arguments that contain braced text (#5740).
    • Don’t try to parse includes if raw_tex is set (#5673). When the raw_tex extension is set, we just carry through \usepackage, \input, etc. verbatim as raw LaTeX.
    • Properly handle optional arguments for macros (#5682).
    • Fix \\ in \parbox inside a table cell (#5711).
    • Improve withRaw so it can handle cases where the token string is modified by a parser (e.g. accent when it only takes part of a Word token) (#5686). This fixes a bug that caused the ends of certain documents to be dropped.
    • Handle \passthrough macro used by latex writer (#5659).
    • Support tex \tt command (#5654).
    • Search for image with list of extensions like latex does, if an extension is not provided (#4933).
    • Handle \looseness command values better (#4439).
    • Add mbox and hbox handling (Vasily Alferov, #5586). When +raw_tex is enabled, these are passed through literally. Otherwise, they are handled in a way that emulates LaTeX’s behavior.
    • Properly handle \providecommand and \provideenvironment (#5635). They are now ignored if the corresponding command or environment is already defined.
    • Support epigraph command in LaTeX Reader (oquechy, #3523).
    • Ensure that expanded macros in raw LaTeX end with a space if the original did (#4442).
    • Treat ly environment from lilypond as verbatim (Urs Liska, #5671).

    - Add tikzcd to list of special environments (Eigil Rischel). This allows it to be processed by filters, in the same way that one can do for tikzpicture.

    Roff reader:

    • Better support for while.
    • More improvements in parsing conditionals.
    • Fix problem parsing comments before macro.
    • Improve handling of groups.

    - Better parsing of groups (#5410). We now allow groups where the closing \\} isn’t at the beginning of a line.

    RST reader:

    • Keep name property in imgAttr (Brian Leung, #5619).
    • Fixed parsing of indented blocks (#5753). We were requiring consistent indentation, but this isn’t required by RST.
    • Use title, not admonition-title, for admonition title. This puts RST reader into alignment with docbook reader.
    • Don’t strip final underscore from absolute URI (#5763).

    - Avoid spurious warning when resolving links to internal anchors ending with _ (#5763).

    Org reader:

    • Accept ATTR_LATEX in block attributes (Albert Krewinkel, #5648). Attributes for LaTeX output are accepted as valid block attributes; however, their values are ignored.
    • Modify handling of example blocks (Brian Leung, #5717).
    • Allow the -i switch to ignore leading spaces (Brian Leung).
    • Handle awkwardly-aligned code blocks within lists (Brian Leung). Code blocks in Org lists must have their #+BEGIN_ aligned in a reasonable way, but their other components can be positioned otherwise.

    - Fix parsing of empty comment lines (#5856, Albert Krewinkel). Comment lines in Org-mode can be completely empty.

    Muse reader (Alexander Krotov):

    • Add RTL support (#5551).
    • Do not allow closing asterisks to be followed by *.
    • Do not split series of asterisks into symbols and emphasis (#5821).

    - Do not terminate emphasis on * not followed by space.

    DokuWiki reader:

    - Parse markup inside monospace (’’) (#5916, Alexander Krotov).

    Docx reader:

    • Move style-parsing-specific code to a new unexported module, Text.Pandoc.Readers.Docx.Parse.Styles (Nikolay Yakimov).
    • Move StyleMap to docx writer (Nikolay Yakimov).
    • Only use LTR when it is overriding BiDi setting (#5723, Jesse Rosenthal). The left-to-right direction setting in docx is used in the spec only for overriding an explicit right-to-left setting. We only process it when it happens in a paragraph set with BiDi. This is especially important for docs exported from Google Docs, which explicitly (and unnecessarily) set rtl=0 for every paragraph.

    - Fix list number resumption for sublists (#4324). The first list item of a sublist should not resume numbering from the number of the last sublist item of the same level, if that sublist was a sublist of a different list item.

    Docbook reader:

    • Richer parse for admonitions (Michael Peyton Jones, #1234). Instead of parsing admonitions as blockquotes, we now parse them as Divs with an appropriate class. We also handle titles for admonitions as a nested Div with the “title” class.
    • Fix nesting of chapters and sections (#5864, Florian Klink, Félix Baylac-Jacqué).

    - Fix bug with entities in mathphrase element (#5885).

    MediaWiki reader:

    - Skip optional {{table}} template (#5757).

    LaTeX reader:

    • Fix dollar-math parsing to ensure that space is left between a control sequence and a following letter (#5836).
    • In untokenize, ensure space between control sequence and following letter (#5836).
    • Don’t omit macro definitions defined in the preamble. These were formerly omitted (though they still affected macro resolution if latex_macros was set). Now they are included in the document body.
    • Parse macro definitions as raw LaTeX when latex_macros is disabled. (When latex_macros is enabled, we omit them, since pandoc is applying the macros itself.)
    • Fix a hang/memory leak in certain circumstances (#5845).
    • Text.Pandoc.Readers.LaTeX.Parsing: add [Tok] parameter to rawLaTeXParser. This allows us to repeat retokenizing unnecessarily in e.g. rawLaTeXBlock.
    • Add KOMA-Script metadata commands (#5910, Andrew Dunning). Add all titling commands to existing definition for \dedication.

    - Parse \micro siunitx unit command (#5921, Jose Luis Duran).

    Markdown writer:

    • Ensure proper nesting when we have long ordered list markers (#5705).
    • Make plain output plainer (#5741). Previously we used the following Project Gutenberg conventions for plain output: extra space before and after level 1 and 2 headings, all-caps for strong emphasis, underscores surrounding regular emphasis. Now these conventions are used only when the gutenberg extension is enabled. By default, Strong and Emph are rendered without special formatting, and headings are rendered without special formatting, and with only one blank line following. To restore the former behavior, use -t plain+gutenberg.
    • Prefer using raw_attribute when enabled (#4311). The raw_attribute will be used to mark raw bits, even HTML and LaTeX, and even when raw_html and raw_tex are enabled, as they are by default. To get the old behavior, disable raw_attribute in the writer.
    • Prefer pipe_tables to raw HTML even when we must lose width information (#2608, #4497).

    - Improve escaping in list items (#5918).

    AsciiDoc writer:

    • Don’t include + in code blocks for regular asciidoc. This is asciidoctor-specific.

    - Handle admonitions (#5690).

    LaTeX writer:

    • Add thin space when needed in LaTeX quote ligatures (#5684).
    • Use \hspace{0pt} for 0-width space U+200B (#5756).
    • Use cslreferences environment for csl bibliographies. This allows bibliographies to receive special formatting. The template now contains definition of this environment (enabled only when CSL is used). It also defines a \cslhangindent length. This is set to 2em by default when the bibliography style specifies a hanging indent. To override the length, you can use e.g. \setlength{\cslhangindent}{7em} in header-includes. See jgm/pandoc-citeproc#410.
    • Strip off {} around locator for biblatex/natbib output (#5722).
    • Fix line breaks at start of paragraph (#3324). Previously we just omitted these. Now we render them using \hfill\break instead of \\. This is a revision of a PR by @sabine (#5591) who should be credited with the idea.
    • We no longer look in the template or header-includes to see if a book or article documentclass is used, or to see whether the csquotes package is used. To use csquotes for LaTeX, set csquotes in your variables or metadata. To specify a book style, use the documentclass variable or --top-level-division.

    - Fix horizontal rule (#5801). We change to use 0.5pt rather than \linethickness, which apparently only ever worked “by accident” and no longer works with recent updates to texlive.

    ConTeXt writer:

    • Add option to include source files in ConTeXt PDFs (Tristan Stenner, #5578). The metadata field or variable (includesource) can be set to attach the source documents to the resulting PDF.
    • Customizable type of PDF/A for the ConTeXt writer (Karl Pettersson, #5608). The pdfa variable may now be set in metadata. Also updated color profile settings in accordance with ConTeXt wiki, and made ICC profile and output intent for PDF/A customizable using pdfaiccprofile and pdfaintent.
    • Unit tests: adjust code property to avoid an irrelevant failure involving inline code with two consecutive newlines.
    • Set csl-hanging-indent variable if needed.
    • Use special environment for CSL references.

    - Use braces, not start/stop, for inline language tags. This prevents unwanted gobbling of spaces.

    HTML writer:

    • Use numeric character references with --ascii (#5718). Previously we used named character references with html5 output. But these aren’t valid XML, and we aim to produce html5 that is also valid XHTML (polyglot markup). (This is also needed for epub3.)
    • Ensure that line numbers in code blocks get id-prefix (#5650).
    • Ensure TeX formulas are rendered correctly (Philip Pesca, #5658). The web service passed in to --webtex may render formulas using inline or display style by default. Prefixing formulas with the appropriate command ensures they are rendered correctly.
    • Render inline formulas correctly with --webtex (Philip Pesca, #5655). We add \textstyle to the beginning of the formula to ensure it will be rendered in inline style.
    • Pass through aria- attributes to HTML5 (#5642).
    • Render a Quoted element with an inner Span with cite attribute using a <q> tag (#5798, Ole Martin Ruud).
    • Render a Span with class mark using the <mark> element (Florian Beeres, #5797).
    • Render Span with class dfn using <dfn> element (Florian Beeres, #5882).
    • Render Span with class kbd using <kbd> element (Daniele D’Orazio, #5796).
    • Render Code with class variable using <var> element (Amogh Rathore, #5799).

    - Render Code with class sample using <samp> element (Amogh Rathore, #5799).

    EPUB writer:

    • Improve splitting into chapters (#5761), using makeSection.
    • Avoid issuing warning multiple times when title not set (see #5760).
    • Use svg tag wrapper for cover image (#5638). In addition, the code generating the image has been moved to the template, to make it more customizable. NOTE: Those who use custom EPUB templates will need to adjust their templates, adding the code to generate the cover image. (Previously this was just inserted into ‘body’.)
    • Improve toChapters, making it work better if there are Divs around sections.
    • Add support for EPUB2 covers (blmage, #3992).
    • Do not override existing “fileN” medias when writing to EPUB format (blmage, #4206).

    - Ensure that lang variable is set on all chapters (so that it will add an xml:lang attribute on the html element).

    RST writer:

    • Removed remnants of admonition-title.
    • Fix handling of :align: on figures and images (#4420). When the image has the align-right (etc.) class, we now use an :align: attribute.
    • Improve spacing for tables with no width information (#5899). If a simple table would be too wide, we use a grid table.
    • Fix backslash escaping after strings (Albert Krewinkel, #5906). The check whether a complex inline element following a string must be escaped, now depends on the last character of the string instead of the first.

    - Ensure there’s a blank line before tables (#5898).

    Dokuwiki writer:

    - Handle mixed lists without HTML fallback (#5107).

    XWiki writer:

    - Fix multiline table (Zihang Chen, #5683).

    Muse writer:

    - Add RTL support (Alexander Krotov, #5551).

    Man writer:

    • Suppress non-absolute link URLs (#5770). Absolute URLs are still printed in parentheses following the link text, but relative URLs are suppressed (just as internal links starting with ‘#’ always have been).

    - Improved definition list term output. Now we boldface code but not other things. This matches the most common style in man pages (particularly option lists).

    Ms writer:

    • Use .LP instead of .PP for line block (#5588).

    - Use boldface for definition terms in DefinitionLists.

    JATS writer:

    • Do not emit empty <fn-group> (Mauro Bieg, #5595).
    • Update template to v1.1dtd (#5632, Arfon Smith).
    • Update data/jats.csl to avoid commas between editor name-part elements. (#5629)

    - Add abstract to template (Mauro Bieg).

    TEI writer:

    - Don’t strip hash from internal links (#5922).

    Jira writer:

    • Remove escapeStringForJira for code blocks (Jan-Otto Kröpke).
    • Remove extraneous newline after single-line block quotes (#5858, Albert Krewinkel).

    - Improve escaping of special characters, using backslash escapes instead of HTML entities (#5858, Albert Krewinkel).

    OpenDocument writer:

    • Avoid duplicate attributes (#4634). We use the innermost attribute in nested cases.
    • If native_numbering extension is set, use native OpenDocument enumeration for figures and tables (Nils Carlson).

    - Place caption before table (#5681, Dmitry Pogodin).

    ODT writer:

    • Add a test for MathML formulas in ODT documents (blmage).

    - Improve the parsing of frames in ODT documents (blmage).

    Docx writer:

    • Make handling of styles more robust in localized versions of Word (Nikolay Yakimov, #5523, #5052, #5074). We now use style names, not ids, for assigning semantic meaning, since the ids can change depending on the locale. Style name comparisons are case-insensitive, since those are case-insensitive in Word. Since docx style names can have spaces in them, and pandoc-markdown classes can’t, anywhere when style name is used as a class name, spaces are replaced with ASCII dashes -. Code styles, i.e. “Source Code” and “Verbatim Char” now honor style inheritance. Docx Reader now honours “Compact” style (used in Pandoc-generated docx). The side-effect is that “Compact” style no longer shows up in docx+styles output. Styles inherited from “Compact” will still show up.
    • Re-use Readers.Docx.Parse for StyleMap (#5766, Nikolay Yakimov).
    • Internal improvements and code simplification (Nikolay Yakimov).
    • Preserve built-in styles in DOCX with custom style (Ben Steinberg, #5670). This change prevents custom styles on divs and spans from overriding styles on certain elements inside them, like headings, blockquotes, and links. On those elements, the “native” style is required for the element to display correctly. This change also allows nesting of custom styles; in order to do so, it removes the default “Compact” style applied to Plain blocks, except when inside a table.
    • Add proofState to list of elements carried over from settings.xml in the reference.docx (Krystof Beuermann, #5703).

    - Change order of ilvl and numId in document.xml (Agustín Martín Barbero, #5645). Also, make list para properties go first. This reordering of properties shouldn’t be necessary but it seems Word Online does not understand the docx correctly otherwise.

    PowerPoint writer:

    • Code formatting is now context dependent (Jeroen de Haas, #5573). This commit alters the way in which the Powerpoint writer treats inline code and code blocks. Inline code is now formatted at the same size as the surrounding text. Code blocks are now given a margin and font size according to their level. Furthermore this commit allows changing the font with which code is formatted via the monofont option.

    - Start numbering at appopriate numbers (Jesse Rosenthal, #5709). Starting numbers for ordered lists were previously ignored. Now we specify the number if it is something other than 1.

    📜 Text.Pandoc.Parsing:

    • Add manyChar, many1Char, manyTillChar, many1TillChar, many1Till, manyUntil, mantyUntilChar: these are like their unsuffixed counterparts but pack some or all of their output (Christian Despres, #5884).
    • Add stateAllowLineBreaks to ParserState [API change].
    • Fix inline parsing in grid table cells (#5708).
    • Change type of setLastStrPos so it takes a Maybe SourcePos rather than a SourcePos [API change].
    • Make parseFromString' and gridTableWith and gridTableWith' polymorphic in the parser state, constraining it with HasLastStrPosition [API change].
    • parseFromString': reset stateLastStrPos to Nothing before parse.

    - Rename takeWhileP -> take1WhileP and clean it up. (It doesn’t match the empty sequence.)

    Text.Pandoc.PDF:

    • For PDFs via HTML, ensure temp file is deleted even if the pdf program is not found (#5720).
    • Better detection of a Cygwin environment (#5451).

    - Don’t assume tex log file is UTF8-encoded (#5872). Fall back to latin1 if it can’t be read as UTF-8.

    Text.Pandoc.Extensions:

    • Export new function getAllExtensions, which returns the extensions that affect a given format (whether enabled by default or not) [API change].
    • Change type of parseFormatSpec from Either ParseError (String, Extensions -> Extensions) to Either ParseError (String, [Extension], [Extension]) [API change].
    • Add Ext_gutenberg constructor to Extension [API change].

    - Add Ext_native_numbering constructor to Extension [API change] (Nils Carlson).

    Text.Pandoc.Readers, Text.Pandoc.Writers:

    - Change type of getReader and getWriter so they return a value in the PandocMonad instance rather than an Either [API change]. Exceptions for unknown formats and unsupported extensions are now raised by these functions.

    Text.Pandoc.App

    - Change optMetadataFile type from Maybe FilePath to [FilePath] (Owen McGrath, #5702) [API change].

    🌲 Text.Pandoc.Logging:

    • Add CouldNotDeduceFormat constructor to LogMessage [API change]. Issue this warning when we’re falling back to markdown or html because we don’t recognize the extension of the input or output files.
    • Clarify warning for missing title (#5760).

    - Add UnusualConversion constructor to LogMessage [API change] (Mauro Bieg, #5736). Emit warning on -f latex -o out.pdf.

    Lua filters:

    👌 Improve function documentation (Albert Krewkinkel).

    ⚡️ 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.

    🆕 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.

    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:

    pandoc.Span('test', {id = 'test', class = 'a b', check = 1})
    pandoc.Span('test', pandoc.Attr('test', {'a','b'}, {check = 1}))
    

    This also works when using the attr setter:

    local span = pandoc.Span 'text'
    span.attr = {id = 'test', class = 'a b', check = 1}
    

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

    local span = pandoc.Span 'test'
    span.attributes = {check = 1} -- works as expected now
    

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

    ➕ Add a clone() method to all AST elements (Albert Krewinkel, #5568).

    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.

    Text.Pandoc.Error:

    • Add constructors PandocUnknownReaderError, PandocUnknownWriterError, PandocUnsupportedExtensionError. [API change].
    • Better message for PandocShouldNeverHappenError.

    - Better message for PandocTemplateError.

    Text.Pandoc.Emoji:

    - Update emoji list (#5666). Done using new tools/emojis.hs, which uses the list from the gem GitHub uses. Future updates can be done with this tool.

    Text.Pandoc.PDF:

    - Pass value of --dpi to rsvg-convert when converting SVG to PDF in the process of creating a PDF (#5721).

    Text.Pandoc.Shared:

    • Replace Element and makeHierarchical with makeSections. Now that we have Divs, we can use them to represent the structure of sections, and we don’t need a special Element type. makeSections reorganizes a block list, adding Divs with class section around sections, and adding numbering if needed. This change also fixes some longstanding issues recognizing section structure when the document contains Divs (#3057, see also #997).
    • Remove Element type [API change]
    • Remove makeHierarchicalize [API change]
    • Add makeSections [API change]
    • Export deLink [API change]
    • Make filterIpynbOutput strip ANSI escapes from code in output for non-ipynb formats, when the default “best” option is used with --ipynb-output (#5633).
    • Fix camelCaseToHyphenated so it handles ABCDef better.
    • Improve isTight (#5857). If a list has an empty item, this should not count against its being a tight list.
    • Export htmlSpanLikeElements [API change] (Daniele D’Orazio, #5796). This is a mapping of HTML span-like elements that are internally represented as a Span with a single class.

    - Change the implementation of htmlSpanLikeElements to retain classes and attributes (#5882, Florian Beeres).

    Text.Pandoc.Slides: recognize content in Divs when determining slide level.

    Text.Pandoc.SelfContained:

    - Omit content-type on type attribute for <style> (#5725). It doesn’t seem to be valid for HTML5, and as a result Chrome ignores the style element.

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

    Text.Pandoc.Writers.Shared:

    • Remove metaToJSON, metaToJSON' [API change].
    • Modify addVariablesToContext, defField, setField, getField, resetField to work with Context rather than JSON values. [API change]
    • Export new function endsWithPlain [API change].

    - Change gridTables so it does better at keeping the widths of columns (#4320) and does better at figuring out column widths when no widths are given (#5899).

    Text.Pandoc.Options

    • Change type of writerTemplate to Maybe Template instead of Maybe String.

    - Change To/FromJSON instances for HTMLMathMethod, CiteMethod, ObfuscationMethod, TrackChanges, WrapOption, TopLevelDivision, ReferenceLocation, HTMLSlideVariant (#5790). In each case we use lowercase (or hyphenated lowercase) for constructors to line up more closely with command-line option values. This is a breaking change for those who manually decode or encode JSON for these data types (e.g. for ReaderOptions or WriterOptions).

    Text.Pandoc.Filters:

    • Add FromYAML instance for Filter.

    - applyFilters: Add and apply filters in order (not reversed) This changes applyFilters from Text.Pandoc.Filter so that it does a left fold rather than a right fold, applying the filters in the order listed.

    Text.Pandoc.XML:

    - Change toEntities to emit numerical hex character references (#5718).

    Text.Pandoc.Highlighting:

    - Add additional listings languages (Wandmalfarbe).

    Text.Pandoc.MediaBag:

    - Some of the types using Strings were switched to use FilePath instead (Christian Despres, #5884).

    Text.Pandoc.Templates:

    • Don’t import/export varListToJSON [API change]. It is removed in doctemplates >= 0.3.

    - Change type of renderTemplate' [API change]. Return value is now Text rather than being polymorphic. This makes room for upcoming removal of the TemplateTarget class from doctemplates.

    Text.Pandoc.App.Opt API changes:

    • More convenient To/FromJSON instances. Make the field names like strip-empty-paragraphs rather than optStripEmptyParagraphs. Anyone who is using JSON serialization of Opt will need to adjust things accordingly.
    • Change optHighlightStyle to a Maybe String instead of Maybe Style. Do the parsing/loading of themes later, after option parsing.
    • Remove optBaseHeaderLevel from Opt. We now just use optShiftHeadingLevelBy, to avoid redundancy.
    • Change optShiftHeadingLevel to optShiftHeadingLevelBy to match the option.
    • Custom FromJSON instance for LineEnding, so either CRLF or crlf will work.
    • Change optVariables from [(String, String)] to Context Text.
    • Change optMetadata to Meta, to allow structured values. The current behavior of the --metadata option stays the same.
    • Rename optReader, optWriter as optFrom, optTo.
    • Add FromYAML instances to Opt and to all subsidiary types.
    • Rename optMetadataFile to optMetadataFiles.
    • Rename optPDFEngineArgs to optPDFEngineOpts.
    • Rename optWrapText to optWrap.
    • Add IpynbOutput enumerated type: use this instead of a string for optIpynbOutput.
    • Change optInputFiles to a Maybe [FilePath] (#5888) [API change]. Nothing means: nothing specified. Just [] means: an empty list specified (e.g. in defaults).
    • List fields in Opt so they aren’t reversed (#5881) [API change]. Previously optIncludeInHeader, etc. were in reverse order.

    - The sourcefile variable is now always a list. It used to be sometimes a string, sometimes a list (when there was more than one).

    Template changes:

    • default.latex: added code for cslreferences environment, to be used for pandoc-citeproc references. A csl-hanging-indent variable (set automatically if there is a hanging-ident class on the references Div) controls whether contents of this environment receive a hanging indent.
    • default.latex: Add space as default option for xeCJK, so that spaces between words are preserved (#5855, jeongminkim-islab). This is necessary for Korean.
    • default.latex: Remove include of grffile (#5848). This package used to be needed for proper handling of image filenames containing periods (in addition to the period before the extension). It no longer works with the latest LaTeX kernel and graphicx, so we have removed it. Future versions of graphicx will handle these filenames without the need for grffile.
    • default.context: add a saner default for page numbers. Previously they appeared centered at the top of the page; now we put them centered at the bottom, unless the pagenumbering variable is set.
    • default.context: define a start-stop-pair cslreferences to allow for hanging indents in the bibliography (#5875, Denis Maier).
    • default.ms: update defaults. Use Palatino font, use slightly wider interparagraph space, don’t indent paragraphs, and put page numbers on the bottom. This brings ms output closer to default LaTeX output.
    • default.revealjs: add navigationMode (Mauro Bieg, #5657).
    • default.muse: handle multiple authors better.
    • docbook4, docbook5 templates: add indentation to body.
    • HTML-based templates: use styles.html partial to avoid code duplication.

    - HTML-based templates: change indentation of styles in template.

    reference.docx (#5820):

    • Change Block Text (block quote) style so that the same font is used as in the body text, and the block text is indented left and right.
    • All headings now have a uniform color.
    • Level-1 headings no longer set w:themeShade="B5".
    • Level-2 headings are now 14 point rather than 16 point.
    • Level-3 headings are now 12 point rather than 14 point.

    - Level-4 headings are italic rather than bold.

    👍 epub.css: Add CSS for hanging-indent div to support pandoc-citeproc’s new hanging indents.

    pandoc.cabal:

    • Repeat ghc-options in all stanzas.
    • Remove conditionals for ghc < 8 (Albert Krewinkel, #5693).
    • Compile with -Wcpp-undef and -fhide-source-paths when possible (Albert Krewinkel).
    • Add cabal.project to extra-source-files (Albert Krewinkel).
    • Add dependency on skylighting-core (#5729). Even though it shouldn’t be needed, some tools require it.
    • Require latest pandoc-types, texmath, skylighting, haddock-library.
    • Ensure TemplateHaskell is added to other-extensions when it is used (Vanessa McHale, #5728).

    - Remove derive_json_via_th flag; always use TH. This cuts down on code duplication and reduces the chance for errors. See #4083.

    👉 Makefile:

    • Add ghci target.
    • Add ghcid target.

    - Remove references to obsolete flag (#5694).

    Benchmarks: fix failure on ipynb.

    👉 Use MathJax 3 (zorkow).

    KaTeX math: respect classoption=fleqn variable, bump KaTeX version to 0.11.1 (#5815, Mauro Bieg).

    🛠 Fix redundant constraint compiler warnings (Pete Ryland, #5625).

    👉 Use throwError instead of fail when appropriate.

    👉 Use Prelude.fail to avoid ambiguity with fail from GHC.Base.

    ➕ 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.

    ➕ 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.

    Reorder options in --help.

    Revise code for HsYAML-0.2.0.0 (@vijayphoenix, #5704).

    ✂ Remove blank line in code example in Haddocks (Leif Metcalf, #5679).

    🛠 Fix trypandoc with getReader/getWriter changes.

    👍 Allow building pandoc with GHC 8.8.

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

    MANUAL.txt:

    • Add section for exit codes.
    • Document some pptx limitations in slide show section: No incremental display (#5689). No pause with . . . (#5701).
    • reveal.js flags (Mauro Bieg, #5653).
    • Document addition of data- prefix to unknown attributes in HTML5.
    • Link to YAML spec (Mauro Bieg, #5687).
    • Fix capitalization of “Linux” (#5859, Marcus Stollsteimer).
    • Use a table for exit codes.
    • Put all template variable docs into one section.
    • Use ATX headers consistently.
    • Add fuller documentation of templates (#5779), including new template syntax, partials, etc.
    • Add documentation for the variable hyperrefoptions (Wandmalfarbe).
    • Clarify when macro definitions are passed as raw latex. In Markdown input, they are always passed through. In LaTeX, only if latex_macros is disabled.
    • Clarify that --dpi provides a default and doesn’t override dpi values specified in the images themselves (#5721).
    • Document how to use custom writers with --standalone (#5866).

    - Clarify --preserve-tabs default.

    INSTALL.md:

    • Fix instructions for libicu.

    - Add Void Linux instructions (Volodymyr Kozachnyskyi).

    CONTRIBUTING.md:

    • Add information on tests (Agustín Martín Barbero, #5652).

    - Add information about command test naming to CONTRIBUTING (Florian B).

    🛠 Fix typos in changelog and comments (#5896, Brian Wignall).

    doc/lua-filters.md:

    • Fix mistakes in mediabag module docs (#5851, Albert Krewinkel).
    • Improve metadata replacement example in lua-filters doc (#5851).
    • Mention which Lua version is shipped with pandoc (Albert Krewinkel, #5892).
  • v2.8.0.1 Changes

    November 27, 2019
    • List pdf in --list-output-formats.
    • EPUB writer: Fix regression with --css (#5937). In 2.8 --css would not have an effect on EPUB output.
    • RST writer: Use grid tables for one-column tables, since simple tables clash with heading syntax in this case (#5936).
    • ➕ Add unexported module Text.Pandoc.Readers.Metadata (see #5914).
    • 👉 Use doctemplates 0.7.2, which adds the nowrap filter to templates.
    • ⚡️ Update default man template using nowrap for .TH heading (#5929).
    • 👍 HTML templates: Add support for toc-title variable (#5930, Alexandre Franke).
    • ✂ Remove grffile (LaTeX package) requirement in MANUAL.txt (#5927, Ian Max Andolina).
    • 👉 Use skylighting 0.8.3.
  • v2.7.3 Changes

    June 12, 2019

    ➕ Add jira (Atlassian’s Jira wiki markup) as output format (#2497, Albert Krewinkel).

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

    🛠 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 template variable curdir with working directory from which pandoc is run (#5464).

    Markdown reader: don’t create implicit reference for empty header (#5549).

    Muse reader: allow images inside link descriptions (Alexander Krotov).

    🛠 HTML reader: epub related fixes.

    • With epub extensions, check for epub:type in addition to type.
    • Fix problem with noteref parsing which caused block-level content to be eaten with the noteref.
    • Rename pAnyTag to pAny.
    • Refactor note resolution.

    - Trim definition list terms (Alexander Krotov).

    LaTeX reader:

    • Add braces when resolving \DeclareMathOperator (#5441). These seem to be needed for xelatex but not pdflatex.
    • Allow newlines in \mintinline.
    • Pass through unknown listings language as class (#5540). Previously if the language was not in the list of languages supported by listings, it would not be added as a class, so highlighting would not be triggered.

    - rawLaTeXInline: Include trailing {}s in raw latex commands (#5439). This change affects the markdown reader and other readers that allow raw LaTeX. Previously, trailing {} would be included for unknown commands, but not for known commands. However, they are sometimes used to avoid a trailing space after the command. The chances that a {} after a LaTeX command is not part of the command are very small.

    MediaWiki reader: handle multiple attributes in table row (#5471, chinapedia).

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

    ⚠ DocBook reader: Issue IgnoredElement warnings.

    Org reader (Albert Krewinkel):

    • Fix planning elements in headers level 3 and higher (#5494). Planning info is now always placed before the subtree contents. Previously, the planning info was placed after the content if the header’s subtree was converted to a list, which happens with headers of level 3 and higher per default.
    • Omit, but warn about unknown export options. Unknown export options are properly ignored and omitted from the output.
    • Prefer plain symbols over math symbols (#5483). Symbols like \alpha are output plain and unemphasized, not as math.

    - Recognize emphasis after TODO/DONE keyword (#5484).

    FB2 reader:

    • Skip unknown elements rather than throwing errors (#5560). Sometimes custom elements are used (e.g. id element inside author); previously the reader would halt with an error. Now it skips the element and issues an IgnoredElement warning.
    • Parse notes (#5493, Alexander Krotov).

    - Internal improvements (Alexander Krotov).

    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).

    🆕 New module Text.Pandoc.Writers.Jira, exporting writeJira [API change] (Albert Krewinkel).

    EPUB writer:

    • Don’t include ‘landmarks’ if there aren’t any. Previously we could get an empty ol element, which caused validation errors with epubcheck.
    • Ensure unique ids for styleesheets in content.opf (#5463).

    - Make stylesheet link compatible with kindlegen (#5466, Eric Schrijver). Pandoc omitted type="text/css" from both <style> and <rel="stylesheet"> elements in all templates, which is valid according to the spec. However, Amazon’s kindlegen software relies on this attribute on <link> elements when detecting stylesheets to include.

    HTML writer:

    • Output video and audio elements depending on file extension of the image path (Mauro Bieg).
    • Emit empty alt tag in figures (#5518, Mauro Bieg). The same text is already in the and screen-readers would read it twice, see #4737.
    • Don’t add variation selector if it’s already there. This fixes round-trip failures.
    • Prevent gratuitious emojification on iOS (#5469). iOS chooses to render a number of Unicode entities, including ‘↩’, as big colorful emoji. This can be defeated by appending Unicode VARIATION SELECTOR-15’/‘VARIATION SELECTOR-16’. So we now append this character when escaping strings, for both ‘↩’ and ‘↔’. If other characters prove problematic, they can simply be added to needsVariationSelector.

    - Add class="heading" to level 7+ Headers rendered as <p> elements (#5457).

    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.

    LaTeX writer:

    • Include inline code attributes with --listings (#5420).
    • Don’t produce columns environment unless beamer (#5485).
    • Fix footnote in image caption. Regression: the fix for #4683 broke this case.
    • Don’t highlight code in headings (#5574). This causes compilation errors.

    - Use \mbox to get proper behavior inside \sout (#5529).

    👀 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.

    Markdown writer:

    • Add backslashes to avoid unwanted interpretation of definition list terms as other kinds of block (#554).
    • Ensure the code fence is long enough (#5519). Previously too few backticks were used when the code block contained an indented line of backticks. (Ditto tildes.)

    - Handle labels with integer names (Jesse Rosenthal, #5495). Previously if labels had integer names, it could produce a conflict with auto-labeled reference links. Now we test for a conflict and find the next available integer. This involves adding a new state variable stPrevRefs to keep track of refs used in other document parts when using --reference-location=block|section

    Textile writer: fix closing tag for math output (Albert Krewinkel). Opening and closing tag for math output match now.

    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.

    Asciidoc writer:

    • Use +...+ form for inline code. The old a __b__ c yields emphasis inside code in asciidoc. To get a pure literal code span, use +a __b__ c+.
    • Use proper smart quotes with asciidoctor (#5487). Asciidoctor has a different format for smart quotes.
    • Use doubled ## when necessary for spans (#5566).

    - Ensure correct nesting of strong/emph (#5565): strong must be the outer element.

    JATS writer:

    • Wrap elements with p when needed (#5570). The JATS spec restricts what elements can go inside fn and list-item. So we wrap other elements inside <p specific-use="wrapper"> when needed.
    • Properly handle footnotes (#5511) according to “best practice.” (Group them at the end in <fn-group> and use <xref> elements to link them.)
    • Fix citations with PMID so they validate (#5481). This includes an update to data/jats.csl.
    • Ensure validity of <pub-date> by parsing the date and extracting year, month, and day, as expected. Also add an iso-8601-date attribute automatically.
    • Don’t use <break> element for LineBreak. It is only allowed in a few special contexts, and not in <p> elements.

    - Don’t make <string-name> a child of <string>, which is illegal.

    FB2 writer:

    • Do not wrap note references into <sup> and brackets (Alexander Krotov). Existing FB2 readers, such as FBReader, already display links with type=“note” as a superscript.

    - Use genre metadata field (#5478).

    Muse writer: do not escape empty line after <br> (Alexander Krotov).

    ➕ 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.

    🔖 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.

    pandoc lua module (Albert Krewinkel):

    • Fix deletion of nonexistent attributes (#5569).

    - Better tests for Attr and AttributeList.

    pandoc.mediabag lua module (Albert Krewinkel):

    • Add function delete for deleting a single item.
    • Add function empty for removing all entries.

    - Add function items for iterating over mediabag.

    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.

    Text.Pandoc.MIME: add mediaCategory [API change] (Mauro Bieg).

    Text.Pandoc.Shared:

    • Add onlySimpleTableCells [API change] (Mauro Bieg) and use this to consolidate simple-table detection (#5524). This fixes an inconsistency in the HTML reader, which did not treat tables with <p> inside cells as simple.

    - metaToJSON: treat digits starting with 0 as a string, not a number (#5479). This fixes a regression in YAML metadata in pandoc 2.7.2.

    📜 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.Asciify: Add Turkish undotted-i (#5433, Mauro Bieg).

    👌 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.

    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

     pandoc.system.with\_temporary\_directory('tikz', function (dir) -- write and compile a TikZ file with pdflatexend)
    

    LaTeX template: Add pdflang to hypersetup if lang is set (#5443).

    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.

    💅 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:

    code{ white-space: pre-wrap; }
    span.smallcaps{ font-variant: small-caps; }
    span.underline{ text-decoration: underline; }
    q { quotes: "“" "”" "‘" "’"; }
    div.column{ display: inline-block; vertical-align: top; width: 50%; }
    

    reveal.js template:

    • Updates for revealjs 3.8.0 (#5435, ebiim).

    - Remove reference to head.min.js (#5448, Winnie Hellmann). NOTE: users will need to update reveal.js to at least 3.8.0 for their presentations generated with this version of pandoc to work correctly.

    Text.Pandoc.PDF:

    • Replace </> with literal / (#5451). We use forward-slash for a directory separator in tmpDir, even on Windows (because that’s what tex likes). So we should not put a backslash between the tmpDir and the filename on Windows. This is harmless enough in normal Windows setups, but it breaks on Cygwin. Thanks to @cc2x for noticing and diagnosing the problem.
    • Allow use of -output-directory in --pdf-engine-opt (#5462). This is currently possible with mklatex and -outdir, but was not yet possible with xelatex and -output-directory.

    - For PDF via ms/pdfroff, make TOC appear at beginning and in PDF bookmarks (#5553). Previously the TOC appeared at the end of the document, and was not bookmarked. To keep it at the end, add --pdf-engine-opt=--no-toc-relocation to your command line.

    🛠 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.

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

    • It only processes elements which begin with \begin{tikzpicture}
    • It uses pdf2svg instead of imagemagick to preserve fidelity

    - The images produced have transparent backgrounds

    MANUAL.txt:

    • Add note about title-meta, author-meta, date-meta (#5486).

    - Fix typo (#5489, Christian Krause).

    ➕ add test/tables.xwiki to git and pandoc.cabal (#5498, Mauro Bieg).

    ⚠ Disable missing-home-modules warning in stack.yaml. Otherwise stack ghci fails.

  • v2.7.2 Changes

    April 06, 2019

    ➕ Add XWiki writer (#1800, Derek Chen-Becker). Add Text.Pandoc.Writers.XWiki, exporting writeXWiki [API change].

    📜 Dokuwiki Reader: parse single curly brace (#5416, Mauro Bieg).

    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.

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

    function Link(el) if el.title == 'wikilink' then el.target = el.target .. ".html"endreturn elend
    

    ipynb reader:

    • Use format ipynb for raw cell where no format given.

    - Avoid introducing spurious .0 on integers in metadata.

    Markdown reader: fenced div takes priority over setext header.

    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.

    LaTeX reader: Improve autolink detection (#5340).

    PowerPoint writer (Jesse Rosenthal):

    • Expand builtin reference doc to model all layouts. The previous built-in reference doc had only title and content layouts. Add in a section-header slide and a two-content slide, so users can more easily modify it to build their own templates.
    • Always open up in slide view. When editing a template/reference-doc, the user might be in Master view, but when producing a slide show, it is assumed that slide view will be desired.
    • Remove handoutsMasterList from template presentation.xml
    • Fix numerous errors in templating (#5402). Previously, some templates produced by Office 365 (MacOS) would not render with --reference-doc correctly. We now apply correct shapes for content, and build shape trees correctly.
    • Make default placeholder type for template lookup.
    • Apply speaker notes to metadata slide if applicable.
    • Test for speaker notes after breaking header.
    • Correctly handle notes after section-title header. Previously, if notes came after a section-title header (ie, a level-1 header in a slide-level=2 presentation), they would go on the next slide. This keeps them on the slide with the header.

    - Internal improvements.

    ipynb writer:

    • Use format ipynb for raw cell where no format given. According to nbformat docs, this is supposed to render in every format. We don’t do that, but we at least preserve it as a raw block in markdown, so you can round-trip.
    • Consolidate adjacent raw blocks. Sometimes pandoc creates two HTML blocks, e.g. one for the open tag and one for a close tag. If these aren’t consolidated, only one will show up in output cell.
    • Fixed carry-over of nbformat from metadata.

    - Preserve nbformat_minor if it’s given. This helps with round-tripping.

    LaTeX writer:

    • Avoid inadvertently creating ?or ! ligatures (#5407). These are upside down ? and !, resp.

    - Fix footnotes in table caption and cells (#5367). This fixes a bug wherein footnotes appeared in the wrong order, and with duplicate numbers, when in table captions and cells. We now use regular \footnote commands, even in the table caption and the minipages containing cells. Apparently longtable knows how to handle this.

    HTML writer: Don’t add data- prefix to RDFa attributes (#5403).

    JATS writer: Ensure that plain strings go inside <pub-id> tag (#5397).

    Markdown writer:

    • Better rendering of numbers (#5398). If the number is integral, we render it as an integral not a float.
    • Proper rendering of empty map in YAML metadata (#5398). Should be {}, not empty string.
    • Properly escape attributes in Markdown writer (#5369).

    - Be sure implicit figures work in list contexts (#5368). Previously they would sometimes not work: e.g., when they occured in final paragraphs in lists that were originally parsed as Plain and converted later using PlainToPara.

    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.

    LaTeX template (Andrew Dunning):

    • Ensure correct heading/table order (#5365). Improve workaround (#1658) for tables following headings. The new solution works whether or not the indent variable is enabled.
    • Remove subparagraph variable. The default is now to use run-in style for level 4 and 5 headings (\paragraph and \subparagraph). To get the previous default behavior (where these were formatted as blocks, like \subsubsection), set the block-headings variable.
    • Add pandoc to PDF metadata (#5388).
    • Group graphics-related code (#5389).

    - Move \setstretch after front matter (#5179). Ensures that \maketitle, \tableofcontents, and so forth are not affected by changes to line spacing.

    ⚡️ Update data/jats.csl to avoid commas between name-part elements (#5397).

    ➕ Add support for golang (go) with --listings (#5427).

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

    📇 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.Class: fetchItem: don’t treat UNC paths as protocol-relative URLs (#5127). These are paths beginning //?/UNC/....

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

    Text.Pandoc.Pretty: avoid stack overflow by using strict sum (#5401).

    🛠 Fix harmless error in file-scope code (#5422).

    MANUAL.txt:

    • Improve ‘header’ and ‘heading’ usage (#5423, Andrew Dunning). The term ‘header’ was being used where ‘heading’ is more appropriate.

    - Add paragraph on options affecting markdown in ipynb.

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

    ➕ Add ghc-options to cabal.project.

    🏁 appveyor.yml - use ghc 8.6.4. Fixes segfault issues on Windows (#5037).

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