Djot Chinese Docs Unoffical

Djot (/dʒɑt/) 是一种由 John MacFarlane 教授创造的轻型标记语法。 它从 CommonMark 中派生出大部分的功能,不过它修复了一些让 CommonMark 语法复杂且难以有效解析的问题,并且它的功能也比 CommonMark 更加全面,支持定义列表、脚注、表格、一些新的内联格式(如插入、删除、突出显示、上标、下标等)、数学、智能标点符号、可应用在任何属性的元素,以及用于块级、内联及原始内容的通用容器。该项目最初是为了实现 John MacFarlane 教授在 Beyond Markdown 中提出的一些想法。

Index

Djot 的语法定义

内联语法

优先级

在 Djot 中,大多数内联语法是由环绕内联内容的开闭定界符定义的。例如,将其定义为强调的内容,或定义为链接文本。 管理内联容器的「优先级」的基本原则是:最先被关闭的容器优先级较高。 这是因为容器不能重叠,所以一旦一个开启的内联容器被关闭,在开启者和关闭者之间的任何潜在开启者都被视为普通文本,而不被视为内联语法。例如:

Djot
_This is *regular_ not strong* emphasis
HTML
<p><em>This is *regular</em> not strong* emphasis</p>

这是因为第一个「_」打开的强调先被第二个「_」关闭,而这时第一个 「*」就不再有资格打开强调。不过在以下代码中:

Djot
*This is _strong* not regular_ emphasis
HTML
<p><strong>This is _strong</strong> not regular_ emphasis</p>

和上方正好相反!依此类推,在链接中也是一样的情况

Djot
[Link *](url)*
HTML
<p><a href="url">Link *</a>*</p>

普通文本

在 Djot 中,任何没有赋予特殊含义的内容都会被解析为普通文本。
所有 ASCII 标点字符(甚至那些在 Djot 中没有特殊含义的字符)都可以透过反斜杠转义。 因此,「\*」 会被解析为「*」这个字符。 在 ASCII 标点符号字符外的字符前的反斜杠仅被视为文字反斜杠,但以下情况除外:

  • 换行符前的反斜杠(或换行符后的空格或制表符前)被解析为硬换行符。 在这种情况下,将忽略反斜杠前的空格和制表符。
  • 将空格解析为不间断空格之前的反斜杠。

链接

Djot 中有两种链接,内联链接和参考链接。 两种类型都以 [ … ] 分隔符内的链接文本(可能包含任意内联格式)开头。

内联链接
内联链接在 [ … ] 分隔符后面输入圆括号,圆括号内部包含目标链接。 链接文本末尾的「]」和定义目标链接的开启「(」之间不应有空格。示例如下:
Djot
[Example](http://example.com/)
HTML
<p><a href="http://example.com/">Example</a></p>

目标链接的 URL 可以换行,在此情况下,换行符和任何前导或尾随空格都被忽略,并且这些行被连接在一起。

Djot
[Example](http://example.com/?id=1145 14)
HTML
<p><a href="http://example.com/?id=114514">Example</a></p>
参考链接

参考链接在 [ … ] 后面接上 [ … ] 标签,而不是圆括号。和内联链接一样,两个方括号中间不应有空格。

Djot
[Example][ExLink] [ExLink]: http://example.com/
HTML
<p><a href="http://example.com/">Example</a></p>

参考标签应当在文档中的某处定义:请参阅下面的参考链接定义。 但是,链接的解析是「本地」的,不依赖于标签是否被定义:

Djot
[Example][ExLink]
HTML
<p><a>Example</a></p>

如果标签为空,则链接文本也被视为参考标签:

Djot
[Example][] [Example]: http://example.com/
HTML
<p><a href="http://example.com/">Example</a></p>

图片

图片类似于链接,不过在链接前面有一个「!」前缀。和链接一样,具有内联和引用变体。

Djot
![picture of a cat](cat.jpg) ![picture of a cat][cat] ![cat][] [cat]: feline.jpg
HTML
<p><img alt="picture of a cat" src="cat.jpg"></p> <p><img alt="picture of a cat" src="feline.jpg"></p> <p><img alt="cat" src="feline.jpg"></p>

自动链接

包含在 <...> 中的 URL 或电子邮件地址会自动成为超链接。 尖括号之间的内容按字面意思处理(不能使用反斜杠转义)。

Djot
<https://pandoc.org/lua-filters> <[email protected]>
HTML
<p><a href="https://pandoc.org/lua-filters">https://pandoc.org/lua-filters</a> <a href="mailto:[email protected]">[email protected]</a></p>

内联代码

内联代码以一串连续的反引号字符 「`」开头,以等长的连续反引号字符字符串结束。

Djot
``Verbatim with a backtick` character`` `Verbatim with three backticks ``` character`
HTML
<p><code>Verbatim with a backtick` character</code> <code>Verbatim with three backticks ``` character</code></p>

反引号之间的内容被视为内联代码(反引号转义在此处不起作用)。
如果内容想要以反引号字符开始或结束,只需在开始或结束反引号与内容之间加入一个空格:

Djot
`` `foo` ``
HTML
<p><code>`foo`</code></p>

如果要解析为内联的内容在遇到结束反引号字符串之前结束,则内联代码文本将一直扩展到末尾:

Djot
`foo bar
HTML
<p><code>foo bar</code></p>

斜体/粗体(强调)

斜体内容由「_」字符分隔,粗体内容则由「*」字符分隔。

Djot
_emphasized text_ *strong emphasis*
HTML
<p><em>emphasized text</em></p> <p><strong>strong emphasis</strong></p>

开始强调的「_」或「*」只有在后面不是直接接空格时才可以开始强调,而用于关闭强调的「_」或「*」也需要在前面不直接有空格,并且除了定界符以外还有其他字符的情况下,才能关闭强调:

Djot
_ Not emphasized (spaces). _ ___ (not an emphasized `_` character)
HTML
<p>_ Not emphasized (spaces). _</p> <p>___ (not an emphasized <code>_</code> character)</p>

强调也可以嵌套:

Djot
__emphasis inside_ emphasis_
HTML
<p><em><em>emphasis inside</em> emphasis</em></p>

花括号可以强制将「_」或「*」解释为开始或结束强调(也就是说,可以无视上上段文本)。

Djot
{_ this is emphasized, despite the spaces! _}
HTML
<p><em> this is emphasized, despite the spaces! </em></p>

高亮

「{=」和「=}」之间的内联内容会被视为高亮文本(即 HTML 中的 <mark> 标签)。请注意,「{」和「}」是强制性的:

Djot
This is {=highlighted text=}.
HTML
<p>This is <mark>highlighted text</mark>.</p>

上/下标

上标使用「^」作为分隔符,而下标则用「~」作为分隔符:

Djot
H~2~O and djot^TM^
HTML
<p>H<sub>2</sub>O and djot<sup>TM</sup></p>

可以使用花括号,但并不是必须的:

Djot
H{~one two buckle my shoe~}O
HTML
<p>H<sub>one two buckle my shoe</sub>O</p>

插入/删除

要将内联内容标记为插入,请使用「{+」及「+}」包裹之,而要将内联内容标记为删除,则使用「{-」及「-}」包裹之。请注意,「{」和「}」是强制性的:

Djot
My boss is {-mean-}{+nice+}.
HTML
<p>My boss is <del>mean</del><ins>nice</ins>.</p>

智能标点符号

直双引号(")及单引号(')会被解析为弯引号。Djot 非常擅长从上下文中找出正确的引号方向:

Djot
"Hello," said the spider. "'Shelob' is my name."
HTML
<p>“Hello,” said the spider. “‘Shelob’ is my name.”</p>

不过,可以透过使用大括号将引号标记为开头或结尾以覆盖它的启发式方法:

Djot
'}Tis Socrates' season to be jolly!
HTML
<p>’Tis Socrates’ season to be jolly!</p>

如果你想使用直引号,请使用反斜杠转义:

Djot
5\'11\"
HTML
<p>5'11"</p>

三个句点「...」被解析为省略号,三个连字符「---」被解析为破折号,两个连字符「--」被解析为连接号:

Djot
57--33 oxen---and no sheep...
HTML
<p>57–33 oxen—and no sheep…</p>

较长的连字符序列分为 破折号、连接号 和 省略号; 当可以用任意一种方式实现统一时,Djot 解析器会优先解析为破折号。 此处可能有翻译问题(因此,四个连字符变成两个连接号,六个连字符变成两个破折号)。

数学

要在文档中包含 LaTeX 数学,请将 LaTeX 放置在内联代码块内,并在其前面加上「$」(用于内联数学)或「$$」(用于数学容器):

Djot
Einstein derived $`e=mc^2`. Pythagoras proved $$` x^n + y^n = z^z `
HTML
<p>Einstein derived <span class="math inline">\(e=mc^2\)</span>. Pythagoras proved <span class="math display">\[ x^n + y^n = z^z \]</span></p>

脚注参考

使用脚注参考,只需要在方括号中加入「^」符号。

Djot
Here is the reference.[^foo] [^foo]: And here is the note.
HTML
<p>Here is the reference.<a id="fnref1" href="#fn1" role="doc-noteref"><sup>1</sup></a></p> <section role="doc-endnotes"> <hr> <ol> <li id="fn1"> <p>And here is the note.<a href="#fnref1" role="doc-backlink">↩︎︎</a></p> </li> </ol> </section>

有关脚注本身的语法,请参见下面的脚注

硬换行

内联内容中的换行符被视为“软”换行符; 它们可能呈现为空格,或者(在换行符在语义上被视为空格的上下文中,例如 HTML)作为换行符。
要获得硬换行符(由 HTML 的 <br> 表示的那种),请使用反斜杠 + 换行符:

Djot
This is a soft break and this is a hard\ break.
HTML
<p>This is a soft break and this is a hard<br> break.</p>

注释

在两个花括号中被两个「%」包裹住的内容将被忽略并被视为注释,允许将注释添加到属性:

Djot
{#ident % later we'll add a class %}
HTML

但它也可以作为添加注释的通用方式,只需使用仅包含注释的属性符号:

Djot
Foo bar {% This is a comment, spanning multiple lines %} baz.
HTML
<p>Foo bar baz.</p>

Emoji

可以通过在内容周围加上「:」符号来包含表情符号:

Djot
My reaction is :+1: :smiley:.
HTML
<p>My reaction is 👍 😃.</p>

原始内联

可以使用内联代码后跟 {=FORMAT} 来包含任何格式的原始内联内容:

Djot
This is `<?php echo 'Hello world!' ?>`{=html}.
HTML
<p>This is <?php echo 'Hello world!' ?>.</p>

此内容旨在在呈现指定格式时作为代码传递,否则将被忽略。

行内 Span

方括号中不是链接或图像且紧跟属性的文本被视为 <span>:

Djot
It can be helpful to [read the manual]{.big .red}.
HTML
<p>It can be helpful to <span class="big red">read the manual</span>.</p>

内联属性

属性放在大括号内,并且必须紧跟在它们所要附加的内联元素之后(中间不能有空格)。
在大括号内,可以使用以下的语法:

  • .foo 将 foo 指定为一个类。 可以通过这种方式给出多个类, 它们将会被合并。
  • #foo 将 foo 指定为标识符。 一个元素应该只有一个标识符; 如果给出多个标识符,则使用最后一个。
  • key="value" 或 key=value 指定 Key 属性。 当值完全由 ASCII 字母数字字符或 _ 或 : 或 - 组成时,不需要引号。 反斜杠转义可以用在引用值中。
  • % 开始注释,以下一个 % 或属性 (}) 结尾。

属性符号可以包含换行符,以下是示例:

Djot
An attribute on _emphasized text_{#foo .bar .baz key="my value"}
HTML
<p>An attribute on <em class="bar baz" id="foo" key="my value">emphasized text</em></p>

属性说明符可以“堆叠”,在这种情况下它们将被组合。 因此,

Djot
avant{lang=fr}{.blue}
HTML
<p><span class="blue" lang="fr">avant</span></p>

Djot
avant{lang=fr .blue}
HTML
<p>An attribute on <em class="bar baz" id="foo" key="my value">emphasized text</em></p>

是相同的。

块级元素语法

与 CommonMark 一样,块级结构可以在内联解析之前被识别,并且优先于内联结构。

事实上,块级元素可以逐行解析而没有回溯。 「一条线对块级结构的贡献从不依赖于未来的线。」

缩进仅对列表项或脚注嵌套有意义。

块级项目应该用空行彼此分开。 在某些情况下,两个块级元素可以相邻——例如,主题分隔符或代码块后面可以直接跟著一个段落。 事实上,逐行解析的可能性排除了在块级元素之后需要一个空行。 但为了可读性,我们建议始终用空行分隔块级元素。 段落永远不能被其他块级元素打断,并且必须始终以空行(或文档或包含元素的末尾)结尾。

段落

段落是不满足成为其他块级元素之一的条件的非空行序列,文本内容被解析为一系列内联元素。

换行符被视为软中断并被解释为格式化输出中的空格,段落以空行或文档结尾结束。

标题

标题以一个或多个 # 字符序列开头,后跟空格。 # 字符的数量定义标题级别。 以下文本被解析为内联内容。

Djot
## A level _two_ heading!
HTML
<section id="A-level-two-heading"> <h2>A level <em>two</em> heading!</h2> </section>

标题文本可能会溢出到后续行,这些行之前也可能有相同数量的 # 字符(但也可以省略)。

当遇到空行(或文档或封闭容器的末尾)时,标题结束。

Djot
# A heading that # takes up # three lines A paragraph, finally
HTML
<section id="A-heading-that-takes-up-three-lines"> <h1>A heading that takes up three lines</h1> <p>A paragraph, finally</p> </section>
Djot
# A heading that takes up three lines A paragraph, finally.
HTML
<section id="A-level-two-heading"> <h2>A level <em>two</em> heading!</h2> </section>

引用块

块引用是一个多行元素,每一行都以「>」开头,后跟一个空格或行尾。 块引用的内容(减去首字母「>」)被解析为块级内容。

Djot
> This is a block quote. > > 1. with a > 2. list in it.
HTML
<blockquote> <p>This is a block quote.</p> <ol> <li> with a </li> <li> list in it. </li> </ol> </blockquote>

与在 Markdown 中一样,可以「懒惰地」省略块引用内常规段落行中的 > 前缀,但在段落的第一行前面除外:

Djot
> This is a block quote.
HTML
<blockquote> <p>This is a block quote.</p> </blockquote>

项目清单

列表项由列表标记和空格(或换行符)组成,相对于列表标记缩进。 例如:

Djot
1. This is a list item. > containing a block quote
HTML
<ol> <li> <p>This is a list item.</p> <blockquote> <p>containing a block quote</p> </blockquote> </li> </ol>

段落第一行之后的段落行可以「懒惰地」省略缩进:

Djot
1. This is a list item. Second paragraph under the list item.
HTML
<ol> <li> <p>This is a list item.</p> <p>Second paragraph under the list item.</p> </li> </ol>

可以使用以下基本类型的列表标记:

  • 无序列表
    • -
    • +
    • *

  • 有序列表
      十进制
    • 1.
    • 1)
    • (1)

    • 小写字母
    • a)
    • (a)

    • 大写字母
    • A)
    • (A)

    • 小写罗马数字
    • i)
    • (i)

    • 大写罗马数字
    • I.
    • I)
    • (I)

    • 定义
    • :

    • 任务
    • - []

有序列表标记可以使用系列中的任何数字:因此,(xix) 和 v) 都是有效的小写罗马枚举标记,并且 v) 也是有效的小写字母枚举标记。

任务列表

以「[ ]」、「[X]」或「[x]」 开头后跟空格的项目符号列表项是任务列表,未选中的使用「([ ])」,而已选中的使用「([X])」或「([x])」。

定义列表

在定义列表项中,「:」 标记之后的第一行或多行被解析为内联内容并被视为定义的符号。 项目中包含的任何其他块都被假定为定义:

Djot
: orange A citrus fruit.
HTML
<dl> <dt>orange</dt> <dd> <p>A citrus fruit.</p> </dd> </dl>

列表

列表只是一系列相同类型的列表项(上表中的每一行都定义了一个类型)。 请注意,更改有序列表样式或项目符号将停止一个列表并开始一个新列表。 因此,以下列表项被分为四个不同的列表:

Djot
i) one i. one (style change) + bullet * bullet (style change)
HTML
<ol start="9" type="a"> <li> one </li> </ol> <ol start="9" type="a"> <li> one (style change) </li> </ol> <ul> <li> bullet </li> </ul> <ul> <li> bullet (style change) </li> </ul>

有时列表项的类型不明确。在这种情况下,如果可能的话,将以继续列表的方式解决问题。 例如:

Djot
i. item j. next item
HTML
<ol start="9" type="a"> <li> item </li> <li> next item </li> </ol>

第一项在「小写罗马文字」和「小写英文字母」之间不明确。 但只有后一种解释适用于下一项,因此解析器会解析为允许我们拥有一个连续列表而不是两个单独列表的阅读。

有序列表的起始编号由第一项的编号决定,而后续的列表项的数量无关紧要:

Djot
5) five 8) six
HTML
<ol start="5"> <li> five </li> <li> six </li> </ol>

如果列表在项目之间或项目内部的块之间不包含空行,则该列表被归类为紧凑列表。 列表开头或结尾的空行不计入紧密度。

Djot
- one - two - sub - sub
HTML
<ul> <li> one </li> <li> two <ul> <li> sub </li> <li> sub </li> </ul> </li> </ul>

不紧凑的清单是松的。 这种区别的预期意义在于:呈现紧凑列表时,项目之间的空间应该更小。

Djot
- one - two
HTML
<ul> <li> <p>one</p> </li> <li> <p>two</p> </li> </ul>

代码块

代码块以一行三个或更多个连续的反引号开始,可以选择后跟一个语言说明符,但没有其他内容。 (语言说明符可以选择在前面和/或后面加上空格。)代码块到一行反引号或者文档或封闭块的末尾结束,反引号长度等于或大于开始反引号「围栏」。 其内容被解释为内联代码。 如果内容包含一行反引号,请务必选择更长的反引号字符串用作「围栏」:

Djot
```` This is how you do a code block: ``` ruby x = 5 * 6 ``` ````
HTML
<pre><code>This is how you do a code block: ``` ruby x = 5 * 6 ``` </code></pre>

这是一个代码块的示例,当它的父容器关闭时,该代码块将会隐式关闭:

Djot
> ``` > code in a > block quote Paragraph.
HTML
<blockquote> <pre><code>code in a block quote </code></pre> </blockquote> <p>Paragraph.</p>

分隔线

包含三个或更多「*」或「-」 字符且没有其他任何内容(空格或制表符除外)的行将被视为分隔线(<hr> 在 HTML 中)。 与 Markdown 不同,分隔线可以缩进:

Djot
Then they went to sleep. * * * * When they woke up, ...
HTML
<p>Then they went to sleep.</p> <hr> <p>When they woke up, …</p>

原始内容

带有「=FORMAT」的代码块通常会被解释为 FORMAT 中的原始内容,并以代码传递该格式输出。例如:

Djot
``` =html <video width="320" height="240" controls> <source src="movie.mp4" type="video/mp4"> <source src="movie.ogg" type="video/ogg"> Your browser does not support the video tag. </video> ```
HTML
<video width="320" height="240" controls> <source src="movie.mp4" type="video/mp4"> <source src="movie.ogg" type="video/ogg"> Your browser does not support the video tag. </video>

Div

一个 div 以一行三个或更多个连续的冒号开头,后面可以选择空格和类名(不过不可以有其他内容)。 它以至少与开头符号一样长的一行连续冒号,或包含块的末尾做结。

Div 內容是一个块级元素。

Djot
::: warning Here is a paragraph. And here is another. :::
HTML
<div class="warning"> <p>Here is a paragraph.</p> <p>And here is another.</p> </div>

表格

表格由一系列行组成。每行以「|」字符开头和结尾,并包含数个由「|」字符分割的单元格。

Djot
| 1 | 2 |
HTML
<table> <tr> <td>1</td> <td>2</td> </tr> </table>

分隔线是一行,其中每个单元格由一个或多个「-」字符的序列组成,可选地以「:」字符作为前缀或后缀。

当遇到分隔线时,前一行被视为标题,并且该行和任何后续行的对齐方式由分隔线确定(直到找到新标题)。 分隔线本身不会为已解析的表格新增一行。

Djot
| fruit | price | |--------|------:| | apple | 4 | | banana | 10 |
HTML
<table> <tr> <th>fruit</th> <th style="text-align: right;">price</th> </tr> <tr> <td>apple</td> <td style="text-align: right;">4</td> </tr> <tr> <td>banana</td> <td style="text-align: right;">10</td> </tr> </table>

列对齐由分隔线按以下方式确定:

  • 如果「-」行以「:」开头且不以 1 结尾,则该列左对齐
  • 如果以「:」结尾且不以 1 开头,则该列右对齐
  • 如果它以「:」开头和结尾,则该列居中对齐
  • 如果它既不以「:」开头也不以「:」结尾,则该列默认对齐
Djot
| a | b | |----|:--:| | 1 | 2 | |:---|---:| | 3 | 4 |
HTML
<table> <tr> <th>a</th> <th style="text-align: center;">b</th> </tr> <tr> <th style="text-align: left;">1</th> <th style="text-align: right;">2</th> </tr> <tr> <td style="text-align: left;">3</td> <td style="text-align: right;">4</td> </tr> </table>

这里带有 a 和 b 的行是标题,左列默认对齐,右列居中对齐。 下一个实际行,包含 1 和 2,也是一个标题,其中左列左对齐,右列右对齐。 此对齐方式也适用于随后的行,包含 3 和 4。

表格不需要有标题。只需省略任何分隔线,或者(如果您需要指定列对齐方式)以分隔线开头:

Djot
|:--|---:| | x | 2 |
HTML
<table> <tr> <td style="text-align: left;">x</td> <td style="text-align: right;">2</td> </tr> </table>

表格单元格的内容被解析为内联,因为其中不可能有块级内容。

Djot 足够聪明,可以逐字识别反斜杠转义的管道和管道。这些不算作单元格分隔符:

Djot
| just two \| `|` | cells in this table |
HTML
<table> <tr> <td>just two | <code>|</code></td> <td>cells in this table</td> </tr> </table>

参考链接定义

参考链接定义由方括号中的参考标签、冒号、空格(或换行符)和 URL 组成。 URL 可以分成多行(在这种情况下,这些行将被连接起来,并删除任何前导或尾随空格)。 URL 的任何块都不能包含内部空格。

Djot
[google]: https://google.com [product page]: http://example.com?item=983459873087120394870128370 0981234098123048172304
HTML

这没有对引用标签进行大小写规范化,定义为 [link] 的引用不能用作 [Link],而在 Markdown 中可以。

参考定义的属性被转移到链接:

Djot
{title=foo} [ref]: /url [ref][]
HTML
<p><a href="/url" title="foo">ref</a></p>

生成一个带有文本「ref」、URL /url 和标题「foo」的链接。 但是,如果在链接和引用定义上都定义了相同的属性,则链接上的属性会覆盖引用定义上的属性。

Djot
{title=foo} [ref]: /url [ref][]{title=bar}
HTML
<p><a href="/url" title="bar">ref</a></p>

在这里我们得到一个标题为「bar」的链接。

脚注

脚注由脚注引用和冒号组成,然后是注释的内容,会缩进到引用开始所在列之外的任何列。 注释的内容被解析为块级内容。

Djot
Here's the reference.[^foo] [^foo]: This is a note with two paragraphs. Second paragraph. > a block quote in the note.
HTML
<p>Here’s the reference.<a id="fnref1" href="#fn1" role="doc-noteref"><sup>1</sup></a></p>
<hr> <ol> <li id="fn1"> <p>This is a note with two paragraphs.</p>

Second paragraph.</p> <blockquote> <p>a block quote in the note.</p> </blockquote> <p><a href="#fnref1" role="doc-backlink">↩︎︎</a></p> </li> </ol> </section>

与块引号和列表项一样,段落中的后续行可以「懒惰地」省略缩进:

Djot
Here's the reference.[^foo] [^foo]: This is a note with two paragraphs. Second paragraph must be indented, at least in the first line.
HTML
<p>Here’s the reference.<a id="fnref1" href="#fn1" role="doc-noteref"><sup>1</sup></a></p> <section role="doc-endnotes"> <hr> <ol> <li id="fn1"> <p>This is a note with two paragraphs.</p> <p>Second paragraph must be indented, at least in the first line.<a href="#fnref1" role="doc-backlink">↩︎︎</a></p> </li> </ol> </section>

块级属性

要将属性附加到块级元素,请将属性放在块之前的行中。 块属性与内联属性具有相同的语法,但它们必须放在一行中。 可以使用重复的属性说明符,属性可以叠加。

Djot
{#water} {.important .large} Don't forget to turn off the water! {source="Iliad"} > Sing, muse, of the wrath of Achilles
HTML
<p class="important large" id="water">Don’t forget to turn off the water!</p> <blockquote source="Iliad"> <p>Sing, muse, of the wrath of Achilles</p> </blockquote>

标题链接

标识符会自动添加到没有附加明确标识符的任何标题中。 标识符是通过获取标题的文本内容,删除标点符号(「_」和「-」除外),将空格替换为「-」,如果需要专一性,则可添加数字后缀。

Djot
## My heading + auto-identifier
HTML
<section id="My-heading-auto-identifier"> <h2>My heading + auto-identifier</h2> </section>

但是,在大多数情况下,您不需要知道分配给标题的标识符,因为会为所有标题创建隐式链接引用。 因此,要链接到同一文档中标题为“简介”的标题,可以简单地使用参考链接:

Djot
See the [Epilogue][]. * * * * # Epilogue
HTML
<p>See the <a href="#Epilogue">Epilogue</a>.</p> <hr> <section id="Epilogue"> <h1>Epilogue</h1> </section>

嵌套限制

符合规范的实现可以对嵌套施加合理的限制,以避免堆栈溢出或其他问题。 很少有现实文档需要超过 12 层嵌套,因此 512 层的限制应该是绝对安全的。

给 Markdown 用户的快速开始

Djot 和 Markdown 非常相似,以下是你从 Markdown 过渡到 Djot 时要注意的一些重要差异。(译者注:你可以使用在线体验来了解差异!)

空行

在 Djot 中,你需要在块级元素的周围留空一行,如下:

Markdown
This is some text. ## My next heading
Djot
This is some text. ## My next heading

否则块级元素会被显示成一般的文字。另一个用代码块的例子:

Markdown
This is some text. ``` lua local foo = bar.baz or false ```
Djot
This is some text. ``` lua local foo = bar.baz or false ```

引用块(即使你要嵌套引用块也必须空一行!)、下划线等也都属于块级元素。

列表

一个特别的地方在于:列表前你也需要一个空行,即便它是一个子项。

Markdown
- one - two - three
Djot
- one - two - three

标题

在 Djot 中没有 Setext 样式的标题写法(带下划线),只有 ATX (前面带「#」)的样式。

标题内容可以延伸到多行,并且前面可以没有「#」(这是标题后面必须留空一行的原因!)。

Markdown
貌似不支持多行标题?
Djot
## This is a single ## level-2 heading ### This is a single level-3 heading

代码块

没有缩进的代码块,只有「```」。

Markdown
前面有四个空格,我就成为了一个代码块咯~ ``` 不过这样当然也是可以的~ ```
Djot
``` 你只能这样用。 ```

引用

引用的「>」后面需要一个空格,再接上内容。

强调

使用单个「_」包住内容表示斜体,使用单个「*」包住内容表示粗体

Markdown
*Italic* / _Italic_ **Bold** / __Bold__ ***Italic Bold*** / ___Italic Bold___
Djot
_Italic_ *Bold* _*Italic Bold*_ / *_Italic Bold_*

链接

没有为链接添加标题的特殊语法,你需要使用通用属性。

Markdown
[link](http://example.com "Go to my website")
Djot
[link](http://example.com){title="Go to my website"}

强制换行符

在 Djot 中,你需要在换行符之前使用反斜杠,而不是敲两下空白键。

Markdown
A new line.
Djot
A new\ line.

插入原始 HTML 代码

在 Djot 中,你需要将其标记为原始 HTML,而不是把 Djot 文件当 HTML 文件写。

Markdown
<h1>Hello World</h1>
Djot
单行 `<h1>Hello World</h1>`{=html} 多行 ``` =html <h1>Hello World</h1> ```

表格

和许多 Markdown 实现(如:CommonMark)不同,表格在每行开头和结尾都需要一个「|」字符。

Markdown(第三方实现)
a|b -|- 1|2
Djot
| a | b | | - | - | | 1 | 2 |

在这里,我们只关注可能影响到 Markdown 用户的语法。如果你牢记了这些,你应该可以使用 Djot 而不需查看更多文档。

但是,我们还没有讨论到你可以在 Djot 中做到而不是在 Markdown 中做到的任何事情。

不过,这应足以让你开始你的 Djot 之旅!