你用纯文本写作。你在纯文本中编码。那么,用纯文本创建图表怎么样?现在你可以使用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。换句话说:

你的第一个纯文本图表
在文档中添加图表的最简单方法是使用图表块。只需使用合适的语法名称(ditaa
、graphviz
或 plantuml
)作为块名称(又称样式),在文件中添加一个列表块即可。
[ditaa]
----
+-------------+
| Asciidoctor |-------+
| Diagram | |
+-------------+ | PNG out
^ |
| ditaa in |
| v
+--------+ +--------+----+ /----------------\
| | --+ Asciidoctor +--> | |
| Text | +-------------+ |Beautiful output|
|Document| | !magic! | | |
| {d}| | | | |
+---+----+ +-------------+ \----------------/
: ^
| Lots of work |
+-----------------------------------+
----
当Asciidoctor Diagram扩展处理这种类型的块时,它将读取块的正文,将其传递给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
}
----
在魔法生效之后,你将会看到:

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::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
脚本后,去查看它为你制作的酷炫图表吧!