번호 없는 빈 페이지
홀수 페이지에서 시작하는 장(Chapter) 앞의 빈 페이지
이 스니펫은 0.12.0 버전에서 작동하지 않습니다. 수정을 도와주실 분이 있다면 정말 감사하겠습니다.
// 저자: janekfleper
#set page(height: 20em)
#let find-labels(name) = {
return query(name).map(label => label.location().page())
}
#let page-header = context {
let empty-pages = find-labels(<empty-page>)
let new-chapters = find-labels(<new-chapter>)
if new-chapters.len() > 0 {
if new-chapters.contains(here().page()) [
_이 페이지에서 새로운 장이 시작됩니다_
#return
]
// 다음 <new-chapter> 레이블의 인덱스를 가져옵니다
let new-chapter-index = new-chapters.position(page => page > here().page())
if new-chapter-index != none {
let empty-page = empty-pages.at(new-chapter-index)
if empty-page < here().page() [
_다음 장을 홀수 페이지에서 시작하기 위한 빈 페이지입니다_
#return
]
}
}
[그리고 이것은 일반적인 헤더입니다]
line(length: 100%)
}
#let page-footer = context {
// chapter-heading()의 페이지 나누기가 <empty-page> 레이블 뒤에 삽입되므로,
// 선택자는 관련 레이블을 찾기 위해 현재 페이지 "이전"을 살펴봐야 합니다.
let empty-page-labels = query(selector(<empty-page>).before(here()))
if empty-page-labels.len() > 0 {
let empty-page = empty-page-labels.last().location().page()
// 가장 최근의 <new-chapter> 레이블을 되돌아봅니다.
let new-chapter = query(selector(<new-chapter>).before(here())).last().location().page()
// 현재 페이지에 <new-chapter> 레이블이 없고, (empty-page + 1 == 현재 페이지)인지 확인합니다.
if (new-chapter != here().page()) and (empty-page + 1 == here().page()) [
_페이지 번호를 생략해야 하는 빈 페이지입니다_
#return
]
}
let page-display = counter(page).display(here().page-numbering())
h(1fr) + page-display + h(1fr)
}
#show heading.where(level: 1): it => [
#[] <empty-page>
#pagebreak(to: "even", weak: true)
#[] <new-chapter>
#pagebreak(to: "odd", weak: true)
#it.body
#v(2em)
]
#show outline.entry.where(level: 1): it => {
// 대상 페이지에 대한 마지막 <empty-page> 레이블을 찾기 위해 레이블 쿼리 결과를 뒤집습니다.
// array.position() 메서드는 항상 첫 번째 항목을 반환하기 때문입니다.
let empty-pages = find-labels(<empty-page>).rev()
let new-chapters = query(<new-chapter>).rev()
let empty-page-index = empty-pages.position(page => page == int(it.page.text))
let new-chapter = new-chapters.at(empty-page-index)
link(new-chapter.location())[#it.body #box(width: 1fr)[#it.fill] #new-chapter.location().page()]
}
#set page(header: page-header, footer: page-footer, numbering: "1")
#outline()
= 설명
```
이 쿼리들은 해당 태그가 어디에 있는지 밝혀줍니다. 실제 빈 페이지는 항상 레이블 <empty-page>의 위치 + 1에 있습니다. 실제로 페이지 나누기에 의해 빈 페이지가 삽입되면, 두 레이블은 제목 페이지와 그 이전 페이지를 덮게 됩니다. 빈 페이지가 삽입되지 않은 경우, 두 레이블은 동일한 페이지를 가리키게 되며 이 역시 문제가 되지 않습니다. 심지어 그때도 <new-chapter> 레이블을 먼저 확인하여 더 높은 우선순위를 줄 수 있습니다.
첫 번째 <empty-page> 레이블은 항상 1페이지에 있으며 첫 번째 장 이전의 (존재하지 않는) 빈 페이지를 가리키므로 무시해도 됩니다.
레이블 <empty-page>가 있는 페이지들: #context find-labels(<empty-page>)
레이블 <new-chapter>가 있는 페이지들: #context find-labels(<new-chapter>)
```
= 제목
#lorem(190)
= 또 다른 제목
#lorem(100)
= 마지막 제목
#lorem(400)