你用纯文本写作。你在纯文本中编码。那么,用纯文本创建图表怎么样?现在你可以使用https://github.com/asciidoctor/asciidoctor-diagram[Asciidoctor Diagram]来实现了!

引言

Asciidoctor是一个在编写技术文档时非常棒的工具。它让你可以花更多的时间专注于内容创作,而不是与所见即所得(WYSIWYG)工具挣扎。

还有一项任务会分散你的注意力,并且比预期的更困难,那就是将技术图表集成到你的文档中。这包括启动一个UML或绘图工具,推动屏幕上的像素来绘制图表,将结果导出为网络友好的图像格式,并从源文档中链接到它们。当你使用图表时,AsciiDoc在视觉一致性、协作简便性等方面提供的许多好处都不可用。

今天的改变都源于Asciidoctor Diagram扩展的宣布。https://github.com/asciidoctor/asciidoctor-diagram[Asciidoctor Diagram] 将现有的纯文本语法图表工具集成到Asciidoctor处理中。这意味着你可以直接将图表的源代码嵌入到你的文档中!

Asciidoctor Diagram的第一个版本支持以下图表语言:

这些“轻量级图表语言”之于图形图表,正如AsciiDoc之于HTML。换句话说:

语言类比图

你的第一个纯文本图表

在文档中添加图表的最简单方法是使用图表块。只需使用合适的语法名称(ditaagraphvizplantuml)作为块名称(又称样式),在文件中添加一个列表块即可。

[ditaa]
----
                   +-------------+
                   | Asciidoctor |-------+
                   |  Diagram    |       |
                   +-------------+       | PNG out
                       ^                 |
                       | ditaa in        |
                       |                 v
 +--------+   +--------+----+    /----------------\
 |        | --+ Asciidoctor +--> |                |
 |  Text  |   +-------------+    |Beautiful output|
 |Document|   |   !magic!   |    |                |
 |     {d}|   |             |    |                |
 +---+----+   +-------------+    \----------------/
     :                                   ^
     |          Lots of work             |
     +-----------------------------------+
----

当Asciidoctor Diagram扩展处理这种类型的块时,它将读取块的正文,将其传递给ditaa库,将生成的图像写入磁盘,并生成一个图像块。以下是它在渲染文档中的显示方式:

样本 ditaa 图表

魔法!

生成这些图像中的一个相当快,但是如果你开始在文档中添加大量的图表,处理时间可能会开始累积。Asciidoctor Diagram通过在 *.cache 文件中跟踪图表元数据来优化处理,并且只有在图表源代码被修改后才会重新生成图像。这使得文档的增量渲染过程保持快速。

控制输出

默认情况下,Asciidoctor Diagram根据图表源码自动生成PNG图片,并自动计算输出文件名。可以使用+target+和+format+属性来重写这种行为。你可以将这些属性作为第一和第二位置属性指定,也可以明确命名这些属性。以下是如何生成一个具有特定名称的SVG文件的Graphviz图表。

[graphviz, dot-example, svg]
----
digraph g {
    a -> b
    b -> c
    c -> d
    d -> a
}
----

在魔法生效之后,你将会看到:

示例 Graphviz 图表
Asciidoctor Diagram 集成了 ditaa 和 PlantUML 库,并将使用它们来生成图表。为了使用 Graphviz 生成图表,您必须单独安装它(意味着 dot 命令必须在您的 PATH 上可用)。

Asciidoctor Diagram将图表块转换为图像块,并应用任何附加属性。这意味着您可以使用正常的Asciidoctor工具来控制生成图像的定位。同样的方式也可以分配块标题和ID。

[[main-classes]]
.The PlantUML block extension class
[plantuml, sample-plantuml-diagram, alt="Class diagram", width=135, height=118]
----
class BlockProcessor
class PlantUmlBlock
BlockProcessor <|-- PlantUmlBlock
----

这里展示了什么内容:

类图
'''PlantUML块扩展类

包含外部图表

将源代码嵌入到文档中以生成图表可能并非总是理想的选择。也可以使用块宏语法来处理外部图表。这与你通常在文档中包含图片的方式非常相似。

plantuml::classes.txt[format=svg, alt="类图", width=300, height=200]

启用扩展功能

Asciidoctor 0.1.4 还不支持通过命令行启用扩展。这是 Asciidoctor 1.5.0 中的一个新功能。在此之前,启用扩展的最简单方法是使用一个简短的包装脚本。以下脚本,asciidoctor-diagram,加载并注册 Asciidoctor Diagram 扩展,然后以与 asciidoctor 命令相同的方式调用 Asciidoctor。

asciidoctor-diagram 启动脚本
#!/usr/bin/env ruby

require 'asciidoctor' (1)
require 'asciidoctor/cli/options'
require 'asciidoctor/cli/invoker'

require 'asciidoctor-diagram' (2)

invoker = Asciidoctor::Cli::Invoker.new ARGV (3)
invoker.invoke!
exit invoker.code
1 加载Asciidoctor
2 加载并注册Asciidoctor Diagram扩展。
3 调用Asciidoctor命令行界面

asciidoctor-diagram 脚本放到你的PATH环境变量中,使其可执行,并在使用 asciidoctor 命令的地方替换为该脚本。

$ asciidoctor-diagram my-doc-with-cool-diagrams.adoc

在文档上运行 asciidoctor-diagram 脚本后,去查看它为你制作的酷炫图表吧!

去玩吧!

现在是时候去玩转Asciidoctor Diagram了。探索你可以用它做什么以及如何改进它。为了帮你入门,可以查看Asciidoctor Diagram仓库中的https://github.com/asciidoctor/asciidoctor-diagram/blob/master/examples/features.adoc[这些示例]。我们期待在Asciidoctor 讨论列表或Asciidoctor Diagram 问题跟踪器上听到你的声音。

我们可以将普通文本变成生动的图表和文档!