In contrast to most existing tools for converting Markdown to HTML, which use regex substitutions, pandoc has a modular design. Pandoc consists of a set of readers, which parse text in a given format and produce a native representation of the document, and a set of writers, which convert this native representation into a target format. Thus, adding an input or output format requires only adding a reader or writer.
Supported formats
Pandoc is a Haskell library for converting from one markup format to another this library. Supported formats:
Markup | Description |
---|---|
Markdown is a text-to-HTML conversion tool for web writers. Markdown allows you to write using an easy-to-read, easy-to-write plain text format, then convert it to structurally valid XHTML (or HTML). | |
It’s a plain text format for writing structured documents, based on formatting conventions from email and usenet. | |
Markdown Extra is an extension to PHP Markdown implementing some features currently not available with the plain Markdown syntax. | |
Markdown to share information on GitHub with various formatting options. | |
Textile (subsets of) | Textile is a simple text markup language that makes it easy to structure content for blogs, wikis, and documentation. |
reStructuredText is an easy-to-read, what-you-see-is-what-you-get plaintext markup syntax and parser system. It is useful for inline program documentation (such as Python docstrings), for quickly creating simple web pages, and for standalone documents. | |
Markup language for the Web (Hypertext Markup language). | |
LaTeX is a high-quality typesetting system; it includes features designed for the production of technical and scientific documentation. LaTeX is the de facto standard for the communication and publication of scientific documents. | |
Markup language used by Mediawiki. | |
Markup language used by TWiki. | |
Haddock, a tool for automatically generating documentation from annotated Haskell source code. | |
OPML provides a file format for storing outlines in XML. The purpose of OPML (Outline Processor Markup Language ) is to provide a way to exchange information between outliners and Internet services that can be browsed or controlled through an outliner. | |
Emacs Org mode is the major mode for keeping notes, authoring documents, computational notebooks, literate programming, maintaining to-do lists, planning projects, and more — in a fast and effective plain text system. | |
DocBook is a schema (available in several languages including RELAX NG, SGML and XML DTDs, and W3C XML Schema) maintained by the DocBook Technical Committee of OASIS. It is particularly well suited to books and papers about computer hardware and software. | |
Txt2tags is a document generator. It reads a text file with minimal markup such as bold and //italic// and converts it to many formats, such as Asciidoc, Latex, HTML, etc. | |
EPUB is an e-book file format that uses the ".epub" file extension. The term is short for electronic publication and is sometimes styled ePub. EPUB is supported by many e-readers, and compatible software is available for most smartphones, tablets, and computers. | |
The Open Document Format for Office Applications (ODF), also known as OpenDocument, is an open file format for spreadsheets, charts, presentations and word processing documents using ZIP-compressed XML files | |
The beamer LATEX class can be used for producing slides. The class works in both PostScript and direct PDF output modes, using the pgf graphics system for visual effects. | |
The Rich Text Format (often abbreviated RTF) is a proprietary document file format with published specification developed by Microsoft Corporation for cross-platform document interchange with Microsoft products. | |
Word docx | DOCX is a well-known format for Microsoft Word documents. Introduced with the release of Microsoft Office 2007, the structure of this new Document format was changed from plain binary to a combination of XML and binary files. |
Texinfo is the official documentation format of the GNU project. It is used by many non-GNU projects as well. Texinfo uses a single source file to produce output in a number of formats, both online and printed (DVI, HTML, Info, PDF, XML, etc.). This means that instead of writing different documents for online information and another for a printed manual, you need write only one document. | |
Markup language used by DokuWiki. DokuWiki is a simple to use and highly versatile Open Source wiki software that doesn’t require a database. | |
The Asciidoc Markup language. | |
Slide Shows in HTML and XHTML | |
Slideous is a web based presentation application based on (X)HTML, CSS and Javascript. | |
DZSlides is a one-page-template to build your presentation in HTML5 and CSS3. | |
reveal.js is an open source HTML presentation framework. It’s a tool tha enables anyone with a web browser to create fully-featured and beautiful presentations for free. | |
S5 is a slide show format based entirely on XHTML, CSS, and JavaScript. With one file, you can run a complete slide show and have a printer-friendly version as well. | |
Output on systems where LaTeX or ConTeXt is installed |
Because pandoc’s intermediate representation of a document is less expressive than many of the formats it converts between, one should not expect perfect conversions between every format and every other. Pandoc attempts to preserve the structural elements of a document, but not formatting details such as margin size. And some document elements, such as complex tables, may not fit into pandoc’s simple document model. While conversions from pandoc’s Markdown to all formats aspire to be perfect, conversions from formats more expressive than pandoc’s Markdown can be expected to be lossy.
Binary locations
$HOME/.pandoc
C:\Users\USERNAME\AppData\Roaming\pandoc
Using Pandoc
If no input-file is specified, input is read from stdin. Otherwise, the input-files are concatenated (with a blank line between each) and used as input. Output goes to stdout by default (though output to stdout is disabled for the odt
, docx
, epub
, and epub3
output formats). For output to a file, use the -o
option:
pandoc -o output.html input.txt
By default, pandoc produces a document fragment, not a standalone document with a proper header and footer. To produce a standalone document, use the -s
or --standalone
flag:
pandoc -s -o output.html input.txt
For more information on how standalone documents are produced, see Templates, below.
Instead of a file, an absolute URI may be given. In this case pandoc will fetch the content using HTTP:
pandoc -f html -t markdown https://www.fsf.org
If multiple input files are given, pandoc
will concatenate them all (with blank lines between them) before parsing. This feature is disabled for binary input formats such as EPUB
, odt
, and docx
.
The format of the input and output can be specified explicitly using command line options. The input format can be specified using the -r/--read
or -f/--from
options, the output format using the -w/--write
or -t/--to
options. Thus, to convert hello.txt
from Markdown to LaTeX, you could type:
pandoc -f markdown -t latex hello.txt
To convert hello.html
from HTML to Markdown:
pandoc -f html -t markdown hello.html
Supported output formats are listed below under the -t/--to
option. Supported input formats are listed below under the -f/--from
option. Note that the rst
, textile
, latex
, and html
readers are not complete; there are some constructs that they do not parse.
If the input or output format is not specified explicitly, pandoc
will attempt to guess it from the extensions of the input and output filenames. Thus, for example,
pandoc -o hello.tex hello.txt
will convert hello.txt
from Markdown to LaTeX. If no output file is specified (so that output goes to stdout), or if the output file’s extension is unknown, the output format will default to HTML. If no input file is specified (so that input comes from stdin), or if the input files’ extensions are unknown, the input format will be assumed to be Markdown unless explicitly specified.
Pandoc uses the UTF-8 character encoding for both input and output. If your local character encoding is not UTF-8, you should pipe input and output through iconv
:
iconv -t utf-8 input.txt | pandoc | iconv -f utf-8
Note that in some output formats (such as HTML, LaTeX, ConTeXt, RTF, OPML, DocBook, and Texinfo), information about the character encoding is included in the document header, which will only be included if you use the -s/--standalone
option.
Options
Input options
Specify input format. FORMAT can be:
-f
FORMAT,-r
FORMAT, `--from=`FORMAT, `--read=`FORMAT
Format | Description |
---|---|
| native Haskell |
| JSON version of native AST (JSON parser) |
| Pandoc’s extended Markdown language |
| Original unextended Markdown language |
| PHP Markdown Extra language |
| GitHub-Flavored Markdown language |
| CommonMark Markdown language |
| Textile, a markup language (like Markdown) |
| reStructuredText (used by both Python Docutils and Sphinx) |
| HTML |
| DocBook, DocBook, a semantic markup language for technical documentation |
| txt2tags, a document generator |
| MS Word docx |
| OpenOffice text document |
| EPUB |
| OPML, an established standard for interop between outliners and RSS readers |
| Emacs Org mode |
| MediaWiki markup language |
| TWiki markup language |
| Haddock markup language |
| LaTeX, a high-quality typesetting system |
If +lhs
is appended to markdown
, rst
, latex
, or html
, the input will be treated as literate Haskell source: see Literate Haskell support, below. Markdown syntax extensions can be individually enabled or disabled by appending +EXTENSION
or -EXTENSION
to the format name. So, for example, markdown_strict+footnotes+definition_lists
is strict Markdown with footnotes and definition lists enabled, and markdown-pipe_tables+hard_line_breaks
is pandoc’s Markdown without pipe tables and with hard line breaks.
Output options
Specify output format. FORMAT can be:
-t
FORMAT,-w
FORMAT, `--to=`FORMAT, `--write=`FORMAT
Format | Description |
---|---|
| Native Haskell |
| JSON version of native AST (JSON parser) |
| Plain text |
| Pandoc’s extended Markdown language |
| Original unextended Markdown language |
| PHP Markdown Extra language |
| GitHub-Flavored Markdown language |
| CommonMark Markdown language |
| reStructuredText (used by both Python Docutils and Sphinx) Markdown language |
| XHTML |
| HTML5 |
| LaTeX, a high-quality typesetting system |
| LaTeX beamer slide show |
| ConTeXt, a high-quality typesetting system |
| Groff man |
| MediaWiki markup language |
| DokuWiki markup language |
| Textile, a markup language (like Markdown) |
| Emacs Org mode |
| GNU Texinfo |
| OPML, an established standard for interop between outliners and RSS readers |
| DocBook, a semantic markup language for technical documentation |
| OpenDocument (ODF), an open XML-based document file format for office applications |
| OpenOffice text document |
| MS Word docx |
| Haddock markup language |
| Rich text format |
| EPUB v2 book |
| EPUB v3 book |
| FictionBook2 e-book |
| AsciiDoc |
| InDesign ICML |
| Slidy HTML and Javascript slide show |
| Slideous HTML and Javascript slide show |
| DZSlides HTML5 and Javascript slide show |
| reveal.js HTML5 and Javascript slide show |
| S5 HTML and Javascript slide show |
Note that odt
, epub
, and epub3
output will not be directed to stdout. An output filename must be specified using the -o/--output
option. If +lhs
is appended to markdown
, rst
, latex
, beamer
, html
, or html5
, the output will be rendered as literate Haskell source.
Markdown syntax extensions can be individually enabled or disabled by appending +EXTENSION
or -EXTENSION
to the format name, as described above under -f
.
-o
FILE, `--output=`FILE-
Write output to FILE instead of stdout. If FILE is
-
, output will go to stdout. (Exception: if the output format isodt
,docx
,epub
, orepub3
, output to stdout is disabled.) - `--data-dir=`DIRECTORY
-
Specify the user data directory to search for pandoc data files. If this option is not specified, the default user data directory will be used. This is, in Unix:
General options
You can find the default user data directory on your system by looking at the output of pandoc --version
. A reference.odt
, reference.docx
, epub.css
, templates
, slidy
, slideous
, or s5
directory placed in this directory will override pandoc’s normal defaults.
Option | Description |
---|---|
| Generate a bash completion script. To enable bash completion with pandoc, add this to your |
| Give verbose debugging output. Currently this only has an effect with PDF output. |
| Print version. |
| Show usage message. |
Reader options
Option | Description |
---|---|
| Parse untranslatable HTML codes and LaTeX environments as raw HTML or LaTeX, instead of ignoring them. Affects only HTML and LaTeX input. Raw HTML can be printed in Markdown, reStructuredText, HTML, Slidy, Slideous, DZSlides, reveal.js, and S5 output; raw LaTeX can be printed in Markdown, reStructuredText, LaTeX, and ConTeXt output. The default is for the readers to omit untranslatable HTML codes and LaTeX environments. (The LaTeX reader does pass through untranslatable LaTeX commands, even if |
| Produce typographically correct output, converting straight quotes to curly quotes, |
| Selects the pandoc ⇐ 1.8.2.1 behavior for parsing smart dashes: |
| Specify the base level for headers (defaults to 1). |
| Specify classes to use for indented code blocks–for example, |
| Specify a default extension to use when image paths/URLs have no extension. This allows you to use the same source for formats that require different kinds of images. Currently this option only affects the Markdown and LaTeX readers. |
| Specify an executable to be used as a filter transforming the pandoc AST after the input is parsed and before the output is written. The executable should read JSON from stdin and write JSON to stdout. The JSON must be formatted like pandoc’s own JSON input and output. The name of the output format will be passed to the filter as the first argument. Hence,
is equivalent to
The latter form may be useful for debugging filters. Filters may be written in any language. Note that the EXECUTABLE will be sought in the user’s |
| Set the metadata field KEY to the value VAL. A value specified on the command line overrides a value specified in the document. Values will be parsed as YAML boolean or string values. If no value is specified, the value will be treated as Boolean true. Like |
| Normalize the document after reading: merge adjacent |
| Preserve tabs instead of converting them to spaces (the default). Note that this will only affect tabs in literal code spans and code blocks; tabs in regular text will be treated as spaces. |
| Specify the number of spaces per tab (default is 4). |
| Specifies what to do with insertions and deletions produced by the MS Word “Track Changes” feature. |
| Extract images and other media contained in a docx or epub container to the path DIR, creating it if necessary, and adjust the images references in the document so they point to the extracted files. This option only affects the docx and epub readers. |
General writer options
-s
,--standalone
-
Produce output with an appropriate header and footer (e.g. a standalone HTML, LaTeX, or RTF file, not a fragment). This option is set automatically for
pdf
,epub
,epub3
,fb2
,docx
, andodt
output. - `--template=`FILE
-
Use FILE as a custom template for the generated document. Implies
--standalone
. If no extension is specified, an extension corresponding to the writer will be added, so that--template=special
looks forspecial.html
for HTML output. If the template is not found, pandoc will search for it in thetemplates
subdirectory of the user data directory (see--data-dir
). If this option is not used, a default template appropriate for the output format will be used (see-D/--print-default-template
). -V
KEY[=`VAL], `--variable=`KEY[
:`VAL]-
Set the template variable KEY to the value VAL when rendering the document in standalone mode. This is generally only useful when the
--template
option is used to specify a custom template, since pandoc automatically sets the variables used in the default templates. If no VAL is specified, the key will be given the valuetrue
. -D
FORMAT, `--print-default-template=`FORMAT-
Print the system default template for an output FORMAT. (See
-t
for a list of possible FORMATs.) Templates in the user data directory are ignored. - `--print-default-data-file=`FILE
-
Print a system default data file. Files in the user data directory are ignored.
--no-wrap
-
Disable text wrapping in output. By default, text is wrapped appropriately for the output format.
- `--columns=`NUMBER
-
Specify length of lines in characters (for text wrapping).
--toc
,--table-of-contents
-
Include an automatically generated table of contents (or, in the case of
latex
,context
, andrst
, an instruction to create one) in the output document. This option has no effect onman
,docbook
,slidy
,slideous
,s5
,docx
, orodt
output. - `--toc-depth=`NUMBER
-
Specify the number of section levels to include in the table of contents. The default is 3 (which means that level 1, 2, and 3 headers will be listed in the contents).
--no-highlight
-
Disables syntax highlighting for code blocks and inlines, even when a language attribute is given.
- `--highlight-style=`STYLE
-
Specifies the coloring style to be used in highlighted source code. Options are
pygments
(the default),kate
,monochrome
,espresso
,zenburn
,haddock
, andtango
. For more information on syntax highlighting in pandoc, see Syntax highlighting, below. -H
FILE, `--include-in-header=`FILE-
Include contents of FILE, verbatim, at the end of the header. This can be used, for example, to include special CSS or javascript in HTML documents. This option can be used repeatedly to include multiple files in the header. They will be included in the order specified. Implies
--standalone
. -B
FILE, `--include-before-body=`FILE-
Include contents of FILE, verbatim, at the beginning of the document body (e.g. after the
<body>
tag in HTML, or the\begin{document}
command in LaTeX). This can be used to include navigation bars or banners in HTML documents. This option can be used repeatedly to include multiple files. They will be included in the order specified. Implies--standalone
. -A
FILE, `--include-after-body=`FILE-
Include contents of FILE, verbatim, at the end of the document body (before the
</body>
tag in HTML, or the\end{document}
command in LaTeX). This option can be be used repeatedly to include multiple files. They will be included in the order specified. Implies--standalone
.
Specific writer options
--self-contained
-
Produce a standalone HTML file with no external dependencies, using
data:
URIs to incorporate the contents of linked scripts, stylesheets, images, and videos. The resulting file should be “self-contained,” in the sense that it needs no external files and no net access to be displayed properly by a browser. This option works only with HTML output formats, includinghtml
,html5
,html+lhs
,html5+lhs
,s5
,slidy
,slideous
,dzslides
, andrevealjs
. Scripts, images, and stylesheets at absolute URLs will be downloaded; those at relative URLs will be sought relative to the working directory (if the first source file is local) or relative to the base URL (if the first source file is remote).--self-contained
does not work with--mathjax
. --offline
-
Deprecated synonym for
--self-contained
. -5
,--html5
-
Produce HTML5 instead of HTML4. This option has no effect for writers other than
html
. (Deprecated: Use thehtml5
output format instead.) --html-q-tags
-
Use
<q>
tags for quotes in HTML. --ascii
-
Use only ascii characters in output. Currently supported only for HTML output (which uses numerical entities instead of UTF-8 when this option is selected).
--reference-links
-
Use reference-style links, rather than inline links, in writing Markdown or reStructuredText. By default inline links are used.
--atx-headers
-
Use ATX-style headers in Markdown and asciidoc output. The default is to use setext-style headers for levels 1-2, and then ATX headers.
--chapters
-
Treat top-level headers as chapters in LaTeX, ConTeXt, and DocBook output. When the LaTeX document class is set to
report
,book
, ormemoir
, this option is implied. Ifbeamer
is the output format, top-level headers will become\part{..}
. -N
,--number-sections
-
Number section headings in LaTeX, ConTeXt, HTML, or EPUB output. By default, sections are not numbered. Sections with class
unnumbered
will never be numbered, even if--number-sections
is specified. --number-offset=`NUMBER[
,NUMBER
,`…]-
Offset for section headings in HTML output (ignored in other output formats). The first number is added to the section number for top-level headers, the second for second-level headers, and so on. So, for example, if you want the first top-level header in your document to be numbered “6”, specify
--number-offset=5
. If your document starts with a level-2 header which you want to be numbered “1.5”, specify--number-offset=1,4
. Offsets are 0 by default. Implies--number-sections
. --no-tex-ligatures
-
Do not convert quotation marks, apostrophes, and dashes to the TeX ligatures when writing LaTeX or ConTeXt. Instead, just use literal unicode characters. This is needed for using advanced OpenType features with
xelatex
andlualatex
. Note: normally--smart
is selected automatically for LaTeX and ConTeXt output, but it must be specified explicitly if--no-tex-ligatures
is selected. If you use literal curly quotes, dashes, and ellipses in your source, then you may want to use--no-tex-ligatures
without--smart
. --listings
-
Use the
listings
package for LaTeX code blocks -i
,--incremental
-
Make list items in slide shows display incrementally (one by one). The default is for lists to be displayed all at once.
- `--slide-level=`NUMBER
-
Specifies that headers with the specified level create slides (for
beamer
,s5
,slidy
,slideous
,dzslides
). Headers above this level in the hierarchy are used to divide the slide show into sections; headers below this level create subheads within a slide. The default is to set the slide level based on the contents of the document. --section-divs
-
Wrap sections in
<div>
tags (or<section>
tags in HTML5), and attach identifiers to the enclosing<div>
(or<section>
) rather than the header itself. See Header identifiers, below. --email-obfuscation=none
|javascript
|references
-
Specify a method for obfuscating
mailto:
links in HTML documents.none
leavesmailto:
links as they are.javascript
obfuscates them using javascript.references
obfuscates them by printing their letters as decimal or hexadecimal character references. The default isjavascript
. - `--id-prefix=`STRING
-
Specify a prefix to be added to all automatically generated identifiers in HTML and DocBook output, and to footnote numbers in Markdown output. This is useful for preventing duplicate identifiers when generating fragments to be included in other pages.
-T
STRING, `--title-prefix=`STRING-
Specify STRING as a prefix at the beginning of the title that appears in the HTML header (but not in the title as it appears at the beginning of the HTML body). Implies
--standalone
. -c
URL, `--css=`URL-
Link to a CSS style sheet. This option can be be used repeatedly to include multiple files. They will be included in the order specified.
- `--reference-odt=`FILE
-
Use the specified file as a style reference in producing an ODT. For best results, the reference ODT should be a modified version of an ODT produced using pandoc. The contents of the reference ODT are ignored, but its stylesheets are used in the new ODT. If no reference ODT is specified on the command line, pandoc will look for a file
reference.odt
in the user data directory (see--data-dir
). If this is not found either, sensible defaults will be used. - `--reference-docx=`FILE
-
Use the specified file as a style reference in producing a docx file. For best results, the reference docx should be a modified version of a docx file produced using pandoc. The contents of the reference docx are ignored, but its stylesheets and document properties (including margins, page size, header, and footer) are used in the new docx. If no reference docx is specified on the command line, pandoc will look for a file
reference.docx
in the user data directory (see--data-dir
). If this is not found either, sensible defaults will be used. The following styles are used by pandoc: Paragraph, Body Text, First Paragraph, Compact, Title, Subtitle, Author, Date, Abstract, Bibliography, Heading 1 - 6, Block Text, Footnote Text, Definition Term, Definition, Caption, Table Caption, Image Caption, Figure, Figure With Caption, TOC Heading; [character] Default Paragraph Font, Body Text Char, Verbatim Char, Footnote Reference, Hyperlink, Table. - `--epub-stylesheet=`FILE
-
Use the specified CSS file to style the EPUB. If no stylesheet is specified, pandoc will look for a file
epub.css
in the user data directory (see--data-dir
). If it is not found there, sensible defaults will be used. - `--epub-cover-image=`FILE
-
Use the specified image as the EPUB cover. It is recommended that the image be less than 1000px in width and height. Note that in a Markdown source document you can also specify
cover-image
in a YAML metadata block (see EPUB Metadata, below). - `--epub-metadata=`FILE
-
Look in the specified XML file for metadata for the EPUB. The file should contain a series of Dublin Core elements. For example: +
<dc:rights>Creative Commons</dc:rights> <dc:language>es-AR</dc:language>
+ By default, pandoc will include the following metadata elements: `<dc:title>` (from the document title), `<dc:creator>` (from the document authors), `<dc:date>` (from the document date, which should be in https://www.w3.org/TR/NOTE-datetime[ISO 8601 format]), `<dc:language>` (from the `lang` variable, or, if is not set, the locale), and `<dc:identifier id="BookId">` (a randomly generated UUID). Any of these may be overridden by elements in the metadata file. + Note: if the source document is Markdown, a YAML metadata block in the document can be used instead. See below under link:#epub-metadata[EPUB Metadata].
- `--epub-embed-font=`FILE
-
Embed the specified font in the EPUB. This option can be repeated to embed multiple fonts. Wildcards can also be used: for example,
DejaVuSans-*.ttf
. However, if you use wildcards on the command line, be sure to escape them or put the whole filename in single quotes, to prevent them from being interpreted by the shell. To use the embedded fonts, you will need to add declarations like the following to your CSS (see--epub-stylesheet
): +
@font-face { font-family: DejaVuSans; font-style: normal; font-weight: normal; src:url("DejaVuSans-Regular.ttf"); } @font-face { font-family: DejaVuSans; font-style: normal; font-weight: bold; src:url("DejaVuSans-Bold.ttf"); } @font-face { font-family: DejaVuSans; font-style: italic; font-weight: normal; src:url("DejaVuSans-Oblique.ttf"); } @font-face { font-family: DejaVuSans; font-style: italic; font-weight: bold; src:url("DejaVuSans-BoldOblique.ttf"); } body { font-family: "DejaVuSans"; }
- `--epub-chapter-level=`NUMBER
-
Specify the header level at which to split the EPUB into separate “chapter” files. The default is to split into chapters at level 1 headers. This option only affects the internal composition of the EPUB, not the way chapters and sections are displayed to users. Some readers may be slow if the chapter files are too large, so for large documents with few level 1 headers, one might want to use a chapter level of 2 or 3.
--latex-engine=pdflatex
|lualatex
|xelatex
-
Use the specified LaTeX engine when producing PDF output. The default is
pdflatex
. If the engine is not in your PATH, the full path of the engine may be specified here. - `--latex-engine-opt=`STRING
-
Use the given string as a command line argument to the
latex-engine
. If used multiple times, the arguments are provided with spaces between them. Note that no check for duplicate options is done.