pub struct PlaceElem {
pub body: Content,
/* private fields */
}
Expand description
Places content relatively to its parent container.
Placed content can be either overlaid (the default) or floating. Overlaid
content is aligned with the parent container according to the given
alignment
, and shown over any other content added so
far in the container. Floating content is placed at the top or bottom of
the container, displacing other content down or up respectively. In both
cases, the content position can be adjusted with dx
and
dy
offsets without affecting the layout.
The parent can be any container such as a [block
], [box
],
[rect
], etc. A top level place
call will place content directly
in the text area of the current page. This can be used for absolute
positioning on the page: with a top + left
alignment
, the offsets dx
and dy
will set the
position of the element’s top left corner relatively to the top left corner
of the text area. For absolute positioning on the full page including
margins, you can use place
in page.foreground
or
page.background
.
§Examples
#set page(height: 120pt)
Hello, world!
#rect(
width: 100%,
height: 2cm,
place(horizon + right, square()),
)
#place(
top + left,
dx: -5pt,
square(size: 5pt, fill: red),
)
§Effect on the position of other elements { #effect-on-other-elements }
Overlaid elements don’t take space in the flow of content, but a place
call inserts an invisible block-level element in the flow. This can
affect the layout by breaking the current paragraph. To avoid this,
you can wrap the place
call in a [box
] when the call is made
in the middle of a paragraph. The alignment and offsets will then be
relative to this zero-size box. To make sure it doesn’t interfere with
spacing, the box should be attached to a word using a word joiner.
For example, the following defines a function for attaching an annotation to the following word:
>>> #set page(height: 70pt)
#let annotate(..args) = {
box(place(..args))
sym.wj
h(0pt, weak: true)
}
A placed #annotate(square(), dy: 2pt)
square in my text.
The zero-width weak spacing serves to discard spaces between the function call and the next word.
Fields§
§body: Content
Implementations§
Source§impl PlaceElem
impl PlaceElem
Sourcepub fn with_alignment(self, alignment: Smart<Alignment>) -> Self
pub fn with_alignment(self, alignment: Smart<Alignment>) -> Self
Builder-style setter for the alignment
field.
Sourcepub fn with_scope(self, scope: PlacementScope) -> Self
pub fn with_scope(self, scope: PlacementScope) -> Self
Builder-style setter for the scope
field.
Sourcepub fn with_float(self, float: bool) -> Self
pub fn with_float(self, float: bool) -> Self
Builder-style setter for the float
field.
Sourcepub fn with_clearance(self, clearance: Length) -> Self
pub fn with_clearance(self, clearance: Length) -> Self
Builder-style setter for the clearance
field.
Sourcepub fn push_alignment(&mut self, alignment: Smart<Alignment>)
pub fn push_alignment(&mut self, alignment: Smart<Alignment>)
Setter for the alignment
field.
Sourcepub fn push_scope(&mut self, scope: PlacementScope)
pub fn push_scope(&mut self, scope: PlacementScope)
Setter for the scope
field.
Sourcepub fn push_float(&mut self, float: bool)
pub fn push_float(&mut self, float: bool)
Setter for the float
field.
Sourcepub fn push_clearance(&mut self, clearance: Length)
pub fn push_clearance(&mut self, clearance: Length)
Setter for the clearance
field.
Sourcepub fn alignment(&self, styles: StyleChain<'_>) -> Smart<Alignment>
pub fn alignment(&self, styles: StyleChain<'_>) -> Smart<Alignment>
Relative to which position in the parent container to place the content.
- If
float
is{false}
, then this can be any alignment other than{auto}
. - If
float
is{true}
, then this must be{auto}
,{top}
, or{bottom}
.
When float
is {false}
and no vertical alignment is specified, the
content is placed at the current position on the vertical axis.
Sourcepub fn scope(&self, styles: StyleChain<'_>) -> PlacementScope
pub fn scope(&self, styles: StyleChain<'_>) -> PlacementScope
Relative to which containing scope something is placed.
The parent scope is primarily used with figures and, for
this reason, the figure function has a mirrored scope
parameter. Nonetheless, it can also be more generally
useful to break out of the columns. A typical example would be to
create a single-column title section
in a two-column document.
Note that parent-scoped placement is currently only supported if float
is {true}
. This may change in the future.
#set page(height: 150pt, columns: 2)
#place(
top + center,
scope: "parent",
float: true,
rect(width: 80%, fill: aqua),
)
#lorem(25)
Sourcepub fn float(&self, styles: StyleChain<'_>) -> bool
pub fn float(&self, styles: StyleChain<'_>) -> bool
Whether the placed element has floating layout.
Floating elements are positioned at the top or bottom of the parent
container, displacing in-flow content. They are always placed in the
in-flow order relative to each other, as well as before any content
following a later [place.flush
] element.
#set page(height: 150pt)
#let note(where, body) = place(
center + where,
float: true,
clearance: 6pt,
rect(body),
)
#lorem(10)
#note(bottom)[Bottom 1]
#note(bottom)[Bottom 2]
#lorem(40)
#note(top)[Top]
#lorem(10)
Sourcepub fn clearance(&self, styles: StyleChain<'_>) -> <Length as Resolve>::Output
pub fn clearance(&self, styles: StyleChain<'_>) -> <Length as Resolve>::Output
The spacing between the placed element and other elements in a floating layout.
Has no effect if float
is {false}
.
Sourcepub fn dx(&self, styles: StyleChain<'_>) -> Rel<Length>
pub fn dx(&self, styles: StyleChain<'_>) -> Rel<Length>
The horizontal displacement of the placed content.
#set page(height: 100pt)
#for i in range(16) {
let amount = i * 4pt
place(center, dx: amount - 32pt, dy: amount)[A]
}
This does not affect the layout of in-flow content.
In other words, the placed content is treated as if it
were wrapped in a [move
] element.
Sourcepub fn dy(&self, styles: StyleChain<'_>) -> Rel<Length>
pub fn dy(&self, styles: StyleChain<'_>) -> Rel<Length>
The vertical displacement of the placed content.
This does not affect the layout of in-flow content.
In other words, the placed content is treated as if it
were wrapped in a [move
] element.
Sourcepub fn alignment_in(styles: StyleChain<'_>) -> Smart<Alignment>
pub fn alignment_in(styles: StyleChain<'_>) -> Smart<Alignment>
Access the alignment
field in the given style chain.
Sourcepub fn scope_in(styles: StyleChain<'_>) -> PlacementScope
pub fn scope_in(styles: StyleChain<'_>) -> PlacementScope
Access the scope
field in the given style chain.
Sourcepub fn float_in(styles: StyleChain<'_>) -> bool
pub fn float_in(styles: StyleChain<'_>) -> bool
Access the float
field in the given style chain.
Sourcepub fn clearance_in(styles: StyleChain<'_>) -> <Length as Resolve>::Output
pub fn clearance_in(styles: StyleChain<'_>) -> <Length as Resolve>::Output
Access the clearance
field in the given style chain.
Sourcepub fn dx_in(styles: StyleChain<'_>) -> Rel<Length>
pub fn dx_in(styles: StyleChain<'_>) -> Rel<Length>
Access the dx
field in the given style chain.
Sourcepub fn dy_in(styles: StyleChain<'_>) -> Rel<Length>
pub fn dy_in(styles: StyleChain<'_>) -> Rel<Length>
Access the dy
field in the given style chain.
Sourcepub fn set_alignment(alignment: Smart<Alignment>) -> Property
pub fn set_alignment(alignment: Smart<Alignment>) -> Property
Create a style property for the alignment
field.
Sourcepub fn set_scope(scope: PlacementScope) -> Property
pub fn set_scope(scope: PlacementScope) -> Property
Create a style property for the scope
field.
Sourcepub fn set_clearance(clearance: Length) -> Property
pub fn set_clearance(clearance: Length) -> Property
Create a style property for the clearance
field.
Trait Implementations§
Source§impl Fields for PlaceElem
impl Fields for PlaceElem
Source§fn field(&self, id: u8) -> Result<Value, FieldAccessError>
fn field(&self, id: u8) -> Result<Value, FieldAccessError>
Source§fn field_with_styles(
&self,
id: u8,
styles: StyleChain<'_>,
) -> Result<Value, FieldAccessError>
fn field_with_styles( &self, id: u8, styles: StyleChain<'_>, ) -> Result<Value, FieldAccessError>
Source§fn field_from_styles(
id: u8,
styles: StyleChain<'_>,
) -> Result<Value, FieldAccessError>
fn field_from_styles( id: u8, styles: StyleChain<'_>, ) -> Result<Value, FieldAccessError>
Source§fn materialize(&mut self, styles: StyleChain<'_>)
fn materialize(&mut self, styles: StyleChain<'_>)
Source§impl NativeElement for PlaceElem
impl NativeElement for PlaceElem
Source§impl NativeScope for PlaceElem
impl NativeScope for PlaceElem
Source§fn constructor() -> Option<&'static NativeFuncData>
fn constructor() -> Option<&'static NativeFuncData>
Auto Trait Implementations§
impl Freeze for PlaceElem
impl !RefUnwindSafe for PlaceElem
impl Send for PlaceElem
impl Sync for PlaceElem
impl Unpin for PlaceElem
impl !UnwindSafe for PlaceElem
Blanket Implementations§
Source§impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
Source§fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
Source§fn adapt_into(self) -> D
fn adapt_into(self) -> D
Source§impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
Source§fn arrays_from(colors: C) -> T
fn arrays_from(colors: C) -> T
Source§impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
Source§fn arrays_into(self) -> C
fn arrays_into(self) -> C
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
Source§type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
parameters
when converting.Source§fn cam16_into_unclamped(
self,
parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>,
) -> T
fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T
self
into C
, using the provided parameters.Source§impl<T> CheckedAs for T
impl<T> CheckedAs for T
Source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
Source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
Source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
Source§fn components_from(colors: C) -> T
fn components_from(colors: C) -> T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> FromAngle<T> for T
impl<T> FromAngle<T> for T
Source§fn from_angle(angle: T) -> T
fn from_angle(angle: T) -> T
angle
.Source§impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
Source§fn from_stimulus(other: U) -> T
fn from_stimulus(other: U) -> T
other
into Self
, while performing the appropriate scaling,
rounding and clamping.Source§impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
Source§fn into_angle(self) -> U
fn into_angle(self) -> U
T
.Source§impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
Source§type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
parameters
when converting.Source§fn into_cam16_unclamped(
self,
parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>,
) -> T
fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T
self
into C
, using the provided parameters.Source§impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
Source§fn into_color(self) -> U
fn into_color(self) -> U
Source§impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
Source§fn into_color_unclamped(self) -> U
fn into_color_unclamped(self) -> U
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoResult for Twhere
T: IntoValue,
impl<T> IntoResult for Twhere
T: IntoValue,
Source§fn into_result(self, _: Span) -> Result<Value, EcoVec<SourceDiagnostic>>
fn into_result(self, _: Span) -> Result<Value, EcoVec<SourceDiagnostic>>
Source§impl<T> IntoStimulus<T> for T
impl<T> IntoStimulus<T> for T
Source§fn into_stimulus(self) -> T
fn into_stimulus(self) -> T
self
into T
, while performing the appropriate scaling,
rounding and clamping.Source§impl<T> OverflowingAs for T
impl<T> OverflowingAs for T
Source§fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
Source§impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
Source§fn overflowing_cast_from(src: Src) -> (Dst, bool)
fn overflowing_cast_from(src: Src) -> (Dst, bool)
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> SaturatingAs for T
impl<T> SaturatingAs for T
Source§fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
Source§impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
Source§fn saturating_cast_from(src: Src) -> Dst
fn saturating_cast_from(src: Src) -> Dst
Source§impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
Source§type Error = <C as TryFromComponents<T>>::Error
type Error = <C as TryFromComponents<T>>::Error
try_into_colors
fails to cast.Source§fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
Source§impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
Source§fn try_into_color(self) -> Result<U, OutOfBounds<U>>
fn try_into_color(self) -> Result<U, OutOfBounds<U>>
OutOfBounds
error is returned which contains
the unclamped color. Read more