5 个版本 (3 个重大更新)

0.4.0 2023 年 12 月 27 日
0.3.1 2023 年 12 月 22 日
0.3.0 2023 年 12 月 22 日
0.2.0 2023 年 12 月 15 日
0.1.0 2023 年 8 月 19 日

#184 in 图形 API

Apache-2.0

105KB
2.5K SLoC

Build CI Documentation Crates

mathemascii - AsciiMath 解析器

这是一个用 Rust 编写的 AsciiMath 解析器。

使用方法

这个 crate 的 API 被设计得尽可能直观。以下是一个示例

let input = "sum_(i=0)^(k * 2) a^k";

// Creates an iterator over the input that yields expressions
let ascii_math = mathemascii::parse(&input);

// renders the expressions into a single `<math>` block with the default renderer
let math_ml = mathemascii::render_mathml(ascii_math);

println!("{math_ml}");

mathemascii 使用 alemat 作为生成 MathMl 输出的底层 crate。

还有一个 API,您可以使用自定义的 alemat::Writer 进行渲染

let input = "sum_(i=0)^(k * 2) a^k";

// Creates an iterator over the input that yields expressions
let ascii_math = mathemascii::parse(&input);

// create a writer, here we use the default writer.
let mut writer = BufMathMlWriter::default();

// renders the expressions into a single `<math>` block and writes it into the buffer of the writer.
let _ = mathemascii::write_mathml(ascii_math, &mut writer);

// get the inner buffer of the writer
let math_ml = writer.into_inner();

println!("{math_ml}");

为了方便起见,mathemascii::write_mathml 函数返回包含作为第二个参数传入的 Writer 可变引用的 Result。这允许就地初始化 Writer 并对其进行操作

let input = "sum_(i=0)^(k * 2) a^k";

// Creates an iterator over the input that yields expressions
let ascii_math = mathemascii::parse(&input);

// Write the expressions into a single `<math>` block with the given writer
let math_ml = mathemascii::write_mathml(ascii_math, &mut BufMathMlWriter::default())
    .map(|w| w.finish()) // finish writing and output the buffer
    .unwrap(); // unwrap the result

默认使用的 writer 是来自 alemat 的 BufMathMlWriter。此 writer 使用 String 作为其缓冲区,写入它是无错误的。因此,它使用 Infallible,因此总是安全地展开结果。如果您使用自定义的 Writer 实现,您可能需要处理错误情况。

示例

使用方法部分中显示的代码产生以下输出

<math>
<munderover>
  <mo></mo>
  <mrow>
    <mphantom><mo>{</mo></mphantom>
    <mi>i</mi><mo>=</mo><mn>0</mn>
    <mphantom><mo>}</mo></mphantom></mrow>
  <mrow>
    <mphantom><mo>{</mo></mphantom>
    <mi>k</mi><mo></mo><mn>2</mn>
    <mphantom><mo>}</mo></mphantom>
  </mrow>
</munderover>
<msup>
  <mi>a</mi>
  <mi>k</mi>
</msup>
</math>

在浏览器中产生以下渲染效果

$$\sum_{n = 0}^{k * 2}{a^k}$$

依赖项

~165KB