Featured image of post 在 Typst 中实现 LaTeX 风格的 Labeling 环境:koma-labeling 包的诞生

在 Typst 中实现 LaTeX 风格的 Labeling 环境:koma-labeling 包的诞生

提示

包已发布在 Typst Universe: koma-labeling

引言

在科学写作和文档排版的世界里,LaTeX 以其强大的排版能力和精确的格式控制而闻名。其中,KOMA-Script 是一个广受欢迎的 LaTeX 宏包集合,它提供了许多便捷的文档类和环境,包括一个非常有用的 labeling 环境,用于创建带有标签的列表。然而,当我们转向 Typst —— 一个新兴的、面向未来的排版系统时,我们发现它原生并不支持 labeling 环境。这激发了我开发一个 Typst package —— koma-labeling,以在 Typst 中复刻 KOMA-Script 的这一功能。

一个 KOMA-Script labeling 示例:

\setkomafont{labelinglabel}{\ttfamily}
\setkomafont{labelingseparator}{\normalfont}
\begin{labeling}[---]{myheadings}
    \item[empty] Page style without header or footer
    \item[plain] Page style for chapter beginnings without headings
    \item[headings] Page style for running headings
    \item[myheadings] Page style for manual headings
\end{labeling}

输出:

output

开发初衷

在 Typst 中工作时,我经常怀念 KOMA-Script labeling 环境的便捷性,它使得创建结构化描述和列表变得简单直观。为了将这种便利带入 Typst,我决定开发一个名为 koma-labeling 的 package,旨在提供类似的功能,同时保持 Typst 的简洁性和易用性。


koma-labeling包的效果

koma-labeling 包的设计灵感来源于 LaTeX 中的 KOMA-Script labeling 环境。它提供了一种便捷的方式来创建带有可定制标签宽度和可选分隔符的标签列表。以下是如何在 Typst 文档中使用 koma-labeling 包的简单示例:

#import "@preview/koma-labeling:0.1.0": labeling

#labeling(
  (
    (lorem(1), lorem(10)),
    (lorem(2), lorem(20)),
    (lorem(3), lorem(30)),
  )
)

输出结果将是一个结构化的标签列表,每个标签后面紧跟着对应的描述。

警告

无论传入多少对 (item, description),即便只有一对,列表也必须以逗号结束。

#labeling(
  (
    (lorem(1), lorem(10)),  // 以逗号结束
  )
)

参数和自定义

虽然 labeling 是使用 tables 实现的,但其用法与 terms 相似,只是缺少了 tighthanging-indent 参数。以下是 labeling 的一些关键参数:

  • separator:项目和描述之间的分隔符,默认为 [:#h(0.6em)]
  • indent:每个项目的缩进,默认为 0pt
  • spacing:项列表之间的间距,默认为 auto
  • pairs(item, description) 对的数组。

示例代码:

#labeling(
  (
    ([key 1],[description 1]),
    ([keyword 2],[description 2]),
  )
)

结语

通过开发 koma-labeling 包,我希望能够为 Typst 社区带来一丝 LaTeX 的熟悉感,同时保持 Typst 的现代和简洁。这个包不仅满足了我个人的需求,也为所有希望在 Typst 中实现类似 KOMA-Script labeling 环境的用户提供了一个解决方案。我期待看到大家如何使用这个包,并希望它能够激发更多的 Typst 创新和开发。

使用 Hugo 构建
主题 StackJimmy 设计