Featured image of post 实现 Typst 中的中文两侧对齐功能

实现 Typst 中的中文两侧对齐功能

引言

在排版文档时,我们经常需要让文本在页面两侧对齐,以实现整洁和专业的视觉效果。Typst 作为一个现代的排版系统,虽然 par 提供了 justify 属性来实现英文的两侧对齐,但对于中文排版,这一功能却不尽如人意。为了解决这个问题,我开发了一段代码,使得中文文本也能在 Typst 中实现完美的两侧对齐。

Typst 原生对齐的局限性

parjustify 属性能够自动调整英文单词间的空格,使得每一行的首尾都能对齐页面的左右边缘。然而,中文字符之间没有空格,使得 justify 属性在中文排版中效果有限,常常导致排版不美观。

开发中文对齐功能的动机

为了改善中文排版的效果,我决定编写一段代码,通过插入可伸缩的空白(fraction),使得中文文本在 Typst 中也能实现两侧对齐。这样的处理可以让 justify 属性有足够的空白进行调整,从而达到自然对齐的效果。

实现中文两侧对齐的代码

以下是我编写的代码,用于实现 Typst 中的中文两侧对齐功能:

#let distr(s, w: auto) = {
  block(width: w, stack(dir: ltr, ..s.clusters().map(x => [#x]).intersperse(1fr)))
}

这段代码通过创建一个名为 distr 的函数,该函数接受一个字符串和一个宽度参数,然后使用 stackintersperse 方法来分布文本,实现两侧对齐的效果。

使用方法

在 Typst 文档中,你可以通过以下方式使用这段代码来实现中文的两侧对齐:

  1. 首先,将上述代码片段添加到你的 Typst 文档中。
  2. 然后,使用 distr 函数并传入需要对齐的文本和容器宽度。

例如:

#distr("这是一段需要对齐的中文文本。", 4em)

这将使得传入的中文文本在指定的容器内实现两侧对齐。

结语

通过这段代码,我们不仅解决了 Typst 在中文排版上的一个痛点,还提升了文档的整体美观度。我希望这个解决方案能够帮助到更多的 Typst 用户,让他们在处理中文文档时能够更加得心应手。未来,我期待与社区一起探索更多提升 Typst 排版能力的方法。

使用 Hugo 构建
主题 StackJimmy 设计