튜토리얼: 안녕, Quarto

개요

이 튜토리얼에서는 선호하는 텍스트 편집기에서 Quarto를 사용하는 방법을 보여드립니다. 일반 텍스트 .qmd 파일을 편집하고, 작업하면서 렌더링된 문서를 웹 브라우저에서 미리봅니다.

아래는 전체 흐름의 개요입니다.

왼쪽: Quarto Basics라는 제목의 VS Code 노트북에 텍스트, 코드 셀, 그리고 코드 셀 결과(극좌표 축의 선 그래프)가 보입니다. 오른쪽: 같은 노트북의 렌더링 버전.

왼쪽의 노트북이 오른쪽에 보이는 HTML 버전으로 렌더링됩니다. 이것이 Quarto 배포의 기본 모델입니다. 소스 문서(여기서는 노트북)를 가져와 HTML, PDF, MS Word 등 다양한 출력 형식으로 렌더링합니다.

이 튜토리얼에서는 matplotlibplotly 파이썬 패키지를 사용합니다. 설치 명령은 아래 표에 정리되어 있습니다.

Platform Commands
Mac/Linux
Terminal
python3 -m pip install jupyter matplotlib plotly
Windows
Terminal
py -m pip install jupyter matplotlib plotly
Note

이 튜토리얼은 Python을 사용하지만, Julia(IJulia 커널)도 잘 지원됩니다. 자세한 내용은 Julia 사용하기 문서를 참고하세요.

편집기 모드

VS Code를 사용한다면 먼저 VS Code용 Quarto 확장을 설치하세요. 이 확장은 마크다운과 임베디드 언어 구문 강조, 임베디드 언어 자동 완성(예: Python, R, Julia, LaTeX 등), 셀 및 선택 영역 실행을 위한 명령과 키 바인딩 등을 제공합니다.

다른 편집기에서도 사용할 수 있는 Quarto 구문 강조 모드가 있습니다.

Editor Extension
Emacs https://github.com/quarto-dev/quarto-emacs
Vim / Neovim https://github.com/quarto-dev/quarto-vim
Neovim https://github.com/quarto-dev/quarto-nvim
Sublime Text https://github.com/quarto-dev/quarto-sublime

렌더링

간단한 예제(hello.qmd)를 몇 가지 형식으로 렌더링하는 것부터 시작하겠습니다. 자신의 환경에서 단계별로 따라 하려면 hello.qmd라는 새 파일을 만들고 다음 내용을 복사해 넣으세요.

---
title: "Quarto Basics"
format:
  html:
    code-fold: true
jupyter: python3
---

For a demonstration of a line plot on a polar axis, see @fig-polar.

```{python}
#| label: fig-polar
#| fig-cap: "A line plot on a polar axis"

import numpy as np
import matplotlib.pyplot as plt

r = np.arange(0, 2, 0.01)
theta = 2 * np.pi * r
fig, ax = plt.subplots(
  subplot_kw = {'projection': 'polar'} 
)
ax.plot(theta, r)
ax.set_rticks([0.5, 1, 1.5, 2])
ax.grid(True)
plt.show()
```

다음으로 터미널을 열고 hello.qmd가 있는 디렉터리로 이동하세요.

이제 문서를 몇 가지 형식으로 렌더링해 보겠습니다.

Terminal
quarto render hello.qmd --to html
quarto render hello.qmd --to docx

대상 파일(이 경우 hello.qmd)은 항상 명령줄 인자의 첫 번째에 있어야 합니다.

Quarto로 .qmd 파일을 렌더링하면 실행 가능한 코드 블록이 Jupyter에서 처리되고, 코드/마크다운/출력의 조합이 일반 마크다운으로 변환됩니다. 그다음 이 마크다운을 Pandoc이 처리하여 최종 형식을 생성합니다.

qmd 파일 -> Jupyter -> md -> pandoc -> PDF/MS Word/HTML로 이어지는 워크플로 다이어그램.

저작

quarto render 명령은 배포용 문서의 최종 버전을 만드는 데 사용됩니다. 하지만 저작 단계에서는 quarto preview 명령을 사용합니다. 지금 터미널에서 hello.qmd로 실행해 보세요.

Terminal
quarto preview hello.qmd

이 명령은 문서를 렌더링한 다음 웹 브라우저에 표시합니다.

이전 노트북을 웹 브라우저에서 렌더링한 모습.

변경 사항을 보면서 작업할 수 있도록 편집기와 브라우저 미리보기를 나란히 배치하는 것이 좋습니다.

왼쪽에 노트북, 오른쪽에 브라우저의 라이브 미리보기가 나란히 표시된 모습.

라이브 미리보기를 확인해 보겠습니다.

  1. theta를 정의하는 코드를 다음과 같이 변경하세요.

    theta = 4 * np.pi * r
  2. 파일을 저장합니다. 문서가 다시 렌더링되고 브라우저 미리보기가 업데이트됩니다.

이것이 Quarto 저작의 기본 워크플로입니다.

hello.qmd에는 여러 유형의 콘텐츠가 있으니 각각을 조금씩 살펴보겠습니다.

YAML 옵션

파일 맨 위에는 문서 수준 옵션이 담긴 YAML 블록이 있습니다.

---
title: "Quarto Basics"
format:
  html:
    code-fold: true
jupyter: python3
---

code-fold 옵션을 false로 바꿔 보세요.

format: 
  html:
    code-fold: false

그런 다음 파일을 저장하세요. 이전에는 Code 버튼으로 숨겨져 있던 코드가 이제 플롯 위에 표시되는 것을 확인할 수 있습니다.

마크다운

서술형 콘텐츠는 마크다운으로 작성합니다. 여기서는 제목과 아래 코드 셀에서 생성된 그림에 대한 상호 참조를 지정합니다.

## Polar Axis

For a demonstration of a line plot on a polar axis, see @fig-polar.

제목을 바꿔 저장하면 미리보기가 새 제목 텍스트로 업데이트됩니다.

코드 셀

코드 셀에는 렌더링 중 실행될 코드가 포함되며, 출력(및 선택적으로 코드)이 렌더링된 문서에 포함됩니다.

```{python}
#| label: fig-polar
#| fig-cap: "A line plot on a polar axis"

import numpy as np
import matplotlib.pyplot as plt

r = np.arange(0, 2, 0.01)
theta = 2 * np.pi * r
fig, ax = plt.subplots(
  subplot_kw = {'projection': 'polar'} 
)
ax.plot(theta, r)
ax.set_rticks([0.5, 1, 1.5, 2])
ax.grid(True)
plt.show()
```

여기 제시된 Matplotlib 코드는 익숙할 것입니다. 하지만 코드 셀 상단에 있는 labelfig-cap 옵션은 생소할 수 있습니다. 셀 옵션은 특수 접두사가 붙은 주석(#|)으로 YAML 형식으로 작성합니다.

이 예제에서는 셀 옵션을 사용해 그림을 상호 참조할 수 있도록 했습니다. fig-cap과/또는 코드를 변경하고 셀을 실행한 뒤 파일을 저장해 업데이트된 미리보기를 확인하세요.

출력을 원하는 방식으로 조정할 수 있는 다양한 셀 옵션이 있습니다. 이 옵션들은 다음 튜토리얼에서 더 자세히 다룹니다.

Note

그림에서 특히 유용한 셀 옵션 중 하나는 fig-alt입니다. 시각 장애가 있는 사용자를 위해 이미지에 대체 텍스트를 추가할 수 있습니다. 자세한 내용은 Amy Cesal의 데이터 시각화를 위한 대체 텍스트 작성하기 글을 참고하세요.

다음 단계

이제 Quarto 문서를 만들고 작성하는 기본을 익혔습니다. 다음 튜토리얼에서 Quarto를 더 깊이 있게 살펴보세요:

  • 튜토리얼: 계산 — 실행 가능한 코드 블록의 동작과 출력을 원하는 방식으로 조정하는 방법을 배웁니다.

  • 튜토리얼: 작성 — 출력 형식과 인용, 상호 참조, 고급 레이아웃 같은 기술 문서 작성 기능을 더 알아봅니다.