我是基于 XML 的 Docbook 标记语言的忠实用户。对我来说,它是一个精确、明确和详细的系统,允许我在我的写作中拥有上下文和特定领域的元数据。但最棒的是,它可以被转换(XML 用户称之为 XML 被转换为另一种格式)为几乎任何格式,包括 HTML、EPUB、用于 PDF 的 FO、纯文本等等。然而,强大的功能也带来大量的输入工作,有时 Docbook 感觉有点多余。幸运的是,有 AsciiDoc,一个用纯文本编写的系统,具有与 Markdown 相同的无标记感觉,但可以转换为 Docbook,从而利用其精确性和灵活性。
AsciiDoc 规则
与 Markdown 类似,AsciiDoc 的目标之一是您不必真正学习它。相反,它旨在直观和自然。如果您曾经为纯文本文档添加一些样式以提高可读性,那么您很可能已经编写了有效的 AsciiDoc 代码,而没有意识到这一点。例如,如果您习惯用空行分隔段落,那么您已经编写了等效于 HTML <p>
或 Docbook <para>
标记的代码。这似乎很明显,但即使是这个简单的约定在学术界通常也不会这样做,所以即使是这个简单的约定在技术上也是标记。
这是最常用的语法。
文本样式
文本样式包括粗体、斜体和代码字体等基本样式。大多数符号都相对直观,斜体可能除外。
*粗体*
_斜体_
*_粗体和斜体_*
`等宽字体或代码`
代码
代码用反引号标记,或者通过显式声明代码块来标记。
`等宽字体或代码`
[source,python]
----
print('a whole code block')
----
标题
标题用前导等号 (=
) 标记
= 标题 1 (<h1>
)
== 标题 2 (<h2>
)
=== 标题 3 (<h3>
)
==== 标题 4 (<h4>
)
===== 标题 5 (<h5>
)
====== 标题 6 (<h6>
)
链接
超链接首先是链接,然后是用于将链接“伪装”为文本的单词或短语。
这是一个 http://example.com[超链接],指向 example.com 站点。
我不觉得这像 Markdown 的链接符号那样优雅,但它更灵活。例如,您可以在 AsciiDoc 链接中添加属性
这是一个 https://example.com[链接,role=external,window=_blank],设置了 target="_blank"
属性。
更多内容
AsciiDoc 还具有内部链接,因此您可以从一个部分链接到另一部分,文档标题的标准,自动目录生成,以及在另一个文档中包含其他文档的能力,等等。
但最重要的是,AsciiDoc 实际上是标准化的。并非所有人都知道,术语“Markdown”并不指一种标记语言。不同的组织和团体经常自定义和更改 Markdown 以供自己使用,因此当您使用 Markdown 时,您确实应该验证您要使用哪个 Markdown。您可能从一个使用 Markdown 的网站学到的许多约定并不能延续到另一个使用 Markdown 的网站。基本上没有 Markdown 的标准,这导致了这样的混乱,以至于 Commonmark.org 项目已经成立,试图组装一个标准化的定义。
AsciiDoc 从一开始就设计了一个标准定义,因此声称解析 AsciiDoc 的工具或网站实际上确实解析了所有有效的 AsciiDoc,因为只有一个有效的 AsciiDoc。
AsciiDoc 到任何格式
用像 AsciiDoc 这样的轻量级标记语言编写的目的在于确保文本被解析时的可预测性和一致性。您希望一个人编写一个脚本,或者运行其他人编写的应用程序,以便能够将您的纯文本转换为最适合他们的格式。有时是 HTML(顺便说一句,Markdown 的原生输出格式,也是其自身语法中缺少某些内容时的后备语言。)其他时候是 EPUB,或用于打印的 PDF,Docbook,LibreOffice 文档或任何数量的可能输出格式。
有几种工具可以帮助您将 AsciiDoc 转换为另一种格式。一个流行的命令是 Asciidoctor,您可以使用您的软件包管理器安装它。例如,在 Fedora、CentOS 或 RHEL 上
$ sudo dnf install asciidoctor
在基于 Debian 的系统上
$ sudo apt install asciidoctor
或者,您可以在任何带有 Ruby 的操作系统上安装它
$ gem install asciidoctor
这是一个简单的 AsciiDoc 文档示例,您可以使用任何 文本编辑器 甚至文字处理器(如 LibreOffice)创建它,只要您将文件另存为纯文本即可。大多数应用程序都希望纯文本文档使用扩展名 .txt
,虽然使用扩展名 .adoc
作为 AsciiDoc 是一种惯例,但这不是必须的。Asciidoctor 不需要任何特殊扩展名。
= This is my example document
It's not written in _Markdown_, nor _reStructured Text_.
This is *AsciiDoc*.
It can be transformed into nearly any format using the tool `Asciidoctor` and other similar parsers.
Try it for yourself!
要将 AsciiDoc 文档转换为 HTML,请运行 asciidoctor
$ asciidoctor example.adoc
默认情况下,文件 example.adoc
被转换为 HTML5,但您可以使用不同的后端来访问更多格式。
从 AsciiDoc 到 XML
我最喜欢的是 Docbook 后端,因为它将我的 AsciiDoc 转换为 Docbook XML,允许我使用我现有的 Docbook 工具链(自定义 Makefiles,Apache FOP,xsltproc
,xmlto
等)来完成我的工作
$ asciidoctor --backend docbook5 example.adoc
这将输出 Docbook XML。最后两个内置后端是 xhtml5
和 manpage
。
从 AsciiDoc 到 EPUB
如果您想将您的写作变成电子书,您可以安装 EPUB3 后端
$ gem install asciidoctor-epub3
将您的 AsciiDoc 转换为 EPUB
$ asciidoctor-epub3 example.adoc
从 AsciiDoc 到 PDF
您也可以将 AsciiDoc 直接转换为 PDF
$ gem install asciidoctor-pdf
$ asciidoctor-pdf example.adoc

(Seth Kenlon, CC BY-SA 4.0)
谁应该使用 AsciiDoc
AsciiDoc 非常适合技术作家和对文本的组织和解析方式有精确要求的作家。它是一种清晰且严格定义的标记格式,消除了竞争性 Markdown 格式的混乱,并可以转换为所有主要格式。不可否认,AsciiDoc 比 Markdown 更冗长,可能也不如 Markdown 直观,但它仍然只是纯文本,因此您可以在任何内容上进行创作,并且 Asciidoctor 使处理变得容易。下次您出于任何目的编写文档时,请考虑尝试 AsciiDoc。
7 条评论