mirror of
https://github.com/typst/typst
synced 2025-05-13 20:46:23 +08:00
391 lines
8.9 KiB
Typst
391 lines
8.9 KiB
Typst
// Test the `place` function.
|
|
|
|
--- place-basic ---
|
|
#set page("a8")
|
|
#place(bottom + center)[E]
|
|
|
|
= A
|
|
#place(right, rect(width: 1.8cm))
|
|
#lines(5)
|
|
|
|
#stack(
|
|
rect(fill: eastern, height: 10pt, width: 100%),
|
|
place(right, dy: 1.5pt)[ABC],
|
|
rect(fill: conifer, height: 10pt, width: 80%),
|
|
rect(fill: forest, height: 10pt, width: 100%),
|
|
10pt,
|
|
block[
|
|
#place(center, dx: -7pt, dy: -5pt)[A]
|
|
#place(center, dx: 7pt, dy: 5pt)[B]
|
|
C #h(1fr) D
|
|
]
|
|
)
|
|
|
|
--- place-block-spacing ---
|
|
// Test how the placed element interacts with paragraph spacing around it.
|
|
#set page("a8", height: 60pt)
|
|
|
|
First
|
|
|
|
#place(bottom + right)[Placed]
|
|
|
|
Second
|
|
|
|
--- place-bottom-in-box ---
|
|
#box(
|
|
fill: aqua,
|
|
width: 30pt,
|
|
height: 30pt,
|
|
place(bottom,
|
|
place(line(start: (0pt, 0pt), end: (20pt, 0pt), stroke: red + 3pt))
|
|
)
|
|
)
|
|
|
|
--- place-horizon-in-boxes ---
|
|
#box(
|
|
fill: aqua,
|
|
width: 30pt,
|
|
height: 30pt,
|
|
{
|
|
box(fill: yellow, {
|
|
[Hello]
|
|
place(horizon, line(start: (0pt, 0pt), end: (20pt, 0pt), stroke: red + 2pt))
|
|
})
|
|
place(horizon, line(start: (0pt, 0pt), end: (20pt, 0pt), stroke: green + 3pt))
|
|
}
|
|
)
|
|
|
|
--- place-bottom-right-in-box ---
|
|
#box(fill: aqua)[
|
|
#place(bottom + right)[Hi]
|
|
Hello World \
|
|
How are \
|
|
you?
|
|
]
|
|
|
|
--- place-top-left-in-box ---
|
|
#box(fill: aqua)[
|
|
#place(top + left, dx: 50%, dy: 50%)[Hi]
|
|
#v(30pt)
|
|
#line(length: 50pt)
|
|
]
|
|
|
|
--- place-float-flow-around ---
|
|
#set page(height: 80pt)
|
|
#set place(float: true)
|
|
#place(bottom + center, rect(height: 20pt))
|
|
#lines(4)
|
|
|
|
--- place-float-queued ---
|
|
#set page(height: 180pt)
|
|
#set figure(placement: auto)
|
|
|
|
#figure(rect(height: 60pt), caption: [I])
|
|
#figure(rect(height: 40pt), caption: [II])
|
|
#figure(rect(), caption: [III])
|
|
A
|
|
#figure(rect(), caption: [IV])
|
|
|
|
--- place-float-align-auto ---
|
|
#set page(height: 140pt)
|
|
#set place(auto, float: true, clearance: 5pt)
|
|
|
|
#place(rect[A])
|
|
#place(rect[B])
|
|
1 \ 2
|
|
#place(rect[C])
|
|
#place(rect[D])
|
|
|
|
--- place-float-delta ---
|
|
#place(top + center, float: true, dx: 10pt, rect[I])
|
|
A
|
|
#place(bottom + center, float: true, dx: -10pt, rect[II])
|
|
|
|
--- place-float-flow-size ---
|
|
#set page(width: auto, height: auto)
|
|
#set place(float: true, clearance: 5pt)
|
|
|
|
#place(bottom, rect(width: 80pt, height: 10pt))
|
|
#place(top + center, rect(height: 20pt))
|
|
#align(center)[A]
|
|
#pagebreak()
|
|
#align(center)[B]
|
|
#place(bottom, scope: "page", rect(height: 10pt))
|
|
|
|
--- place-float-flow-size-alone ---
|
|
#set page(width: auto, height: auto)
|
|
#set place(float: true, clearance: 5pt)
|
|
#place(auto)[A]
|
|
|
|
--- place-float-fr ---
|
|
#set page(height: 120pt, columns: 2)
|
|
#set place(float: true, clearance: 10pt)
|
|
#set rect(width: 70%)
|
|
|
|
#place(top + center, rect[I])
|
|
#place(bottom + center, scope: "page", rect[II])
|
|
|
|
A
|
|
#v(1fr)
|
|
B
|
|
#colbreak()
|
|
C
|
|
#align(bottom)[D]
|
|
|
|
--- place-float-rel-sizing ---
|
|
#set page(height: 100pt, columns: 2)
|
|
#set place(float: true, clearance: 10pt)
|
|
#set rect(width: 70%)
|
|
|
|
#place(top + center, scope: "page", rect[I])
|
|
#place(top + center, rect[II])
|
|
|
|
// This test result is not ideal: The first column takes 30% of the full page,
|
|
// while the second takes 30% of the remaining space since there is no concept
|
|
// of `full` for followup pages.
|
|
#set align(bottom)
|
|
#rect(width: 100%, height: 30%)
|
|
#rect(width: 100%, height: 30%)
|
|
|
|
--- place-float-block-backlog ---
|
|
#set page(height: 100pt)
|
|
#v(60pt)
|
|
#place(top, float: true, rect())
|
|
#list(.."ABCDEFGHIJ".clusters())
|
|
|
|
--- place-float-clearance-empty ---
|
|
// Check that we don't require space for clearance if there is no content.
|
|
#set page(height: 100pt)
|
|
#v(1fr)
|
|
#table(
|
|
columns: (1fr, 1fr),
|
|
lines(2),
|
|
[],
|
|
lines(8),
|
|
place(auto, float: true, block(width: 100%, height: 100%, fill: aqua))
|
|
)
|
|
|
|
|
|
--- place-float-column-align-auto ---
|
|
#set page(height: 150pt, columns: 2)
|
|
#set place(auto, float: true, clearance: 10pt)
|
|
#set rect(width: 75%)
|
|
|
|
#place(rect[I])
|
|
#place(rect[II])
|
|
#place(rect[III])
|
|
#place(rect[IV])
|
|
|
|
#lines(6)
|
|
|
|
#place(rect[V])
|
|
#place(rect[VI])
|
|
|
|
--- place-float-column-queued ---
|
|
#set page(height: 100pt, columns: 2)
|
|
#set place(float: true, clearance: 10pt)
|
|
#set rect(width: 75%)
|
|
#set text(costs: (widow: 0%, orphan: 0%))
|
|
|
|
#lines(3)
|
|
|
|
#place(top, rect[I])
|
|
#place(top, rect[II])
|
|
#place(bottom, rect[III])
|
|
|
|
#lines(3)
|
|
|
|
--- place-float-twocolumn ---
|
|
#set page(height: 100pt, columns: 2)
|
|
#set place(float: true, clearance: 10pt)
|
|
#set rect(width: 70%)
|
|
|
|
#place(top + center, scope: "page", rect[I])
|
|
#place(top + center, rect[II])
|
|
#lines(4)
|
|
#place(top + center, rect[III])
|
|
#block(width: 100%, height: 70pt, fill: conifer)
|
|
#place(bottom + center, scope: "page", rect[IV])
|
|
#place(bottom + center, rect[V])
|
|
#v(1pt, weak: true)
|
|
#block(width: 100%, height: 60pt, fill: aqua)
|
|
|
|
--- place-float-twocolumn-queued ---
|
|
#set page(height: 100pt, columns: 2)
|
|
#set place(float: true, scope: "page", clearance: 10pt)
|
|
#let t(align, fill) = place(top + align, rect(fill: fill, height: 25pt))
|
|
|
|
#t(left, aqua)
|
|
#t(center, forest)
|
|
#t(right, conifer)
|
|
#lines(7)
|
|
|
|
--- place-float-twocolumn-align-auto ---
|
|
#set page(height: 100pt, columns: 2)
|
|
#set place(float: true, clearance: 10pt)
|
|
#set rect(width: 70%)
|
|
|
|
#place(auto, scope: "page", rect[I]) // Should end up `top`
|
|
#lines(4)
|
|
#place(auto, scope: "page", rect[II]) // Should end up `bottom`
|
|
#lines(4)
|
|
|
|
--- place-float-twocolumn-fits ---
|
|
#set page(height: 100pt, columns: 2)
|
|
#set place(float: true, clearance: 10pt)
|
|
#set rect(width: 70%)
|
|
|
|
#lines(6)
|
|
#place(auto, scope: "page", rect[I])
|
|
#lines(12, "1")
|
|
|
|
--- place-float-twocolumn-fits-not ---
|
|
#set page(height: 100pt, columns: 2)
|
|
#set place(float: true, clearance: 10pt)
|
|
#set rect(width: 70%)
|
|
|
|
#lines(10)
|
|
#place(auto, scope: "page", rect[I])
|
|
#lines(10, "1")
|
|
|
|
--- place-float-threecolumn ---
|
|
#set page(height: 100pt, columns: 3)
|
|
#set place(float: true, clearance: 10pt)
|
|
#set rect(width: 70%)
|
|
|
|
#place(bottom + center, scope: "page", rect[I])
|
|
#lines(21)
|
|
#place(top + center, scope: "page", rect[II])
|
|
|
|
--- place-float-threecolumn-block-backlog ---
|
|
#set page(height: 100pt, columns: 3)
|
|
#set place(float: true, clearance: 10pt)
|
|
#set rect(width: 70%)
|
|
|
|
// The most important part of this test is that we get the backlog of the
|
|
// conifer (green) block right.
|
|
#place(top + center, scope: "page", rect[I])
|
|
#block(fill: aqua, width: 100%, height: 70pt)
|
|
#block(fill: conifer, width: 100%, height: 160pt)
|
|
#place(bottom + center, scope: "page", rect[II])
|
|
#place(top, rect(height: 40%)[III])
|
|
#block(fill: yellow, width: 100%, height: 60pt)
|
|
|
|
--- place-float-counter ---
|
|
#let c = counter("c")
|
|
#let cd = context c.display()
|
|
|
|
#set page(
|
|
height: 100pt,
|
|
margin: (y: 20pt),
|
|
header: [H: #cd],
|
|
footer: [F: #cd],
|
|
columns: 2,
|
|
)
|
|
|
|
#let t(align, scope: "column", n) = place(
|
|
align,
|
|
float: true,
|
|
scope: scope,
|
|
clearance: 10pt,
|
|
line(length: 100%) + c.update(n),
|
|
)
|
|
|
|
#t(bottom, 6)
|
|
#cd
|
|
#t(top, 3)
|
|
#colbreak()
|
|
#cd
|
|
#t(scope: "page", bottom, 11)
|
|
#colbreak()
|
|
#cd
|
|
#t(top, 12)
|
|
|
|
--- place-float-missing ---
|
|
// Error: 2-20 automatic positioning is only available for floating placement
|
|
// Hint: 2-20 you can enable floating placement with `place(float: true, ..)`
|
|
#place(auto)[Hello]
|
|
|
|
--- place-float-center-horizon ---
|
|
// Error: 2-45 vertical floating placement must be `auto`, `top`, or `bottom`
|
|
#place(center + horizon, float: true)[Hello]
|
|
|
|
--- place-float-horizon ---
|
|
// Error: 2-36 vertical floating placement must be `auto`, `top`, or `bottom`
|
|
#place(horizon, float: true)[Hello]
|
|
|
|
--- place-float-default ---
|
|
// Error: 2-27 vertical floating placement must be `auto`, `top`, or `bottom`
|
|
#place(float: true)[Hello]
|
|
|
|
--- place-float-right ---
|
|
// Error: 2-34 vertical floating placement must be `auto`, `top`, or `bottom`
|
|
#place(right, float: true)[Hello]
|
|
|
|
--- place-flush ---
|
|
#set page(height: 120pt)
|
|
#let floater(align, height) = place(
|
|
align,
|
|
float: true,
|
|
rect(width: 100%, height: height),
|
|
)
|
|
|
|
#floater(top, 30pt)
|
|
A
|
|
|
|
#floater(bottom, 50pt)
|
|
#place.flush()
|
|
B // Should be on the second page.
|
|
|
|
--- place-flush-figure ---
|
|
#set page(height: 120pt)
|
|
#let floater(align, height, caption) = figure(
|
|
placement: align,
|
|
caption: caption,
|
|
rect(width: 100%, height: height),
|
|
)
|
|
|
|
#floater(top, 30pt)[I]
|
|
A
|
|
|
|
#floater(bottom, 50pt)[II]
|
|
#place.flush()
|
|
B // Should be on the second page.
|
|
|
|
--- issue-place-base ---
|
|
// Test that placement is relative to container and not itself.
|
|
#set page(height: 80pt, margin: 0pt)
|
|
#place(right, dx: -70%, dy: 20%, [First])
|
|
#place(left, dx: 20%, dy: 60%, [Second])
|
|
#place(center + horizon, dx: 25%, dy: 25%, [Third])
|
|
|
|
--- issue-1368-place-pagebreak ---
|
|
// Test placing on an already full page.
|
|
// It shouldn't result in a page break.
|
|
#set page(height: 40pt)
|
|
#block(height: 100%)
|
|
#place(bottom + right)[Hello world]
|
|
|
|
--- issue-2199-place-spacing-bottom ---
|
|
// Test that placed elements don't add extra block spacing.
|
|
#show figure: set block(spacing: 4em)
|
|
|
|
Paragraph before float.
|
|
#figure(rect(), placement: bottom)
|
|
Paragraph after float.
|
|
|
|
--- issue-2199-place-spacing-default ---
|
|
#show place: set block(spacing: 4em)
|
|
|
|
Paragraph before place.
|
|
#place(rect())
|
|
Paragraph after place.
|
|
|
|
--- issue-2595-float-overlap ---
|
|
#set page(height: 80pt)
|
|
|
|
1
|
|
#place(auto, float: true, block(height: 100%, width: 100%, fill: aqua))
|
|
#place(auto, float: true, block(height: 100%, width: 100%, fill: red))
|
|
#lines(7)
|