mirror of
https://github.com/typst/typst
synced 2025-05-13 20:46:23 +08:00
130 lines
3.1 KiB
Typst
130 lines
3.1 KiB
Typst
--- locate-position ---
|
|
// Test `locate`.
|
|
#v(10pt)
|
|
= Introduction <intro>
|
|
#context test(locate(<intro>).position().y, 20pt)
|
|
|
|
--- locate-position-trailing-tag ---
|
|
// Test locating the position of a tag with no following content.
|
|
#context test(here().position().y, 10pt)
|
|
#box[]
|
|
#v(10pt)
|
|
#context test(here().position().y, 20pt)
|
|
|
|
--- locate-missing-label ---
|
|
// Error: 10-25 label `<intro>` does not exist in the document
|
|
#context locate(<intro>)
|
|
|
|
--- locate-duplicate-label ---
|
|
= Introduction <intro>
|
|
= Introduction <intro>
|
|
|
|
// Error: 10-25 label `<intro>` occurs multiple times in the document
|
|
#context locate(<intro>)
|
|
|
|
--- locate-element-selector ---
|
|
#v(10pt)
|
|
= Introduction <intro>
|
|
#context test(locate(heading).position().y, 20pt)
|
|
|
|
--- locate-element-selector-no-match ---
|
|
// Error: 10-25 selector does not match any element
|
|
#context locate(heading)
|
|
|
|
--- locate-element-selector-multiple-matches ---
|
|
= Introduction <intro>
|
|
= Introduction <intro>
|
|
|
|
// Error: 10-25 selector matches multiple elements
|
|
#context locate(heading)
|
|
|
|
--- locate-between-pages ---
|
|
// Test locating tags that are before or between pages.
|
|
#set page(height: 30pt)
|
|
#context [
|
|
// Before the first page.
|
|
// (= at the very start of the first page, before the header)
|
|
#test(locate(<a>).position(), (page: 1, x: 0pt, y: 0pt))
|
|
|
|
// On the first page.
|
|
#test(locate(<b>).position(), (page: 1, x: 10pt, y: 10pt))
|
|
|
|
// Between the two pages.
|
|
// (= at the very start of the first page, before the header)
|
|
#test(locate(<c>).position(), (page: 2, x: 0pt, y: 0pt))
|
|
|
|
// After the last page.
|
|
// (= at the very end of the last page, after the footer)
|
|
#test(locate(<d>).position(), (page: 2, x: 0pt, y: 30pt))
|
|
#test(locate(<e>).position(), (page: 2, x: 0pt, y: 30pt))
|
|
]
|
|
|
|
#metadata(none) <a>
|
|
#pagebreak(weak: true)
|
|
#metadata(none) <b>
|
|
A
|
|
#pagebreak()
|
|
#metadata(none) <c>
|
|
#pagebreak(weak: true)
|
|
B
|
|
#pagebreak(weak: true)
|
|
#metadata(none) <d>
|
|
#pagebreak(weak: true)
|
|
#metadata(none) <e>
|
|
|
|
--- issue-4029-locate-after-spacing ---
|
|
#set page(margin: 10pt)
|
|
#show heading: it => v(40pt) + it
|
|
|
|
= Introduction
|
|
#context test(
|
|
locate(heading).position(),
|
|
(page: 1, x: 10pt, y: 50pt),
|
|
)
|
|
|
|
|
|
--- issue-4029-locate-after-pagebreak ---
|
|
#set page(margin: 10pt)
|
|
#show heading: it => pagebreak() + it
|
|
|
|
= Introduction
|
|
#context test(
|
|
locate(heading).position(),
|
|
(page: 2, x: 10pt, y: 10pt),
|
|
)
|
|
|
|
--- issue-4029-locate-after-par-and-pagebreak ---
|
|
// Ensure that the heading's tag isn't stuck at the end of the paragraph.
|
|
#set page(margin: 10pt)
|
|
Par
|
|
#show heading: it => pagebreak() + it
|
|
= Introduction
|
|
#context test(locate(heading).page(), 2)
|
|
|
|
--- issue-1886-locate-after-metadata ---
|
|
#show heading: it => {
|
|
metadata(it.label)
|
|
pagebreak(weak: true, to: "odd")
|
|
it
|
|
}
|
|
|
|
Hi
|
|
= Hello <hello>
|
|
= World <world>
|
|
|
|
// The metadata's position does not migrate to the next page, but the heading's
|
|
// does.
|
|
#context {
|
|
test(locate(metadata.where(value: <hello>)).page(), 1)
|
|
test(locate(<hello>).page(), 3)
|
|
test(locate(metadata.where(value: <world>)).page(), 3)
|
|
test(locate(<world>).page(), 5)
|
|
}
|
|
|
|
--- issue-1833-locate-place ---
|
|
#set page(height: 60pt)
|
|
#context {
|
|
place(right + bottom, rect())
|
|
test(here().position(), (page: 1, x: 10pt, y: 10pt))
|
|
}
|