quarto 教程 1:Hello, Quarto

本文介绍了Quarto,一个支持多语言的科学和技术出版系统,能用Markdown或JupyterNotebooks创作,并能渲染为HTML、PDF等多种格式。教程详细讲解了安装、学习概览、渲染过程和在RStudio中的使用方法。
摘要由CSDN通过智能技术生成

「写在前面」

学习一个软件最好的方法就是啃它的官方文档。本着自己学习、分享他人的态度,分享官方文档的中文教程。软件可能随时更新,建议配合官方文档一起阅读。


目录

  • 1 Quarto 介绍
  • 2 Quarto 安装
  • 3 学习概述
  • 4 渲染
  • 5 创作
  • 6 Quarto 如何工作
  • 7 下一步

官网教程:https://quarto.org/docs/get-started/

1 Quarto 介绍

Quarto 是一个开源科学和技术出版系统

Quarto 具有以下功能:

  • 作者可以使用 Jupyter notebooks 或在您喜欢的编辑器中使用纯文本 Markdown 进行创作。
  • 使用 PythonRJuliaObservable 创建动态内容。
  • 发表可复制的、高质量的 articles、presentations、dashboards、websites、blogs、books 以 HTML、PDF、MS Word、ePub 等格式。
  • 通过发布到 Posit ConnectConfluence 或其他发布系统,在整个组织范围内共享知识和见解。
  • 使用 Pandoc Markdown 进行编写,包括方程、引文、交叉引用、图形面板、标注、高级布局等。

2 Quarto 安装

安装 Quarto: https://quarto.org/docs/get-started/

3 学习概述

Quarto 是 Posit 的 R Markdown 的 multi-language, next-generation 版本,包含数十个新特性和功能,同时能够在不进行修改的情况下渲染大多数现有的 Rmd 文件。

在本教程中,我们将向您展示如何将 RStudio 与 Quarto 结合使用。您将在 RStudio 中编辑代码和 Markdown,就像处理任何计算文档(例如 R Markdown)一样,并在工作时在 Viewer 选项卡中预览渲染的文档。

以下是扩展名为 .qmd 的 Quarto 文档(左侧)及其 HTML 渲染版本(右侧)。您还可以选择将其呈现为其他格式,例如 PDF、MS Word 等。

alt

这是 Quarto 出版的基本模型 - 获取源文档并将其呈现为各种输出格式。

如果您想在深入学习本教程之前观看有关 Quarto 的视频介绍,请观看 Get Started with Quarto,您可以在其中看到使用可执行代码块创作 Quarto 文档、渲染为多种格式,包括 revealjs presentations、创建一个 website,并在 QuartoPub 上发布。

如果您想在自己的环境中学习本教程,请按照下面列出的步骤操作。

  1. 下载并安装最新版本的 RStudio (v2023.06):

https://posit.co/download/rstudio-desktop/

  1. 确保您已安装 tidyversepalmerpenguins 软件包:
install.packages("tidyverse")
install.packages("palmerpenguins")
  1. 下载下面的 Quarto 文档 ( .qmd),在 RStudio 中打开它,然后单击 Render

https://quarto.org/docs/get-started/hello/rstudio/_hello.qmd

4 渲染

使用 RStudio IDE 中的「Render」按钮渲染文件并通过单击或键盘快捷键 (⇧⌘K) 预览输出。

alt

如果您希望在保存时自动渲染,可以选中编辑器工具栏上的「Render on Save」选项。每当您重新渲染文档时,预览都会更新。并排预览适用于 HTML 和 PDF 输出。

alt

请注意,文档也可以通过 「quarto」 包从 R 控制台呈现:

install.packages("quarto")
quarto::quarto_render("hello.qmd")

渲染时,Quarto 会生成一个新文件,其中包含 .qmd 文件中选定的文本、代码和结果。新文件可以是 HTML、PDF、MS Word document、presentation、website、book、interactive document 或其他格式。

5 创作

在下图中,我们可以在 RStudio 编辑器的两种模式下看到同一个文档:可视化编辑器(左侧)和源码编辑器(右侧)。 RStudio 的可视化编辑器为 Markdown 提供了所见即所得的创作体验。对于格式设置(例如,粗体文本),您可以使用工具栏、键盘快捷键 (⌘B) 或 Markdown 结构 (「bold」)。该文档底层的纯文本源代码是为您编写的,您可以通过切换到源码模式进行编辑来随时查看/编辑它。您可以通过单击编辑器工具栏中的 「Source」「Visual」(或使用键盘快捷键 ⌘⇧ F4)在这两种模式之间来回切换。

alt

接下来,让我们将注意力转向 Quarto 文档的内容。该文件包含三种类型的内容:一个 YAML header、code chunks 和 Markdown 文本。

YAML header

两端由三个破折号 (---) 分隔的(可选)YAML header。

---
title: "Hello, Quarto"
format: html
editor: visual
---

渲染时,title: "Hello, Quarto" 将出现在渲染文档的顶部,其字体大小比文档的其余部分更大。另外两个 YAML fields 表示输出应为 html 格式,并且默认情况下文档应在可视化编辑器中打开。

YAML 的基本语法使用格式为 key: value 的键值对。文档 headers 中常见的其他 YAML fields 包括 author, subtitle, date 等元数据以及 theme, fontcolor, fig-width 等自定义选项。可用的 YAML fields 根据文档格式的不同而有所不同,HTML 文档的所有可用 YAML fields 请参考官方文档:

https://quarto.org/docs/reference/formats/html.html

Code chunks

R code chunks 用 {r} 标识,带有(可选)chunk options,采用 YAML 样式,由 #| 标识在该行的开头。

```{r}
#| label: load-packages
#| include: false

library(tidyverse)
library(palmerpenguins)
```

在这种情况下,code chunks 的 labelload-packages,我们将 include 设置为 false 来指示我们不希望该 chunk 本身或其任何输出出现在渲染的文档中。

除了渲染完整文档以查看代码块的结果之外,您还可以通过单击图标alt或键盘快捷键 (⇧⌘⏎) 在 RStudio 编辑器中以交互方式运行每个代码块。 RStudio 执行代码并在文件内内联或在控制台中显示结果,具体取决于您的偏好。

alt

Markdown text

带格式的文本,包括节标题、超链接、嵌入图像和内联代码块。

alt

Quarto 对文本使用 Markdown 语法。如果使用可视化编辑器,您不需要学习太多 Markdown 语法来创作文档,因为您可以使用菜单和快捷方式添加标题、粗体文本、插入表格等。如果使用源码编辑器,您可以可以使用像 ##**bold** 等 Markdown 表达式来实现这些。

6 Quarto 如何工作

当您渲染 Quarto 文档时,首先 knitr 执行所有代码块并创建一个新的 Markdown (.md) 文档,其中包括代码及其输出。生成的 Markdown 文件然后由 pandoc 处理,创建最终的格式。渲染按钮封装了这些操作并以适合您的顺序执行它们。

alt

7 下一步

您现在已经了解了创建和创作 Quarto 文档的基础知识。以下教程更深入地探讨了 Quarto:

这些内容将在后面的推文中介绍。


「结束」
alt

本文由 mdnice 多平台发布

以下是一个简单的Quarto游戏的Java代码示例: ```java import java.util.Scanner; public class QuartoGame { private static final int BOARD_SIZE = 4; private static final int NUM_PIECES = 16; private static char[][] board; private static boolean[] availablePieces; private static int currentPiece; public static void main(String[] args) { initializeGame(); Scanner scanner = new Scanner(System.in); while (true) { printBoard(); System.out.println("Player " + getCurrentPlayer() + ", choose a piece (1-16):"); int piece = scanner.nextInt(); System.out.println("Choose a position (row, column):"); int row = scanner.nextInt(); int col = scanner.nextInt(); if (isValidMove(piece, row, col)) { placePiece(piece, row, col); if (isQuarto()) { System.out.println("Player " + getCurrentPlayer() + " wins!"); break; } if (isBoardFull()) { System.out.println("It's a draw!"); break; } switchPlayer(); } else { System.out.println("Invalid move. Try again."); } } } private static void initializeGame() { board = new char[BOARD_SIZE][BOARD_SIZE]; availablePieces = new boolean[NUM_PIECES]; currentPiece = 1; for (int i = 0; i < BOARD_SIZE; i++) { for (int j = 0; j < BOARD_SIZE; j++) { board[i][j] = '-'; } } for (int i = 0; i < NUM_PIECES; i++) { availablePieces[i] = true; } } private static void printBoard() { System.out.println("Current board:"); for (int i = 0; i < BOARD_SIZE; i++) { for (int j = 0; j < BOARD_SIZE; j++) { System.out.print(board[i][j] + " "); } System.out.println(); } } private static char getCurrentPlayer() { return currentPiece % 2 == 0 ? 'O' : 'X'; } private static boolean isValidMove(int piece, int row, int col) { return availablePieces[piece - 1] && board[row][col] == '-'; } private static void placePiece(int piece, int row, int col) { board[row][col] = getCurrentPlayer(); availablePieces[piece - 1] = false; currentPiece++; } private static boolean isQuarto() { // 检查行和列 for (int i = 0; i < BOARD_SIZE; i++) { if (board[i][0] != '-' && board[i][0] == board[i][1] && board[i][0] == board[i][2] && board[i][0] == board[i][3]) return true; if (board[0][i] != '-' && board[0][i] == board[1][i] && board[0][i] == board[2][i] && board[0][i] == board[3][i]) return true; } // 检查对角线 if (board[0][0] != '-' && board[0][0] == board[1][1] && board[0][0] == board[2][2] && board[0][0] == board[3][3]) return true; if (board[0][3] != '-' && board[0][3] == board[1][2] && board[0][3] == board[2][1] && board[0][3] == board[3][0]) return true; return false; } private static boolean isBoardFull() { for (int i = 0; i < BOARD_SIZE; i++) { for (int j = 0; j < BOARD_SIZE; j++) { if (board[i][j] == '-') return false; } } return true; } private static void switchPlayer() { currentPiece++; } } ``` 这个代码实现了一个简单的Quarto游戏,使用一个4x4的棋盘和16个不同的棋子。玩家轮流选择一个棋子并将其放在棋盘上,目标是在行、列或对角线上形成四个相同特征的棋子。游戏在有玩家获胜或者棋盘已满时结束。你可以根据需要对代码进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值