mirror of
https://github.com/typst/typst
synced 2025-05-14 04:56:26 +08:00
57 lines
1.4 KiB
Rust
57 lines
1.4 KiB
Rust
use typst_syntax::Spanned;
|
|
|
|
use crate::diag::bail;
|
|
use crate::foundations::{elem, Content, Value};
|
|
use crate::math::Mathy;
|
|
|
|
/// A mathematical fraction.
|
|
///
|
|
/// # Example
|
|
/// ```example
|
|
/// $ 1/2 < (x+1)/2 $
|
|
/// $ ((x+1)) / 2 = frac(a, b) $
|
|
/// ```
|
|
///
|
|
/// # Syntax
|
|
/// This function also has dedicated syntax: Use a slash to turn neighbouring
|
|
/// expressions into a fraction. Multiple atoms can be grouped into a single
|
|
/// expression using round grouping parentheses. Such parentheses are removed
|
|
/// from the output, but you can nest multiple to force them.
|
|
#[elem(title = "Fraction", Mathy)]
|
|
pub struct FracElem {
|
|
/// The fraction's numerator.
|
|
#[required]
|
|
pub num: Content,
|
|
|
|
/// The fraction's denominator.
|
|
#[required]
|
|
pub denom: Content,
|
|
}
|
|
|
|
/// A binomial expression.
|
|
///
|
|
/// # Example
|
|
/// ```example
|
|
/// $ binom(n, k) $
|
|
/// $ binom(n, k_1, k_2, k_3, ..., k_m) $
|
|
/// ```
|
|
#[elem(title = "Binomial", Mathy)]
|
|
pub struct BinomElem {
|
|
/// The binomial's upper index.
|
|
#[required]
|
|
pub upper: Content,
|
|
|
|
/// The binomial's lower index.
|
|
#[required]
|
|
#[variadic]
|
|
#[parse(
|
|
let values = args.all::<Spanned<Value>>()?;
|
|
if values.is_empty() {
|
|
// Prevents one element binomials
|
|
bail!(args.span, "missing argument: lower");
|
|
}
|
|
values.into_iter().map(|spanned| spanned.v.display()).collect()
|
|
)]
|
|
pub lower: Vec<Content>,
|
|
}
|