```{python}
1 + 1
```2
실행된 코드의 출력을 사용자 정의하는 다양한 옵션이 있습니다. 모든 옵션은 전역(문서 front matter) 또는 코드 블록별로 지정할 수 있습니다. 예를 들어 아래는 Python 예제를 수정해 코드가 출력 문서에 “에코”되지 않도록 설정한 것입니다.
이 옵션은 코드 블록마다 덮어쓸 수 있습니다. 예:
코드 블록 옵션은 블록 상단의 특수 주석에 포함됩니다(상단에서 #|로 시작하는 줄은 옵션으로 간주됩니다).
출력 사용자 정의 옵션은 다음과 같습니다.
| 옵션 | 설명 |
|---|---|
eval |
코드 청크를 평가합니다(false면 코드만 출력에 표시합니다). |
echo |
소스 코드를 출력에 포함합니다. |
output |
코드 실행 결과를 출력에 포함합니다(true, false, 또는 asis로 설정하면 출력이 원시 마크다운이며 Quarto의 표준 래핑 마크다운을 추가하지 않습니다). |
warning |
경고를 출력에 포함합니다. |
error |
오류를 출력에 포함합니다(이 옵션을 켜면 코드 실행 중 오류가 발생해도 문서 처리가 중단되지 않습니다). |
include |
코드나 결과를 포함하지 않도록 하는 포괄 옵션입니다(예: include: false는 코드 블록의 모든 출력을 숨깁니다). |
renderings |
셀의 플롯 또는 표 출력에 대한 렌더링 이름을 지정합니다(예: [light, dark]). |
다음은 이러한 추가 옵션을 포함한 Knitr 예시입니다.
renderings를 사용해 플롯의 라이트/다크 버전을 제공하는 예시는 다음과 같습니다. 셀 출력 수는 렌더링 수와 일치해야 합니다.


renderings 셀 옵션은 현재 셀 상호 참조 옵션(label이 fig-, tbl- 등으로 시작)이나 셀 캡션 옵션(fig-cap, tbl-cap 등)과 함께 올바르게 동작하지 않습니다.
renderings를 상호 참조 및/또는 캡션과 함께 사용하려면 펜스 div 문법을 사용하세요.
---
title: "Dark mode"
format:
html:
theme:
light: flatly
dark: darkly
---
::: {#fig-caption-crossref}
```{r}
#| label: caption-crossref
#| renderings: [light, dark]
par(bg = "#FFFFFF", fg = "#000000")
plot(1:10) # Shown in `light` mode
par(bg = "#000000", fg = "#FFFFFF", col.axis = "#FFFFFF")
plot(1:10) # Shown in `dark` mode
```
Light and dark renderings with a caption and crossref
:::여기서 label은 상호 참조 레이블이 아니라는 점에 주목하세요. 즉, 상호 참조 유형 중 하나로 시작하지 않습니다. 디버깅과 안정적인 리소스 이름을 위해 label이 있는 셀에 이름을 붙이는 것은 좋은 습관입니다. 하지만 fig-, tbl- 등으로 시작하는 상호 참조 레이블은 renderings와 함께 사용할 수 없습니다.
Knitr 엔진을 사용할 때는 사용 가능한 네이티브 옵션(예: collapse, tidy, comment 등)도 사용할 수 있습니다. 자세한 내용은 Knitr 옵션 문서를 참고하세요. 위와 같이 옵션 주석 블록에 포함하거나, Knitr 문서에서처럼 {r}와 같은 줄에 포함할 수 있습니다.
Knitr 엔진은 객체나 표현식을 사용해 코드 청크를 조건부로 평가할 수도 있습니다. Using R: Knitr Options을 참고하세요.
코드에서 생성되는 그림의 기본 너비와 높이를 제어하는 방법은 여러 가지가 있습니다. 먼저 Quarto는 대상 출력 포맷에 맞는 기본 너비와 높이를 설정한다는 점이 중요합니다. 기본값은 다음과 같습니다(단위: 인치).
| 포맷 | 기본값 |
|---|---|
| 기본 | 7 x 5 |
| HTML 슬라이드 | 9.5 x 6.5 |
| HTML 슬라이드 (reveal.js) | 9 x 5 |
| 5.5 x 3.5 | |
| PDF 슬라이드 (Beamer) | 10 x 7 |
| PowerPoint | 7.5 x 5.5 |
| MS Word, ODT, RTF | 5 x 4 |
| EPUB | 5 x 4 |
| Hugo | 8 x 5 |
이 기본값은 보기 좋은 비율의 그림을 제공하도록 선택된 것이지만, 다른 기본 크기를 선호한다면 자유롭게 실험해도 됩니다. fig-width와 fig-height 옵션으로 기본 크기를 변경할 수 있습니다. 예:
이 크기 값이 엔진 수준의 기본값에 어떻게 반영될까요? 이는 엔진마다 다릅니다.
Knitr 엔진에서는 이 값이 fig.width, fig.height 청크 옵션의 기본값이 됩니다. 청크 수준 옵션으로 기본값을 덮어쓸 수 있습니다.
Python에서는 이 값이 Matplotlib의 figure.figsize rcParam을 설정하는 데 사용됩니다(물론 특정 플롯에서 기본값을 수동으로 덮어쓸 수 있습니다).
Julia에서는 이 값이 Plots.jl GR 백엔드의 기본 그림 크기를 초기화하는 데 사용됩니다.
Jupyter에서 다른 그래픽 라이브러리를 사용하면서 이 값을 활용하려면 환경 변수 QUARTO_FIG_WIDTH, QUARTO_FIG_HEIGHT에서 값을 읽어올 수 있습니다.
Jupyter 엔진에서는 fig-width와 fig-height가 문서 또는 프로젝트 수준에서 지정된 경우에만 지원됩니다. 반면 Knitr 엔진에서는 이 옵션을 셀별 코드 옵션으로도 사용할 수 있습니다.
fig-cap과 fig-alt 옵션을 사용해 코드로 생성된 그림의 캡션과 대체 텍스트를 지정할 수 있습니다. 예를 들어 아래는 플롯을 만드는 Python 코드 셀에 옵션을 추가한 것입니다.
```{python}
#| fig-cap: "Polar axis plot"
#| fig-alt: "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()
```Jupyter, Knitr, OJS는 모두 마크다운 안에서 인라인 코드를 실행할 수 있습니다(예: 서술형 텍스트에 최신 계산 결과를 자동 반영). 자세한 내용은 인라인 코드를 참고하세요.
output: asis 옵션을 사용하면 원시 마크다운 출력을 생성할 수 있습니다. output: asis가 지정되면 Quarto의 표준 래핑 div가 포함되지 않습니다. 예를 들어 아래는 output: asis로 두 개의 제목을 생성합니다.
출력 결과는 다음과 같습니다.
마크다운을 생성하는 코드가 최종 출력에 포함되지 않도록 echo: false 옵션도 함께 사용했습니다.
만약 output: asis를 지정하지 않았다면, 중간 마크다운에서 출력은 Quarto의 .cell-output div에 포함됩니다.
Jupyter 엔진에서는 IPython.display의 함수를 사용해 원시 마크다운 출력을 만들 수도 있습니다. 예:
Knitr 셀 실행 엔진을 사용하는 경우, YAML에서 기본 문서 수준의 Knitr 청크 옵션을 지정할 수 있습니다. 예:
opts_knit로 전역 Knitr 옵션도 추가로 지정할 수 있습니다.
R.options 청크 옵션은 코드 청크 실행 전에 options()로 일시적으로 R 옵션을 설정하고, 실행 직후 원래 값으로 복원할 수 있게 해주는 편리한 방법입니다.
위 예시에서는 단일 문서에 기본 Knitr 청크 옵션을 설정했습니다. 공유 knitr 옵션은 프로젝트 전체 _quarto.yml 파일이나 프로젝트 디렉터리 범위의 _metadata.yml 파일에도 추가할 수 있습니다.
코드 셀에 여러 표현식이 있을 때 기본적으로는 마지막 최상위 표현식만 렌더링 결과에 포함됩니다. 예를 들어 다음 코드 셀을 보겠습니다.
HTML로 렌더링하면 출력은 다음과 같습니다.
이 동작은 Jupyter shell interactivity의 last_expr 설정에 해당합니다.
ipynb-shell-interactivity 옵션으로 이 동작을 제어할 수 있습니다. 예를 들어 최상위 표현식을 모두 캡처하려면 all로 설정합니다.
이제 위 코드 셀은 다음과 같이 출력됩니다.
대시보드에서는 ipynb-shell-interactivity의 기본값이 all입니다.
마크다운 입력에서 최종 출력으로 가는 과정에서 중간 파일이 생성되며, 렌더링이 끝나면 자동으로 삭제됩니다. 다음 옵션을 사용하면 중간 파일을 유지할 수 있습니다.
| 옵션 | 설명 |
|---|---|
keep-md |
코드 실행으로 생성된 마크다운 파일을 유지합니다. |
keep-ipynb |
코드 실행으로 생성된 노트북 파일을 유지합니다(마크다운 입력 파일에만 적용). |
예를 들어 렌더링 이후 Jupyter 중간 파일을 유지하려면 다음과 같이 지정합니다.
Quarto 코드 블록 사용법을 설명하는 튜토리얼이나 문서를 작성할 때는 코드 출력에 펜스 구분자(예: ```{python})를 포함해 실행 가능한 코드가 해당 구분자를 필요로 한다는 점을 강조하고 싶을 수 있습니다. 이때 echo: fenced 옵션을 사용합니다. 예를 들어 다음 코드 블록은:
다음과 같이 렌더링됩니다.
이는 셀 옵션 사용법을 보여줄 때 특히 유용합니다. 예를 들어 output과 code-overflow 옵션을 사용하는 방법을 다음처럼 보여줄 수 있습니다.
이 코드 블록은 렌더링 문서에서 다음처럼 보입니다.
모든 YAML 옵션이 펜스 코드 출력에 포함되지만, echo: fenced는 예외입니다(독자에게 혼란을 줄 수 있기 때문입니다).
이 동작은 문서 수준에서도 지정할 수 있습니다. 모든 실행 코드 블록에 펜스 구분자와 YAML 옵션을 포함하려면 다음과 같이 설정합니다.
문서용(비실행) 펜스 코드 블록을 포함하고 싶은 경우가 많습니다. 이때 언어(예: python, r 등)를 한 쌍이 아니라 두 쌍의 중괄호로 감싸면 됩니다. 예:
그러면 문서에는 다음과 같이 출력됩니다.
여러 코드 블록과 다른 마크다운이 포함된 예시를 보여주려면, 예시 전체를 4개의 백틱으로 감싸고, 내부 코드 블록에는 두 겹 중괄호 문법을 사용하세요. 예:
앞에서 계산에 사용되는 엔진은 자동으로 결정된다고 설명했습니다. 하지만 이를 사용자 정의하고 싶을 수 있습니다. 예를 들어 Knitr 대신 Jupyter R 커널을 사용하고 싶거나, reticulate를 통해 Python 코드를 Knitr로 실행하고 싶을 수 있습니다.
자동 바인딩의 기본 규칙은 다음과 같습니다.
| 확장자 | 엔진 바인딩 |
|---|---|
| .qmd | 파일에 파일에 그 외 실행 가능한 코드 블록(예: 실행 가능한 코드 블록이 없으면 엔진을 사용하지 않습니다. |
| .ipynb | Jupyter 엔진 |
| .Rmd | Knitr 엔진 |
| .md | 엔진 없음(md 문서에 실행 가능한 코드 블록이 있으면 오류가 발생합니다) | |
quarto 문서에 {python}과 {r} 코드 블록이 모두 있으면, quarto는 Knitr 엔진과 reticulate R 패키지를 사용해 python 콘텐츠를 실행합니다.
특히 .qmd 파일에서는 engine 옵션으로 사용할 엔진을 덮어쓸 수 있습니다. 예:
또는 engine: markdown으로 실행 엔진을 사용하지 않도록 지정할 수도 있습니다.
knitr 또는 jupyter 옵션을 지정해도 기본 엔진을 덮어씁니다.
추가 엔진 전용 옵션을 포함하는 변형도 기본 엔진을 덮어씁니다.
Quarto 계산 문서에서 셸 명령(Bash, Zsh 등)을 사용하는 방법은 엔진에 따라 다릅니다. Jupyter 엔진을 사용하는 경우 Jupyter 셸 매직을 사용할 수 있습니다. 예:
echo 앞의 !가 Python 셀이 셸 명령을 실행할 수 있게 해줍니다.
Knitr 엔진을 사용하는 경우 ```{bash} 셀을 사용할 수 있습니다. 예:
Knitr 엔진은 ```{python} 셀도 지원하므로, 같은 문서에서 R, Python, Bash를 함께 사용할 수 있습니다.