今天开始着手更新文档,使整个项目看起来更加的正规。说程序员最讨厌两件事:一是别人的代码历来不写注释;二是为本身的代码写注释。这凸显了注释在团队开发的重要性。而系统使用文档则能够为客户使用系统、测试人测试系统提供指导,也能够防止一些扯皮的事件发生。git
示例代码:https://github.com/mengyunzhi/asciidoctor-sub-file-image-show程序员
写文档有两个经常使用的语言:markdown
以及AsciiDoc
,看到一些大牛们的readme都是拿AsciiDoc
写的,索性也将团队中的项目拿AsciiDoc
来写。咱们说绝大多数的功能都是很是好的,好比能够在一个文件中include
别一个文件。但include
的过程当中发生了图片没法正常显示的错误。github
这主要是因为图片文件夹的绝对位置发生了变化,举例说明:markdown
. ├── readme.adoc ├── sub1 │ ├── assets1 │ │ └── e75b18b9.png │ ├── readme.adoc │ └── sub11 │ ├── assets11 │ │ └── e75b18b9.png │ └── readme.adoc └── sub2 ├── assets2 │ └── e75b18b9.png ├── readme.adoc └── sub21 ├── assets21 │ └── e75b18b9.png └── readme.adoc
好比新建如上文档目录,首页为readme.adoc。测试
sub1/readme.adocspa
:imagesdir: assets1/ ★ 图片测试 image::e75b18b9.png[列表页]
如上,直接浏览readme.adoc中效果,图片可以正常显示。3d
reamdme.adoccode
= 子文件夹1 include::sub1/readme.adoc[] ➊ == 子文件夹11 include::sub1/sub11/readme.adoc[] = 子文件夹2 include::sub2/readme.adoc[]
如上:在父文件中查看,图片却没法正常显示。blog
分析缘由:事件
sub1/readme.adoc
时,图片文件夹★值为assets1
。相对于正在浏览的sub1/readme.adoc
的所在目录sub
,存在文件夹assets1
,图片正确显示。readme.adoc
时,readme.adoc
引入了sub1/readme.adoc
,当前图片文件夹★值为assets1
。正在浏览的readme.adoc的根目录仅有sub1
,sub2
两个子文件夹,并不存在asserts1
文件夹,图片不能正确显示。
在实际的生产环境中,文件间的引用比上面的例子还要复杂。好比上图示在根文档中同时引入一级文档及二级文档,在根文档中引用一级文档再由一级文档中引用二级文档。
再好比还能够由根文档先引入二级文档,再由二级文档引用一级文档。
整个问题比较绕,解决的思路也比较烧脑,在此直接给出解决方案:首先定位一下文档的根目录,并在根目录文件头中加入如下代码:
:rootpath: ./
而后在各级目录的文件中加入如下代码,好比于sub1/readme.adoc中代码整理以下:
:path: sub1/ ➊ :imagesdir: assets1/ ➋ ifdef::rootpath[] :imagesdir: {rootpath}{path}{imagesdir} endif::rootpath[] ifndef::rootpath[] :rootpath: ./../ ➌ endif::rootpath[] 图片测试 image::e75b18b9.png[列表页]
要点以下:
按上述规则对sub1/sub11/readme.adoc整理以下:
:path: sub1/sub11/ :imagesdir: assets11/ ifdef::rootpath[] :imagesdir: {rootpath}{path}{imagesdir} endif::rootpath[] ifndef::rootpath[] :rootpath: ./../../ endif::rootpath[] 图片测试 image::e75b18b9.png[列表页]
sub二、sub21的代码整理规则相同。
如此以来,不管是在入口文档直接浏览,还在一级文档中浏览、或是在二级文档中直接浏览,均可以正常的获取到图片。不只如此,该写法还支持由子目录文档向上引用父目录文档。