我是一个基于XML的Docbook标记语言的快乐用户。对我来说,它是一个精确、明确和详细的系统,使我能够在我写的东西中拥有上下文和特定领域的元数据。最重要的是,它可以被转换(这是XML用户在将XML转换成另一种格式时的称呼)为几乎任何格式,包括HTML、EPUB、PDF的FO、纯文本等等。不过,强大的功能带来了大量的打字工作,有时Docbook让人觉得它是多余的。幸运的是,有Asciidoc,这是一个编写纯文本的系统,与Markdown的无标记感觉相同,但它可以转换为Docbook,以利用其精确性和灵活性。
Asciidoc规则
和Markdown一样,Asciidoc的目标之一是你不需要真正学习它。相反,它的目标是直观和自然。如果你曾经在纯文本文档中添加了一点样式以提高可读性,你很可能已经在不知不觉中写出了有效的Asciidoc片段。例如,如果你习惯于用空行来分隔段落,那么你就写了相当于HTML<p>
或Docbook<para>
的标签。这似乎很明显,但在学术界,一般不会用空行来分隔段落,所以即使这个简单的惯例在技术上也是标记。
文本样式
文本样式包括粗体、斜体和代码字体等基本内容。大多数符号都是相对直观的,但斜体字可能是个例外。
粗体
_斜体
_粗体和斜体_
`Monospace or code`
代码
代码用反斜线标记,或用明确的代码块声明。
`Monospace or code`
[source,python]
----
print('a whole code block')
----
标题
标题用前面的等号标记 (=
)。
=标题1 (<h1>
)
==标题2 (<h2>
)
===标题3 (<h3>
)
==== 标题4 (<h4>
)
===== Heading 5 (<h5>
)
====== Heading 6 (<h6>
)
链接
超链接的好处是先有链接,然后是用来将链接 "伪装 "成文字的词或短语。
这是一个example.com[超链接],通向example.com网站。
我觉得这不像Markdown的链接符号那么优雅,但它更灵活。例如,你可以在Asciidoc链接中添加属性。
这是一个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
,而对于Asciidoc来说,使用扩展名.adoc
是一种惯例,但这并不是必须的。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
谁应该使用Asciidoc
Asciidoc对于技术作家和那些对如何组织和解析文本有精确要求的作家来说是非常好的。它是一种清晰的、严格定义的标记格式,消除了竞争性Markdown格式的混乱,而且它可以转换为所有主要的格式。Asciidoc诚然比Markdown更啰嗦,也可能没有Markdown那么直观,但它仍然只是纯文本,所以你可以在任何东西上进行创作,而且Asciidoctor使处理变得简单。下次你为任何目的写文件时,考虑试试Asciidoc。