함수
함수
이제 좀 더 복잡한 내용으로 넘어가 보겠습니다.
Typst 마법의 주요 부분은 스크립팅입니다.
스크립팅 모드로 들어가려면 `#`을 입력하고 그 뒤에 *함수 이름*을
입력하세요. _지루한 것_부터 시작해 보겠습니다:
#lorem(50)
_이 *함수* 는 방금 50개의 "Lorem Ipsum" 단어를 생성했습니다!_
더 많은 함수
#underline[함수는 무엇이든 할 수 있습니다!]
#text(orange)[정]말 #text(size: 0.8em)[모든] #sub[것]을요!
#figure(
caption: [
이것은 Typst로 작성된 초기 논문 중 하나의 스크린샷입니다. \
_이 모든 것들도 #text(blue)[사용자 정의 함수]로 작성되었습니다._
],
image("../boxes.png", width: 80%)
)
사실, 여러분은 마크업을 #strong[잊어버리고]
모든 곳에 함수만 #emph[사용해서 작성]할 수도 있습니다!
#list[
그 모든 마크업은 사실 함수 위에 씌워진 #emph[구문 설탕(syntax sugar)]일 뿐입니다!
]
함수를 호출하는 방법
먼저 `#`으로 시작합니다. 그런 다음 이름을 씁니다.
마지막으로 괄호를 쓰고 그 안에 무언가를 넣을 수 있습니다.
#link("https://typst.app/docs/reference/")[공식 참조 문서]에서
수많은 내장 함수를 찾아볼 수 있습니다.
#quote(block: true, attribution: "Typst 예시 북")[
맞습니다, 링크, 인용 및 기타 수많은
문서 요소들이 함수로 생성됩니다.
]
함수 인수 (Arguments)
함수 인수에는 _두 가지 유형_이 있습니다:
+ *위치 인수(Positional).* `lorem(50)`의 `50`과 같습니다.
그냥 괄호 안에 쓰면 됩니다. 여러 개인 경우 쉼표를 사용하세요.
+ *명명된 인수(Named).* `#quote(attribution: "누군가")`에서와 같습니다.
이름과 콜론 뒤에 값을 씁니다.
명명된 인수인 경우 일종의 _기본값_ 을 가집니다.
그것이 무엇인지 확인하려면
#link("https://typst.app/docs/reference/")[공식 Typst 참조 문서]를 확인하세요.
콘텐츠 (Content)
이제 우리만의 함수를 직접 작성해 보아야 할 것 같습니다.
Typst 언어에서 가장 "보편적인" 타입은 *콘텐츠(content)*입니다.
문서에 작성하는 모든 것이 콘텐츠가 됩니다.
#[
하지만 *대괄호* 를 사용해 _스크립팅 모드_ 에서
명시적으로 콘텐츠를 생성할 수도 있습니다.
대괄호 안에서는 어떤 마크업 함수나
원하는 모든 것을 사용할 수 있습니다.
]
마크업 및 코드 모드
`#`을 사용하면 코드 모드로 "전환"됩니다.
`[]`를 사용하면 다시 _마크업_(또는 콘텐츠) 모드로 돌아갑니다:
// +-- 마크업(기본 모드)에서 해당 함수를 위한 스크립팅으로 전환
// | +-- 스크립팅 모드: `text` 호출, 마지막 인수는 마크업
// | 첫 번째 인수 |
// v vvvvvvvvv vvvv
#rect(width: 5cm, text(red)[안녕 *세상아*])
// ^^^^ ^^^^^^^^^^^^^ `text`를 위한 마크업 인수일 뿐입니다.
// |
// +-- 스크립팅 모드에서 너비(width)와 다른 콘텐츠라는 두 인수로 `rect`를 호출합니다.
함수에 콘텐츠 전달하기
그렇다면 함수 뒤의 이 대괄호들은 무엇일까요?
만약 *함수 바로 뒤에 콘텐츠를 작성하면,
그 콘텐츠는 해당 함수의 위치 인수로 전달됩니다*.
#quote(block: true)[
이를 통해 저는 #underline[함수]에 전달하는 것들에
#text(red)[_말 그대로 무엇이든_] 작성할 수 있게 됩니다!
]
콘텐츠 전달하기, 파트 II
명확하게 하기 위해 다음과 같이 작성하면:
```typ
- #text(red)[빨간색 텍스트]
- #text([빨간색 텍스트], red)
- #text("빨간색 텍스트", red)
// ^ ^
// 여기서 따옴표는 콘텐츠가 아니라 일반 문자열을 의미합니다!
// 이것은 그냥 텍스트입니다.
```
이 모든 것은 #text([빨간색 텍스트], red)와 같은 결과를 보여줍니다.