측정 및 레이아웃 (Measure, Layout)

이 섹션은 오래되었습니다. 여전히 유용할 수 있지만, 참조 문서를 통해 새로운 컨텍스트 시스템을 공부하는 것을 강력히 추천합니다.

스타일과 측정 (Style & Measure)

스타일 공식 문서

측정 공식 문서

measure요소의 크기 를 반환합니다. 이 명령은 place를 사용하여 사용자 정의 레이아웃을 만들 때 매우 유용합니다.

하지만 한 가지 주의할 점이 있습니다. 요소의 크기는 해당 요소에 적용된 스타일에 따라 달라집니다.

#let content = [안녕!]
#content
#set text(14pt)
#content
Rendered image

따라서 텍스트의 일부에 큰 글꼴 크기를 설정한 경우, 요소의 크기를 측정하려면 요소가 어디에 위치하는지 알아야 합니다. 이를 모르면 어떤 스타일을 적용해야 할지 알 수 없습니다.

네, 맞습니다. 우리에게는 context가 필요합니다.

#let thing(body) = context {
  let size = measure(body)
  ["#body" 의 너비는 #size.width 입니다.]
}

#thing[이봐요] \
#thing[환영합니다]
Rendered image

레이아웃 (Layout)

레이아웃은 measure와 비슷하지만, 현재 범위의 부모 크기 를 반환합니다.

요소를 블록(block)에 넣는다면 블록의 크기가 될 것이고, 페이지에 바로 넣는다면 페이지의 크기가 될 것입니다.

기술적인 이유로 context를 직접 사용할 수는 없으며, 매우 유사한 방식을 사용해야 합니다 (사실 context가 여기서 파생된 방식입니다):

/// 부모 크기를 받아서 무언가를 렌더링하는 블랙박스입니다.
#layout(size => {
  let half = 50% * size.width
  [페이지의 절반 너비는 #half 입니다.]
})
Rendered image

layoutmeasure를 결합하여 부모 크기에 의존하는 요소의 너비를 구하는 것은 매우 유용할 수 있습니다:

#let text = lorem(30)
#layout(size => context [
  #let (height,) = measure(
    block(width: size.width, text)
  )
  이 텍스트의 높이는 현재 페이지 너비에서 #height 입니다: \
  #text
])
Rendered image