我是基于 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[hyperlink],它指向 example.com 站点。
我觉得这不如 Markdown 的链接表示法那么优雅,但它的灵活性要高得多。例如,您可以在 AsciiDoc 链接中添加属性
这是一个 https://example.com[link,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 更冗长,可能也不那么直观,但它仍然只是纯文本,因此您可以在任何设备上创作,并且 Asciidoctor 使处理变得容易。下次您为任何目的编写文档时,请考虑尝试 AsciiDoc。
7 条评论