我正在编写一份文档,其中每个部分都有一个在开头调用的专用缓冲区。(不确定这在英语中是否很清楚)。
为了实现自动化,我计划用宏调用一个缓冲区名称,但看起来它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