项目基础
概述
Quarto 项目是提供以下功能的目录:
通过单个命令渲染目录中的所有或部分文件(例如
quarto render myproject
)。在多个文档之间共享 YAML 配置。
将输出工件重定向到另一个目录的能力。
冻结渲染输出的能力(即除非文档已更改,否则不重新执行文档)。
此外,项目可以具有引入额外行为的特殊“类型”(例如 网站 或 书籍)。
如果你刚刚开始使用 Quarto 或没有使用过 markdown 发布系统的经验,你可能现在想跳过学习项目的内容。一旦你熟悉了基础知识,再回到本文了解更多信息。
创建项目
使用 quarto create project
命令创建一个新项目,使用提示。
Terminal
quarto create project
Output
? Type
❯ default
website
blog
manuscript
book
confluence
或者将类型和项目名称定义为参数。
Terminal
quarto create project <type> <name>
共享元数据
Quarto 项目最重要的功能之一是能够在多个文档之间共享 YAML 元数据选项。共享元数据可以在项目和目录级别定义。
项目元数据
所有 Quarto 项目都包含一个 _quarto.yml
配置文件。在项目目录中渲染的任何文档都会自动继承在项目级别定义的元数据。以下是 _quarto.yml
文件可能的样子:
_quarto.yml
project:
output-dir: _output
toc: true
number-sections: true
bibliography: references.bib
format:
html:
css: styles.css
html-math-method: katex
pdf:
documentclass: report
margin-left: 30mm
margin-right: 30mm
请注意,项目文件包含适用于所有格式的全局选项(例如 toc
和 bibliography
)以及特定于格式的选项。
你可以根据不同的项目配置文件进一步自定义项目元数据(例如开发与生产或创建书籍或网站的多个版本)。有关更多详细信息,请参阅 项目配置文件 文章。
目录元数据
你还可以定义仅应由目录中的文件继承的元数据。为此,请在要共享元数据的目录中添加一个 _metadata.yml
文件。例如,以下 _metadata.yml
为一系列演示文稿设置了默认的 Revealjs 选项,并禁用了目录中文档的 search
:
_metadata.yml
format:
revealjs:
menu: false
progress: false
search: false
这些文件中提供的选项使用与 _quarto.yml
相同的模式,并与你在 _quarto.yml
中已经提供的任何选项合并。
元数据合并
在 _quarto.yml
、_metadata.yml
和文档级 YAML 选项中定义的元数据会合并在一起。文档级选项优先,其次是目录选项,最后是项目级选项:
文件 | 角色 |
---|---|
_quarto.yml |
项目级默认选项 |
dir/_metadata.yml |
目录级默认选项(覆盖项目) |
dir/document.qmd |
文档选项(覆盖目录和项目) |
请注意,当元数据合并时,对象和数组会合并而不是简单地相互覆盖。例如,以下是影响输出格式和参考文献的项目和目录级选项如何合并:
_quarto.yml
|
dir/_metadata.yml
|
merged
|
元数据合并的唯一例外是 format
。 如果文档级别的 YAML 定义了格式,则必须定义要渲染的完整格式列表。
元数据包含
您可能会发现将元数据拆分为多个文件很方便。您可以使用 metadata-files
选项来实现这一点。例如,在这里我们在 _quarto.yml
中包含了一个单独的 _website.yml
文件来设置一些网站选项:
_quarto.yml
project:
type: website
metadata-files:
- _website.yml
_website.yml
website:
navbar:
background: primary
left:
- href: index.qmd
text: Home
- about.qmd
metadata-files
中列出的文件与父文件以相同的方式合并,就像项目、目录和文档选项的合并方式一样。这意味着包含的文件既可以提供新选项,也可以与现有选项结合。
本地配置
有时定义不提交到版本控制的本地项目配置更改很有用。您可以通过创建一个 _quarto.yml.local
配置文件来实现这一点。例如,在这里我们指定我们希望在本地运行时使用执行缓存:
_quarto.yml.local
execute:
cache: true
请注意,Quarto 会自动向 .gitignore
写入一个条目,以确保 .local
文件不会被提交(请注意,环境变量 也可以在类似的 .local
文件中定义)。
渲染项目
您可以逐个或一次性渲染项目中的文件(无论哪种情况,都将使用共享的项目元数据)。
要渲染项目中的所有文档,只需在项目目录中使用 quarto render
(或使用命令行参数指定特定目录):
Terminal
# 在当前目录中渲染项目
quarto render
# 在 'myproject' 中渲染项目
quarto render myproject
您还可以仅渲染项目子目录中的文件。例如,如果当前目录包含一个具有子目录 tutorials
、how-to
和 articles
的项目,您可以按如下方式仅渲染 articles
的内容:
Terminal
# 仅渲染 'articles' 子目录中的文档
quarto render articles
请注意,在渲染项目时,您传递给 quarto render
的命令行参数将用于项目中的每个文件。例如,此命令将仅渲染 PDF 格式:
Terminal
quarto render --to pdf
quarto render myproject --to pdf
如果您从 R 中使用 Quarto,您还可以使用 quarto R 包从 R 控制台渲染项目。
library(quarto)
quarto_render()
渲染目标
默认情况下,项目目录中所有有效的 Quarto 输入文件(.qmd、.ipynb、.md、.Rmd)都将被渲染,以下情况除外:
文件或目录前缀为
.
(隐藏文件)文件或目录前缀为
_
(通常用于非顶级文件,例如在其他文件中包含的文件)文件名为
README.md
或README.qmd
(这些文件通常不是实际的渲染目标,而是用于版本控制 Web UI 中查看的源代码信息内容)。
如果你不想渲染项目中的所有目标文档,或者希望更精确地控制渲染顺序,可以在项目元数据中添加 project: render: [files]
条目。例如:
project:
render:
- section1.qmd
- section2.qmd
请注意,在定义 render
列表时可以使用通配符。例如:
project:
render:
- section*.qmd
你还可以在 render
列表中使用前缀 !
来忽略某些文件或目录。请注意,在这种情况下,你需要首先指定你确实想要渲染的所有内容。例如:
project:
render:
- "*.qmd"
- "!ignored.qmd"
- "!ignored-dir/"
如果你的输出文件名需要以 .
或 _
开头(例如 Hugo 用户的 _index.md
),你必须在不带前缀的情况下命名 Quarto 输入文件(例如 index.qmd
),并在 YAML 中添加显式的 output-file
参数,例如
---
output-file: _index.md
---
了解更多
这些文章提供了有关 Quarto 项目更高级功能的更多文档: