Pandoc Typst 属性输出
除了 Pandoc 的 Typst Writer 内置的结构属性输出外,该 Writer 还可以输出非结构化的 Typst 属性。这可以通过在支持的元素上设置形如 typst:prop
或 typst: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:prop
或 typst: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
作为参数输出到块内容开始处的文本规则。
-
typst:prop
:prop
作为参数输出到 Typst 的 表格元素。typst:text:prop
: 表格被包裹在一个具有prop
作为参数之一的 Typst 文本元素 中。typst:no-figure
: 默认情况下,Pandoc 将表格包裹在 Typst 的 图元素 中。如果设置了此属性,则仅输出表格元素本身。这样可以避免 Typst 的种类为table
的交叉引用计数器递增。typst:figure:kind
: 如果设置了此属性,Pandoc 将表格包裹在一个具有指定kind
属性的 Typst 图元素中。这对于希望在文档中以不同于 “表...” 的方式进行交叉引用的表格非常有用。Typst 会根据kind
属性递增相应的计数器:raw
和image
。
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 的 预定义颜色。一个更完整的过滤器需要对值进行转换。
看起来您这里的输入不完整或者不是有效的文本格式。如果您有关于特定列表或内容需要翻译成简体中文,请提供完整的句子或上下文信息,我会尽力帮助您。