答案ConTeXt:避免跨页面枚举项是一个很好的介绍,介绍如何在渲染之前修改 TeX,就像使用 JavaScript 修改 HTML 一样。
\startsetups [userdata:itemize]
\setbox\scratchbox\vbox {
\blank[disable]
\startitem
\getinlineuserdata
\stopitem
}
\ifdim\ht\scratchbox>\textheight
\page\unvbox\scratchbox
\else
\box\scratchbox
\fi
\stopsetups
是否可能实现更高级的反射?例如,是否可以迭代内容\getinlineuserdata
?是否可以使用索引进行迭代?是否可以只迭代匹配项 - 块、环境、组或问题的答案ConTeXt:块、环境和组是?
答案1
您可以在 Lua 中检索缓冲区内容,然后根据需要对其进行操作。例如,在这里我替换zapf
为knuth
以排版不同的示例文件。
\defineuserdataalternative
[itemize]
[renderingsetup=userdata:itemize]
\startsetups [userdata:itemize]
\startluacode
local text = buffers.raw("userdata")
text = string.gsub(text, "zapf", "knuth")
buffers.assign("userdata", text)
\stopluacode
\startitem
\getinlineuserdata
\stopitem
\stopsetups
\defineuserdata [item] [alternative=itemize]
\starttext
\startitemize
\startuserdata [item]
\samplefile{zapf}
\stopuserdata
\stopitemize
\stoptext