The .include {file} {sandbox?} docs ↗ function loads and evaluates an external Quarkdown source file.
The parameter accepts a string that represents the path to the target file, which can be relative to the main source file’s location or absolute.
To include external libraries, refer to Importing external libraries.
file.qd### Hello Quarkdown This is external content.
main.qd.include {file.qd}
This is external content.
Circular dependency results in an error.
Do not confuse inclusion with subdocuments. See Inclusion vs. subdocuments for a comparison.
A clean approach with typesetting systems is having a main file that gathers all the different subfiles together. The .includeall function, which takes an Iterable of paths, serves as a convenient shorthand for repeated .include calls.
The following snippet is from Mock’s main.qd file:
.includeall
- setup.qd
- headings.qd
- paragraphs.qd
- lists.qd
- images.qd
- tables.qd
- code.qd
- textformatting.qd
- colorpreview.qd
- quotes.qd
- boxes.qd
- math.qd
- footnotes.qd
- mermaid.qd
- collapsibles.qd
- errors.qd
- icons.qd
- separators.qd
- alignment.qd
- stacks.qd
- crossreferences.qd
- bibliography.qd
- localization.qdYou can also combine the function with .listfiles to automatically include all files in a directory:
.includeall {.listfiles {somedirectory} sortby:{name}}The .include function’s sandbox parameter lets you control how much isolation the included file has from the main file. The included file always inherits the context of the main file, but you can optionally allow changes in the included file to propagate back.
For these examples, consider the following files:
file.qd.docname {New name} .function {greet} name: Hello, **.name**!
main.qd.docname {My document} .include {file.qd} sandbox:{<value>} 1. .docname 2. .greet {John}
Here are the available options, in ascending order of isolation:
share (default)Both contexts are synchronized bidirectionally. Any customization, function, variable, and other information declared in the included file will also be available in the main file, and vice versa.
Output:
- New name
- Hello, John!
scopeSimilar to share, but function and variable declarations do not propagate back to the main file.
This is the same behavior used in nested lambda scopes, such as in .function and .foreach.
Output:
- New name
- Compile error:
.greetis not defined.
subdocumentThe included file is completely isolated from the main file. Any changes, including metadata and layout options, do not propagate back.
This is the same behavior as subdocuments.
Output:
- My document
- Compile error:
.greetis not defined.
A common use case is putting all setup function calls in a separate file. See the Document setup section of this wiki for all available options.
setup.qd.docname {My document} .docauthor {iamgio} .doctype {slides} .doclang {English} .theme {darko} layout:{minimal} .footer ...
main.qd.include {setup.qd} # My cool document ...