如何使用quarto写作

使用Quarto写作,即是将文字与代码嵌套在一起进行写作,最终交由Quarto自动调整文章格式和执行文档中的代码。Quarto语言可以看成Markdown语言的拓展版。Markdown是一个轻量的文本标注语言,用简单、少量的符号对文字标注,这些标注语言穿插在普通文本之中。带有markdown语言标注的文档在文本处理引擎Pandoc的处理下,自动生成具有特定样式的文章。Markdown语言使作者专注文本内容本身,不必过多考虑文本样式。Quarto不仅包括基本的markdown语言,还整合了Rmarkdown的功能,将R代码及其结果放在普通文本之中。让文本写作、代码写作与运行、分享结果无缝地整合在一起,减少了文本、代码与代码结果之间拼接的成本,极大地提高了写作效率。

接下来让我们通过一个简单示例展示使用Quarto写作的基本流程和基本要素,而后具体展示文档写作各个要素的语法结构。需要说明的是,这里介绍的是使用Quarto写作最为必要和最为简单的部分,它让我们可以快速上手使用Quarto,但Quarto的功能远不及如此,Quarto的更多功能请参见quarto官方网站,网站提供了详尽、明晰的说明文档,易于理解、便于上手,本文部分内容则是直接翻译官网帮助文档的部分内容,在此致谢。

一个简单的示例

以下展示的是一个简单Quarto文档以及其运行之后的结果。首先,我们看Quarto文档的内容,分为两部分,第一部分是由两组”---“包围的部分。这部分叫YAML表头,是一种文本标记语言,基本构成形式为name: value。以此控制文章整体属性,比如title: "空气质量与臭氧",是给文章命名。如果一个命令之下还有次级命令,前一组的值新起一行,缩进后加冒号,再起一行,输入新的设置。例子中的format: html是一个命令,设定本文档生成的结果是一个网页(Quarto还可以生成word文档format: docs, 生成ppt文档format: pptx,更多文档类型请参见quarto官方说明)。code-fold: true,是指在文档是网页的情况下,如果文章里出现代码,收缩显示。YAML部分不会显示在生成的文档之中。

Quarto文档的第二部分即是正文部分,也可以分为两个部分,常规的文字部分,比如下文的## 与```之间的部分。除了文字之外,其中##是一个markdown语言,用来控制文字格式,##是将后面的文字设置第二级标题。@fig-airquality是对下面代码生成的图形自动编序号。两组```之间的文字是R code,示例中的R code是生成一个散点图。除了常规R code之外,还有几组#| 之后显示的内容,这些内容也以name: value形式出现,这些组合是控制代码如何执行的,label:fig-airquality,是给这段代码命名。fig-cap:空气质量与臭氧关系图是给R code生成的图形命名。warning: false是抑制code执行过程中显示warning信息。以上是对使用Quarto写作文档的初步介绍。输出结果部分则是上述quarto文档经render之后的结果。下文将分项目依次介绍Quarto语法,涉及文字格式、标题、超链接、列表、表格、引用、尾注等。

Quarto文档

---
title: "空气质量与臭氧"
author: "xiaomaoaho"
date: "10/22/2022"
format: 
  html:
    code-fold: true
---

## 引言

在高温、天气晴朗、日照强的气象条件下,容易生成臭氧污染,这是今年空气质量反弹的一个重要原因。@fig-airquality 表示空气质量对臭氧的影响.

```{r}
#| label: fig-airquality
#| fig-cap: 空气质量与臭氧关系图.
#| warning: false
library(ggplot2)
ggplot(airquality, aes(Temp, Ozone)) + 
  geom_point() + 
  geom_smooth(method = "loess")
  
```

输入结果

快速新建Quarto文档

在Rstudio中使用Quarto,前期需要对环境进行一些配置,具体参见官方说明(请安装Quarto CLI v.1.2.0以上版本),配置之后,点击Rstudio左上角新建文档按钮(绿底白色十字),选择Quarto Document,进行如下设置。

文本markdown

文本的样式用以符号来标注,左边是Quarto语言,右边是输出结果。

Markdown Syntax Output
*斜体* 和 **加粗**
斜体 和  加粗
superscript^2^ / subscript~2~
superscript2 / subscript2
~~strikethrough~~
strikethrough
`verbatim code`
verbatim code

标题

#用来设置标题,左边是Quarto语言,右边是输出结果。

Markdown Syntax Output
# 标题 1

标题 1

## 标题 2

标题 2

### 标题 3

标题 3

#### 标题 4

标题 4

##### 标题 5
标题 5
###### 标题 6
标题 6

超链接 & 图片

插入超链接的方法是使用单书名号,或者方括号带文字圆括号包括网址。插入图片是在方括号前加!号,圆括号内输入图片本地路径或者url.

Markdown Syntax Output
<https://quarto.org>
https://quarto.org
[Quarto](https://quarto.org)
Quarto
![Caption](elephant.png)
[![Caption](elephant.png)](https://quarto.org)

列表

无序列表使用*, +, -。有序列使用1.。

Markdown Syntax Output
* 无序列
    + 项目 1
    + 项目 2
        - 次项目 1
  • 无序列

    • 项目 1

    • 项目 2

      • 次项目 1
1. 有序列
2. 项目 2
    i) 次项目 1
         A.  次次项目 1
  1. 有序列

  2. 项目 2

    1. 次项目 1

      1. 次次项目 1
术语
: 定义
术语

定义

表格

Markdown使用符号直接输入表格,但现实情况下,很少以下列方式输入表格,多数是通过其它方式导入表格,下述方法了解即可。

Quarto语句

| Right | Left | Default | Center |
|------:|:-----|---------|:------:|
|   12  |  12  |    12   |    12  |
|  123  |  123 |   123   |   123  |
|    1  |    1 |     1   |     1  |

输出结果

Right Left Default Center
12 12 12 12
123 123 123 123
1 1 1 1

数学公式

使用 $ 包围文本之中的公式 , $$ 显示独立行的公式,公式使用latex语法,比如:

Markdown Syntax Output
inline math: $E = mc^{2}$
inline math: \(E=mc^{2}\)
display math:

$$E = mc^{2}$$
display math:
\[E = mc^{2}\]

示意图

Quarto 支持用 MermaidGraphviz 书写示意图. Mermaid和Graphviz是绘制示意图的轻量语言,以下即是使用Mermaid语言绘制的示意图,更多内容可前往官网学习。

```{mermaid}
flowchart LR
  A[Hard edge] --> B(Round edge)
  B --> C{Decision}
  C --> D[Result one]
  C --> E[Result two]
```

flowchart LR
  A[Hard edge] --> B(Round edge)
  B --> C{Decision}
  C --> D[Result one]
  C --> E[Result two]

视频

可以使用 {{< video >}} 在文本中加入其它网站的视频和本地存储的视频,如下所示:

{{< video https://www.youtube.com/embed/wo9vZccmqwc >}}
{{< video local-video.mp4 >}}

其它格式

Markdown Syntax Output
> 批量引用

批量引用

::: {.classname}
分块
:::

Div

| 独立成段
|   空格与新行将
|   保留
独立成段
    空格与新行将
    保留

引用

Quarto使用Pandoc自动生成符合特定样式的文中引注和文后参考文献,实现这一功能需要三个文件:

  • 插入markdown引注的文档;

  • 参考文献源文件, 比如BibLaTeX (.bib) 或者 BibTeX (.bibtex).

  • 参考文献标准,比如标准文件(.csl ),可以通过以下途径获得参考文献的标准文件: CSL Project和 Zotero’s style repository

参考文献源文件和参考文献标准需要添加在文档表头YAML,示例如下:

---
title: "My Document"
bibliography: references.bib
csl: nature.csl
---

引注添加

Quarto使用标准Pandoc markdown来表示引注(e.g. [@citation]) ,用方括号添加引注,多个引注,用分号分开。每个引注都用该文献的识别码表示,以@ 开头,如下例所示。

Markdown Format Output (author-date format) Output (numerical format)
Blah Blah [see @knuth1984, pp. 33-35;
also @wickham2015, chap. 1]
Blah Blah (see Knuth 1984, pp. 33-35; also Wickham, Cook, 和 Hofmann 2015, chap. 1) Blah Blah see [1], pp. 33-35; also [1], chap. 1
Blah Blah [@knuth1984, pp. 33-35,
38-39 and passim]
Blah Blah (Knuth 1984, pp. 33-35, 38-39 and passim) Blah Blah [1], pp. 33-35, 38-39 and passim
Blah Blah [@wickham2015; @knuth1984].
Blah Blah (Wickham, Cook, 和 Hofmann 2015; Knuth 1984). Blah Blah [1, 2].
Wickham says blah [-@wickham2015]
Wickham says blah (2015) Wickham says blah [1]

也可以将作者名字插在正文中,如下:

Markdown Format Output (author-date format) Output (numerical format)
@knuth1984 says blah.
Knuth (1984) says blah. [1] says blah.
@knuth1984 [p. 33] says blah.
Knuth (1984, p. 33) says blah. [1] [p. 33] says blah.

通常情况,参考文献会自动生成在文档尾部。当然也可以在指定位置投入一div,并标{#refs},这样参考文献会加在指定位置。

### 参考文献
::: {#refs}
:::

尾注

Pandoc支持以下方式在文本中插入尾注:

Quarto文档

这是一尾注示例[^1].
[^1]: 这是一个尾注。

输出结果

这是一尾注示例1.

也可以在文中直接写尾注,如下:

Quarto文档

这是一个文中注释.^[注释是什么呢?]

输出结果

这是一个文中注释.2

代码写作

可以Quarto文档中直接加入R code,并且可以直接运行,生成的运行结果,比如图、表,会自动添加在代码下方。接下来我们展示插入生成图表的代码及其结果:

Quarto文本

```{r}
#| label: fig-airquality
#| fig-cap: Temperature and ozone level.
#| warning: false
#| message: false
plot(pressure)
```

输出结果

plot(pressure)
图 1: Temperature and ozone level.

插入一段生成表格的代码。

Quarto文本

```{r}
#| label: tbl-cars
#| tbl-cap: "Iris"
#| tbl-colwidths: [60,40]
library(knitr)
kable(head(iris))
```

输出结果

library(knitr)
kable(head(iris))
表格 1: Iris
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
5.1 3.5 1.4 0.2 setosa
4.9 3.0 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
4.6 3.1 1.5 0.2 setosa
5.0 3.6 1.4 0.2 setosa
5.4 3.9 1.7 0.4 setosa

最后的话

以上只是Quarto的基本功能,更多整体控制文档整体特征的设置项,可根据文档类型参看官方文档,HTML文档参看HTML Options,Word文档参看MS Word Options,网页版PPT请参看Revealjs Options,生成网站参看Website Options,生成书籍请参看Book Options

更多控制R code行为的设置选项,请参看Code Cells: Knitr

更多内容,请直接浏览quarto官方网站

参考

Knuth, D. E. 1984. 《Literate Programming》. The Computer Journal 27 (2): 97–111. https://doi.org/10.1093/comjnl/27.2.97.
Wickham, Hadley, Dianne Cook, 和 Heike Hofmann. 2015. 《Visualizing Statistical Models: Removing the Blindfold》. Statistical Analysis and Data Mining: The ASA Data Science Journal 8 (4): 203–25. https://doi.org/10.1002/sam.11271.

脚注

  1. 这是一个尾注。↩︎

  2. 注释是什么呢?↩︎