getbuffer 可以从宏访问命名缓冲区吗?

getbuffer 可以从宏访问命名缓冲区吗?

我正在编写一份文档,其中每个部分都有一个在开头调用的专用缓冲区。(不确定这在英语中是否很清楚)。

为了实现自动化,我计划用宏调用一个缓冲区名称,但看起来它getbuffer不像宏替换。无论如何,它在 MWE 中不起作用

\startbuffer [Truite]
Elle nous jouait la truite, la truite de Schubert
\stopbuffer

\starttext

\def\Schubert{Truite}

Comme le disaient les frères Jacques:

\getbuffer[\Schubert{}]

Encore une fois:

\getbuffer[Truite]
\stoptext

有没有办法用宏访问命名缓冲区?

答案1

您必须{}从传递给命令的参数中删除括号\getbuffer,因为它们最终成为用于访问缓冲区的名称的一部分。

\startluacode

userdata = userdata or { }

function userdata.argument(str)
    context.quotation(context.nested.type(str))
end

\stopluacode

\def\LuaArgument[#1]%
  {\ctxlua{userdata.argument("#1")}}

\setuptype[space=on]

\starttext

\starttabulate[|lh{\type}|l|]
\HC {\LuaArgument  [Truite]}   \EQ \LuaArgument  [Truite]   \NC\NR
\HC {\LuaArgument  [Truite{}]} \EQ \LuaArgument  [Truite{}] \NC\NR
\HC {\LuaArgument [{Truite}]}  \EQ \LuaArgument [{Truite}]  \NC\NR
\HC {\LuaArgument [{Truite} ]} \EQ \LuaArgument [{Truite} ] \NC\NR
\HC {\LuaArgument[ {Truite}]}  \EQ \LuaArgument[ {Truite}]  \NC\NR
\stoptabulate

\stoptext

在此处输入图片描述

相关内容