Quarto 基础
1 许可
Quarto 是一个完全免费且开源的排版与数据科学出版系统, 核心工具 Quarto CLI 采用 MIT许可, 政策非常宽松,核心逻辑可以总结为 :工具开源,内容归你
2 开始 Quarto
使用 Quarto 需要安装两个软件
3 Hello Quarto
Quarto 和 RStudio 都是 Posit 公司推出的产品
3.1 概述
下图左侧是一个扩展名为 .qmd 的 Quarto 文档, 右侧是它在 RStudio 中被渲染成 HTML 后的效果 :
按照下面步骤安装 RStudio 并打开范例 hello.qmd 完成第一个任务 :
3.2 渲染
在 RStudio 中点击 Render 按钮, 对文档进行渲染 :
3.3 文档编写
RStudio 提供 Visual可视化编辑器。一份完整 Quarto 文档由三部分组成:YAML头、Chunks代码块、Markdown文本 :
3.3.1 YAML 头
YAML 头 在文档开头使用前后三条短横线 --- 包裹 :
3.3.2 chunks 代码块
下面是绘制正弦函数的代码块 :
代码块还可以单独在 RStudio 中运行 :
3.3.3 Markdown文本
RStudio 提供可视化 Markdown 编辑器,入门阶段不用记忆太多语法
3.4 底层运行原理
当你点击 Render 按钮的时候, RStudio 自动按照下面流程执行 :
4 代码计算
Quarto 里面包含 代码块 并且每次渲染的时候这些代码会被相同的执行, 由此可以创建 完全可复现 的文档
4.1 输出控制
可以在 YAML头 中直接要求所有的代码块都不输出源码 :
如果你开启了Render on Save ,保存 .qmd 文档时会自动执行渲染 :
还可以设置保留 代码块标记符 一起输出 :
完整参数 : Knitr Cell Options
4.2 代码折叠
不想彻底隐藏代码时,可以开启 代码折叠 :
还可以对整个页面的代码折叠统一控制 :
4.3 图表
可以通过代码块参数优化图表外观、提升可读性与无障碍访问 :
正文还可以交叉引用图表 :
4.4 多图表
将两个图表并排显示,每个子图都有标题, 总图也有标题
图表宽度超过正常文本很大范围
子图、总图都进行了交叉引用
上面是利用 layout-ncol 选项来控制图表两列并排显示的, 更多布局请参考 Figure Layout 多图表的布局控制。 上面是利用 column 让图表横跨整个页面, 更多布局请参考 网页布局
4.5 数据框
可以使用 df-print 文档选项来控制数据框的默认打印输出形式。可用的选项包括 :
| 选项 | 说明 |
|---|---|
default |
使用数据框默认的 S3 方法 |
kable |
使用 knitr::kable() 函数生成的 Markdown 表格 |
tibble |
使用 tibble 包生成的纯文本表格 |
paged |
HTML 表格,支持行和列溢出时的分页功能(使用 rmarkmarkdown::paged_table() 实现) |
4.6 行内代码
下面是行内代码的一个最简单范例 ,更详细的语法参考 inline Code 专题 :
如果嵌入行内的表达式过于复杂, 建议像下面这样处理 :
4.7 缓存
当开启了 Render on Save 以后, 每次保存就重新渲染一次, 有些计算量比较大的可以缓存起来, 不要每次都重新渲染浪费时间。更深入的缓存主题 参考 :
5 排版
下面简单介绍在 RStudio 中使用 Visual模式 编辑 .qmd 文件。 主要内容包括 :
同一个源码, 渲染成多种输出格式
添加章节
编写公式
添加交叉引用
提示框 Callout
文档布局的简介
5.1 输出格式
Quarto 支持将 .qmd 文件渲染为多种输出格式, 默认的输出格式是 HTML
5.1.1 格式选择
下面使用 RStudio 创建一个 Quarto 文档, 并选择 html 的输出格式 :
文档输出的是 pdf 需要输入命令安装 TinyTeX 引擎(不支持中文), 更多关于 pdf 渲染问题可以参考 PDF Engines :
下面在 YAML 设置 代码添加行号 :
5.1.2 多种格式输出
下面范例在一个 .qmd文档 中,进行三种格式 HTML、pdf、docx 的输出,并为每种格式做出了很多不同的设置 :
注意 :
- 为了在浏览器中查看
.docx文档, 需要安装谷歌的插件Office Editing for Docs, Sheets & Slides - 每次点击
Render只能从下拉箭头里面选择输出其中一种, 下面有详细的介绍
5.2 多目标渲染
点击 Render 按钮, 渲染的是文档中第一个输出设置 :
如果需要一次构建多种输出, 需要安装包 install.packages("quarto") :
5.3 章节
5.4 公式
在 Visual 模式下使用 Insert Anything tool 向 Quarto 中插入公式 :
公式分为 行内公式 和 行间公式 :
输入 LaTeX 公式以后就被实时渲染出来, 更多公式请参阅 markdown equations :
5.5 参考文献
可以使用 Insert Anything tool 插入参考文献 :
可以直接在 from DOI 中搜索 10.1093/comjnl/27.2.97 得到一个引用 :
输出的 HTML 会把参考文献放在最后 :
还可以自己去控制 Reference 的标题 :
还可以自己修改 References 的标题,设置为不编号 .unnumbered :
参考文献 @ 的语法非常灵活, 支持前缀、后缀、定位符、正文引用, 详细参考 Citations
5.6 交叉引用
图表、数据框、公式、章节都可以编号, 设置交叉引用可以提高阅读速度。 需要设置这些功能块的 label 和 caption 选项, 其中 label 起到唯一标识符的作用。下面给公式设置一个链接 :
下面是设置好交叉引用以后的页面效果 :
更多交叉引用的语法和内容, 可以参考 Cross References
5.7 提示框 Callout
提示框用吸引力比较强的框包裹着一段文字,它是特殊的 div 标签。更多效果可以参考 Callouts :
5.8 文档布局
Quarto 文档的正文默认宽度大约 700 像素, 这个宽度是为了优化可读性, 正文区域两侧还会留有 边距区域(margin)。 Quarto 提供了几种方式,可以充分利用这些额外空间 :
还可以将参考文献、 脚注、 旁注 放置在边距区域。还可以为图表、表格 或其他内容定义自定义的列跨度。要了解更多细节,请参阅 网页布局
6 延申学习
下面是一些扩展内容, 这部分大部分要整合到 html 中 :
- 网站 Websites : 将一系列文档集合发布为一个网站。网站支持多种导航形式以及全文检索
- 博客 Blogs : 创建一个带有 “关于” 页面、灵活的文章列表、文章分类、RSS 订阅源以及拥有 20 多套主题的博客
- 书籍 Books : 创建印刷格式(PDF、MS Word)和在线格式(HTML、ePub)的书籍和手稿
- 交互性 Interactivity : 引入交互式组件,这部分到 quarto2.0 之后才能实用,帮助读者更深层次地探索你所展示的概念和数据
- 给大语言模型 LLMs : 生成必要的文档给大语言模型