我尝试在给定环境中对 itemize 进行不同的行为,但无法使其工作。我尝试使用 before 选项,如以下 MWE 所示
\defineframedtext[special]
[before={\setupitemize[each][3,packed]},
width=max]
%% document
\starttext
\startspecial
Hello
\startitemize %% default behavior : not ok
\item foo bar
\item \input knuth
\stopitemize
\stopspecial
\startspecial
Hello
\startitemize[3] %% what I would like to be automatic
\item foo bar
\item \input knuth
\stopitemize
\stopspecial
\stoptext
你能向我解释一下哪种选择可能有效吗?
编辑
我尝试了 Metafox 给出的答案,它在 MWE 上有效,但在我的真实文档上无效。经过进一步的努力,我发现即使在新的框架块中,我的全局设置也被采用。
\setupitemize[1][2,packed] %% this line is the problem
\startsetups[framedtext:special]
\setupitemize[each][3,packed]
\stopsetups
\defineframedtext[special]
[inner={\directsetup{framedtext:special}},
width=max]
%% document
\starttext
\startspecial
Hello
\startitemize %% not ok
\item foo bar
\item \input knuth
\stopitemize
\stopspecial
\stoptext
有没有办法使这种设置在新的 framedtext 环境中流行?
答案1
before
和键的参数after
在环境内容排版后应用。要添加环境本地的设置,您可以使用 键inner
。
\defineframedtext
[special]
[inner={\setupitemize[each][3,packed]},
width=max]
\starttext
\startspecial
Hello
\startitemize
\item foo bar
\item \input knuth
\stopitemize
\stopspecial
\stoptext
当您的设置较长时,您可以将它们放入setups
环境中并使用密钥加载它inner
。
\startsetups[framedtext:special]
\setupitemize[each][3,packed]
\stopsetups
\defineframedtext
[special]
[inner=\directsetup{framedtext:special},
width=max]
为了确保覆盖全局设置,您应该使用关键字1,2,...
作为命令each
的第一个参数\setupitemize
,因为与 MkII 不同,each
MkIV 中的关键字不再覆盖特定级别的设置。
\startsetups[framedtext:special]
\setupitemize[1,2,3,4][3,packed]
\stopsetups