ConTeXt 中的反射

ConTeXt 中的反射

答案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 中检索缓冲区内容,然后根据需要对其进行操作。例如,在这里我替换zapfknuth以排版不同的示例文件。

\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

相关内容