use symplex::prelude::*;
fn main() {
println!("=== LaTeX Output ===\n");
let ctx = Context::new();
symplex::syms!(ctx; x, y);
let exprs: Vec<(&str, Ex)> = vec![
("Quadratic", expr!(ctx, x ^ 2 + 2 * x + 1)),
("Fraction", ctx.rational(3, 7)),
("Trig", expr!(ctx, sin(x) ^ 2 + cos(x) ^ 2)),
("Derivative", expr!(ctx, x ^ 3 + x).diff(&x)),
("Square root", expr!(ctx, x).sqrt()),
];
for (name, e) in &exprs {
println!("{name}:");
println!(" Display: {e}");
println!(" LaTeX: {}", e.to_latex());
println!();
}
let anti = expr!(ctx, x ^ 2).integrate(&x);
println!("Integral:");
println!(" Display: {anti}");
println!(" LaTeX: {}", anti.to_latex());
println!();
let multi = &x.powi(2) + &y.powi(2);
println!("Multivariate:");
println!(" Display: {multi}");
println!(" LaTeX: {}", multi.to_latex());
println!();
let m = matrix![ctx, [1, 2], [3, 4]];
println!("Matrix:");
println!(" Display: {m}");
println!(" LaTeX:\n {}", m.to_latex());
println!();
let f = expr!(ctx, x ^ 2 + 1);
println!("Inline: {}", f.to_latex_inline());
println!("Display: {}", f.to_latex_display());
println!("\n✓ Done!");
}