Typst 属性输出
Pandoc Typst 属性输出
除了 Pandoc 的 Typst 写入器内置的结构属性输出之外,该写入器还可以输出非结构化的 Typst 属性。通过在受支持的元素上设置键为 typst:prop 或 typst:text:prop 形式的属性来实现。
Typst 属性
Typst 允许将视觉和布局属性作为参数指定给元素
#block(fill=orange)[Hello]以及 set-rules
#set text(fill=blue); Hello参数值是可以使用 Typst 语言任何功能的 Typst 代码。
Pandoc Typst 属性输出
对于受支持的 Pandoc 元素集,Pandoc Typst 写入器会将属性作为对应 Typst 元素或 set-text 规则的参数输出。
Typst 写入器会查找键为 typst:prop 或 typst:text:prop 形式的属性,并假定这些值是原始 Typst 代码。
prop 是要设置的属性的名称。
例如,使用 HTML 输入运行 pandoc -f html -t typst 命令
<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
]Typst 写入器不检查 prop 或其值的有效性。由于 Typst 是一种静态类型语言,不正确的属性名称或值通常会导致编译失败。
支持的元素
目前支持以下 Pandoc AST 元素。未来可能会支持更多。
-
typst:text:prop-
内容被包装在 Typst 的 文本元素 中,并设置了指定的属性。
-
typst:prop-
prop作为参数输出到 Typst 的 块元素。 typst:text:prop-
在块内容的开头,
prop作为参数输出到 set-text 规则。
-
typst:prop-
prop作为参数输出到 Typst 的 表格元素。 typst:text:prop-
表格被包装在 Typst 的 文本元素 中,其中
prop是其参数之一。 typst:no-figure(类)-
默认情况下,Pandoc 会将表格包装在 Typst 的 图元素 中。如果表格具有此类别,则只输出表格元素本身。这可以避免 Typst 的
table类型的交叉引用计数器递增。 typst:figure:kind-
如果设置了此属性,Pandoc 会将表格包装在 Typst 的 图元素 中,并带有指定的
kind属性。这对于应在文档中交叉引用为Table ...以外的其他内容的表格很有用。Typst 将使用kind属性来递增相应的计数器:raw和image。
表格 单元格
typst:prop-
prop作为参数输出到 Typst 表格的 单元格元素。 typst:text:prop-
在单元格内容的开头,
prop作为参数输出到 set-text 规则。
Lua 过滤器示例
这是一个 Lua 过滤器的最小示例,它将 span 元素上的 CSS color 属性转换为 Typst 文本元素上等效的 fill 参数。
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 的 预定义颜色。更完整的过滤器还需要转换其值。