Pandoc Typst 属性输出

除了 Pandoc 的 Typst Writer 内置的结构属性输出外,该 Writer 还可以输出非结构化的 Typst 属性。这可以通过在支持的元素上设置形如 typst:proptypst:text:prop 的属性来启用。

Typst 属性

Typst 允许作为参数来指定视觉和布局属性,例如:

#block(fill=orange)[Hello]

以及规则集:

#set text(fill=blue); Hello

这些参数值是 Typst 代码,可以使用 Typst 语言的任何特性。

Pandoc Typst 属性输出

对于一系列支持的 Pandoc 元素,Pandoc 的 Typst Writer 将会以对应的 Typst 元素或文本规则参数的形式输出属性。

Typst Writer 寻找形如 typst:proptypst:text:prop 的属性,并假设其值是原始的 Typst 代码。

prop 是要设置的属性名称。

例如,使用命令 pandoc -f html -t typst 和以下 HTML 输入:

<div typst:inset="10pt">foo</div>

将会产生以下 Typst 输出:

#block(inset: 10pt)[
foo
]

而使用以下 HTML 输入:

<div typst:text:fill="purple">foo</div>

将会产生以下 Typst 输出:

#block[
#set text(fill: purple); foo
]

Writer 不会检查 prop 或其值的有效性。由于 Typst 是一种静态类型的语言,不正确的属性名或值通常会导致编译失败。

支持的元素

目前支持以下 Pandoc AST 元素。未来可能会支持更多元素。

  • Span:

    • typst:text:prop: 内容被包裹在一个具有指定属性的 Typst 文本元素 中。
  • Div:

    • typst:prop: prop 作为参数输出到 Typst 的 块元素

    • typst:text:prop: prop 作为参数输出到块内容开始处的文本规则。

  • Table:

    • typst:prop: prop 作为参数输出到 Typst 的 表格元素

    • typst:text:prop: 表格被包裹在一个具有 prop 作为参数之一的 Typst 文本元素 中。

    • typst:no-figure: 默认情况下,Pandoc 将表格包裹在 Typst 的 图元素 中。如果设置了此属性,则仅输出表格元素本身。这样可以避免 Typst 的种类为 table 的交叉引用计数器递增。

    • typst:figure:kind: 如果设置了此属性,Pandoc 将表格包裹在一个具有指定 kind 属性的 Typst 图元素中。这对于希望在文档中以不同于 “表...” 的方式进行交叉引用的表格非常有用。Typst 会根据 kind 属性递增相应的计数器:rawimage

  • Table Cell:

    • typst:prop: prop 作为参数输出到 Typst 表格的 单元格元素
    • typst:text:prop: prop 作为参数输出到单元格内容开始处的文本规则。

Lua 过滤器示例

这是一个简单的 Lua 过滤器示例,它将 Span 元素上的 CSS 颜色属性 转换为 Typst 文本元素上的等效 填充参数

function styleToTable(style)
  if not style then return nil end
  local ret = {}
  for clause in style:gmatch('([^;]+)') do
    k,v = clause:match("([%w-]+)%s*:%s*(.*)$")
    ret[k] = v
  end
  return ret
end

function Span(span)
  local style = styleToTable(span.attributes['style'])
  if not style then return end
  if style['color'] then
    span.attributes['typst:text:fill'] = style['color']
  end
  return span
end

给定以下 HTML 输入:

<p>Here is some <span style="color:orange">orange text</span>.</p>

命令:

pandoc -f html -t typst --lua-filter ./typst-property-example.lua

将会产生以下 Typst 输出:

Here is some #text(fill: orange)[orange text].

当然,这个简单的过滤器只适用于 Typst 的 预定义颜色。一个更完整的过滤器需要对值进行转换。

看起来您这里的输入不完整或者不是有效的文本格式。如果您有关于特定列表或内容需要翻译成简体中文,请提供完整的句子或上下文信息,我会尽力帮助您。

在本文档中