/

引入 vs. 子文档

Quarkdown 提供了两种从其他文件引入内容的方式:引入(inclusion)**与子文档化(subdocumenting)**。这两种方式在工作机制与最适合的场景上有显著不同。

引入

通过 .include.includeall 进行引入 ,会对其他 Quarkdown 源文件进行求值。

该函数返回求值结果,使其看起来就像目标文件的内容被直接插入到了函数调用所在的位置。这是一次不透明操作,因为输出中不包含原始文件的任何痕迹。

示例 1

main.qd

Hello 1

.include {other.qd}

other.qd

Hello 2

index.html:

<p>Hello 1</p>
<p>Hello 2</p>

上下文

主文件与被引入文件之间共享执行上下文。

在主文件中声明的任何自定义项、函数、变量和其他信息,在被引入文件中都可用,反之亦然

你可以通过 sandbox 参数选择性地限制这一行为。

循环引用

循环或递归的引入是不允许的,并会导致错误。

子文档

子文档 是相互独立且可被引用的源文件。

子文档会被渲染为独立的资源,Quarkdown 会以图结构的形式存储指向它们的链接。

示例 2

main.qd

Hello 1

[Other](other.qd)

other.qd

Hello 2

index.html:

<p>Hello 1</p>
<p><a href="./other">Other</a></p>

other.html:

<p>Hello 2</p>

上下文

在求值子文档时,上下文会从引用方继承

在引用方中做出的任何自定义和声明,在子文档中都可用,但反之则不行。

循环引用

每个子文档只会被求值一次,因此允许循环与递归引用。