134 lines
4.2 KiB
Markdown
134 lines
4.2 KiB
Markdown
|
|
title: Footnotes Extension
|
||
|
|
|
||
|
|
Footnotes
|
||
|
|
=========
|
||
|
|
|
||
|
|
Summary
|
||
|
|
-------
|
||
|
|
|
||
|
|
The Footnotes extension adds syntax for defining footnotes in Markdown
|
||
|
|
documents.
|
||
|
|
|
||
|
|
This extension is included in the standard Markdown library.
|
||
|
|
|
||
|
|
Syntax
|
||
|
|
------
|
||
|
|
|
||
|
|
Python-Markdown's Footnote syntax follows the generally accepted syntax of the
|
||
|
|
Markdown community at large and almost exactly matches [PHP Markdown Extra][]'s
|
||
|
|
implementation of footnotes. The only differences involve a few subtleties in
|
||
|
|
the output.
|
||
|
|
|
||
|
|
[PHP Markdown Extra]: http://michelf.com/projects/php-markdown/extra/#footnotes
|
||
|
|
|
||
|
|
Example:
|
||
|
|
|
||
|
|
```md
|
||
|
|
Footnotes[^1] have a label[^@#$%] and the footnote's content.
|
||
|
|
|
||
|
|
[^1]: This is a footnote content.
|
||
|
|
[^@#$%]: A footnote on the label: "@#$%".
|
||
|
|
```
|
||
|
|
|
||
|
|
A footnote label must start with a caret `^` and may contain any inline text
|
||
|
|
(including spaces) between a set of square brackets `[]`. Only the first
|
||
|
|
caret has any special meaning.
|
||
|
|
|
||
|
|
A footnote content must start with the label followed by a colon and at least
|
||
|
|
one space. The label used to define the content must exactly match the label used
|
||
|
|
in the body (including capitalization and white space). The content would then
|
||
|
|
follow the label either on the same line or on the next line. The content may
|
||
|
|
contain multiple lines, paragraphs, code blocks, blockquotes and most any other
|
||
|
|
markdown syntax. The additional lines must be indented one level (four spaces or
|
||
|
|
one tab).
|
||
|
|
|
||
|
|
When working with multiple blocks, it may be helpful to start the content on a
|
||
|
|
separate line from the label which defines the content. This way the entire block
|
||
|
|
is indented consistently and any errors are more easily discernible by the author.
|
||
|
|
|
||
|
|
```md
|
||
|
|
[^1]:
|
||
|
|
The first paragraph of the definition.
|
||
|
|
|
||
|
|
Paragraph two of the definition.
|
||
|
|
|
||
|
|
> A blockquote with
|
||
|
|
> multiple lines.
|
||
|
|
|
||
|
|
a code block
|
||
|
|
|
||
|
|
A final paragraph.
|
||
|
|
```
|
||
|
|
|
||
|
|
Usage
|
||
|
|
-----
|
||
|
|
|
||
|
|
See [Extensions](index.md) for general extension usage. Use `footnotes` as the
|
||
|
|
name of the extension.
|
||
|
|
|
||
|
|
See the [Library Reference](../reference.md#extensions) for information about
|
||
|
|
configuring extensions.
|
||
|
|
|
||
|
|
The following options are provided to configure the output:
|
||
|
|
|
||
|
|
* **`PLACE_MARKER`**:
|
||
|
|
A text string used to mark the position where the footnotes are rendered.
|
||
|
|
Defaults to `///Footnotes Go Here///`.
|
||
|
|
|
||
|
|
If the place marker text is not found in the document, the footnote
|
||
|
|
definitions are placed at the end of the resulting HTML document.
|
||
|
|
|
||
|
|
* **`UNIQUE_IDS`**:
|
||
|
|
Whether to avoid collisions across multiple calls to `reset()`. Defaults to
|
||
|
|
`False`.
|
||
|
|
|
||
|
|
* **`BACKLINK_TEXT`**:
|
||
|
|
The text string that links from the footnote definition back to the position
|
||
|
|
in the document. Defaults to `↩`.
|
||
|
|
|
||
|
|
* **`SUPERSCRIPT_TEXT`**:
|
||
|
|
The text string that links from the position in the document to the footnote
|
||
|
|
definition. Defaults to `{}`, i.e. only the footnote's number.
|
||
|
|
|
||
|
|
* **`BACKLINK_TITLE`**:
|
||
|
|
The text string for the `title` HTML attribute of the footnote definition link.
|
||
|
|
The placeholder `{}` will be replaced by the footnote number. Defaults to
|
||
|
|
`Jump back to footnote {} in the text`.
|
||
|
|
|
||
|
|
* **`SEPARATOR`**:
|
||
|
|
The text string used to set the footnote separator. Defaults to `:`.
|
||
|
|
|
||
|
|
A trivial example:
|
||
|
|
|
||
|
|
```python
|
||
|
|
markdown.markdown(some_text, extensions=['footnotes'])
|
||
|
|
```
|
||
|
|
|
||
|
|
Resetting Instance State
|
||
|
|
-----
|
||
|
|
|
||
|
|
Footnote definitions are stored within the `markdown.Markdown` class instance between
|
||
|
|
multiple runs of the class. This allows footnotes from all runs to be included in
|
||
|
|
output, with links and references that are unique, even though the class has been
|
||
|
|
called multiple times.
|
||
|
|
|
||
|
|
However, if needed, the definitions can be cleared between runs by calling `reset`.
|
||
|
|
|
||
|
|
For instance, the home page of a blog might include the content from multiple documents.
|
||
|
|
By not calling `reset`, all of the footnotes will be rendered, and they will all have
|
||
|
|
unique links and references.
|
||
|
|
|
||
|
|
On the other hand, individual blog post pages might need the content from only one
|
||
|
|
document, and should have footnotes pertaining only to that page. By calling `reset`
|
||
|
|
between runs, the footnote definitions from the first document will be cleared before
|
||
|
|
the second document is rendered.
|
||
|
|
|
||
|
|
An example of calling `reset`:
|
||
|
|
|
||
|
|
```python
|
||
|
|
md = markdown.Markdown(extensions=['footnotes'])
|
||
|
|
html1 = md.convert(text_with_footnote)
|
||
|
|
md.reset()
|
||
|
|
html2 = md.convert(text_without_footnote)
|
||
|
|
```
|