#mdbook #typst

bin+lib mdbook-typst-math

使用 typst 渲染数学的 mdbook 预处理器

2 个版本

0.1.1 2024 年 5 月 28 日
0.1.0 2024 年 5 月 27 日

573 in 文本处理

MIT 许可证

34KB
409

mdbook-typst-math

使用 typst 渲染数学的 mdbook 预处理器。

安装

cargo install --git https://github.com/duskmoon314/mdbook-typst-math
# OR
git clone https://github.com/duskmoon314/mdbook-typst-math.git
cargo build --release

使用方法

设置预处理器

将以下内容添加到您的 book.toml

[preprocessor.typst-math]
command = "/path/to/mdbook-typst-math"

路径通常是 ~/.cargo/bin/mdbook-typst-math,如果您使用 cargo 安装。

其他配置请参阅以下部分: 配置

控制样式

添加 CSS 以控制 typst 块的样式

/* css/typst.css as an example */
.typst-inline {
  display: inline flex;
  vertical-align: bottom;
}

.typst-display {
  display: block flex;
  justify-content: center;
}

.typst-display > .typst-doc {
  transform: scale(1.5);
}

将以下内容添加到您的 book.toml

[output.html]
additional-css = ["css/typst.css"]

此预处理器所做的工作

此预处理器将所有数学块转换为具有类 typst-inline/typst-display(取决于数学块的类型)的 <div>,并在其中包含具有类 <svg>typst-doc

假设您在 markdown 中有以下代码块

    hello
    $$
    y = f(x)
    $$
    world

此预处理器首先将其更改为

    hello
    $$
+   #set page(width:auto, height:auto, margin:0.5em)
+   $ y = f(x) $
-   y = f(x)
    $$
    world

上述是有效的 typst 代码。美元符号 $ 和空白字符用于让 typst 知道它是一个数学块,而不是内联数学。

然后预处理器将利用 typst 渲染数学块并将其更改为

hello
<div class="typst-display">
  <svg class="typst-doc" ...></svg>
</div>
world

配置

目前,仅支持以下配置。以下是一个示例,说明如何设置它们

[preprocessor.typst]

# Additional fonts to load
#
# Two types are supported: a string or an array of strings
#
# Usually, you don't need to set this since the default build of preprocessor
# will load system fonts and typst embedded fonts.
fonts = ["Fira Math"] # or "Fira Math"

# Preamble to be added before the typst code
#
# The default preamble is:
# ```
# #set page(width:auto, height:auto, margin:0.5em)
# ```
preamble = """
#set page(width:auto, height:auto, margin:0.5em)
#set text(size: 12pt)
#show math.equation: set text(font: "Fira Math")
"""

# Preamble to be added before the typst code for inline math
#
# If not set, the `preamble` will be used.
#
# Usually, this is not needed. But if you want to use different settings for
# inline math and display math, you can set this.
inline_preamble = """
#set page(width:auto, height:auto, margin:0.5em)
#set text(size: 12pt)
#show math.equation: set text(font: "Fira Math")
"""

# Preamble to be added before the typst code for display math
#
# If not set, the `preamble` will be used.
#
# Usually, this is not needed. But if you want to use different settings for
# inline math and display math, you can set this.
display_preamble = """
#set page(width:auto, height:auto, margin:0.5em)
#set text(size: 14pt)
#show math.equation: set text(font: "Fira Math")
"""

待办事项

  • 在代码中集成 typst 而不是使用 std::process::Commend
    • 重构代码以提高可读性和可维护性
  • 允许用户通过 book.toml 配置前言

依赖项

~74MB
~1M SLoC