mirror of
https://github.com/typst/typst
synced 2025-08-07 03:37:55 +08:00
59 lines
1.7 KiB
Rust
59 lines
1.7 KiB
Rust
use crate::diag::SourceResult;
|
|
use crate::engine::Engine;
|
|
use crate::foundations::{elem, Content, Packed, Show, StyleChain};
|
|
use crate::text::TextElem;
|
|
|
|
/// Displays text in small capitals.
|
|
///
|
|
/// # Example
|
|
/// ```example
|
|
/// Hello \
|
|
/// #smallcaps[Hello]
|
|
/// ```
|
|
///
|
|
/// # Smallcaps fonts
|
|
/// By default, this enables the OpenType `smcp` feature for the font. Not all
|
|
/// fonts support this feature. Sometimes smallcaps are part of a dedicated
|
|
/// font. This is, for example, the case for the _Latin Modern_ family of fonts.
|
|
/// In those cases, you can use a show-set rule to customize the appearance of
|
|
/// the text in smallcaps:
|
|
///
|
|
/// ```typ
|
|
/// #show smallcaps: set text(font: "Latin Modern Roman Caps")
|
|
/// ```
|
|
///
|
|
/// In the future, this function will support synthesizing smallcaps from normal
|
|
/// letters, but this is not yet implemented.
|
|
///
|
|
/// # Smallcaps headings
|
|
/// You can use a [show rule]($styling/#show-rules) to apply smallcaps
|
|
/// formatting to all your headings. In the example below, we also center-align
|
|
/// our headings and disable the standard bold font.
|
|
///
|
|
/// ```example
|
|
/// #set par(justify: true)
|
|
/// #set heading(numbering: "I.")
|
|
///
|
|
/// #show heading: smallcaps
|
|
/// #show heading: set align(center)
|
|
/// #show heading: set text(
|
|
/// weight: "regular"
|
|
/// )
|
|
///
|
|
/// = Introduction
|
|
/// #lorem(40)
|
|
/// ```
|
|
#[elem(title = "Small Capitals", Show)]
|
|
pub struct SmallcapsElem {
|
|
/// The content to display in small capitals.
|
|
#[required]
|
|
pub body: Content,
|
|
}
|
|
|
|
impl Show for Packed<SmallcapsElem> {
|
|
#[typst_macros::time(name = "smallcaps", span = self.span())]
|
|
fn show(&self, _: &mut Engine, _: StyleChain) -> SourceResult<Content> {
|
|
Ok(self.body().clone().styled(TextElem::set_smallcaps(true)))
|
|
}
|
|
}
|