diff --git a/nbconvert/filters/markdown.py b/nbconvert/filters/markdown.py index 7e4bee9fd..fe0cb10e2 100644 --- a/nbconvert/filters/markdown.py +++ b/nbconvert/filters/markdown.py @@ -8,6 +8,10 @@ import re +from packaging.version import Version + +from nbconvert.utils.pandoc import get_pandoc_version + try: from .markdown_mistune import markdown2html_mistune @@ -66,7 +70,16 @@ def markdown2html_pandoc(source, extra_args=None): def markdown2asciidoc(source, extra_args=None): """Convert a markdown string to asciidoc via pandoc""" - extra_args = extra_args or ["--atx-headers"] + + # Prior to version 3.0, pandoc supported the --atx-headers flag. + # For later versions, we must instead pass --markdown-headings=atx. + # See https://pandoc.org/releases.html#pandoc-3.0-2023-01-18 + atx_args = ["--atx-headers"] + pandoc_version = get_pandoc_version() + if pandoc_version and Version(pandoc_version) >= Version("3.0"): + atx_args = ["--markdown-headings=atx"] + + extra_args = extra_args or atx_args asciidoc = convert_pandoc(source, "markdown", "asciidoc", extra_args=extra_args) # workaround for https://github.com/jgm/pandoc/issues/3068 if "__" in asciidoc: diff --git a/tests/exporters/test_asciidoc.py b/tests/exporters/test_asciidoc.py index e2a2ae359..0298bf90d 100644 --- a/tests/exporters/test_asciidoc.py +++ b/tests/exporters/test_asciidoc.py @@ -50,6 +50,10 @@ def test_export(self): assert re.findall(in_regex, output) assert re.findall(out_regex, output) + # Assert that the Markdown header from our test notebook made it into the output. + # This can fail when nbconvert invokes pandoc incorrectly, as in issue #2017. + assert "== NumPy and Matplotlib examples" in output + @onlyif_cmds_exist("pandoc") def test_export_no_prompt(self): """