编辑

       编辑

我尝试在给定环境中对 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

框架文本环境中 itemize 的本地设置

当您的设置较长时,您可以将它们放入setups环境中并使用密钥加载它inner

\startsetups[framedtext:special]
    \setupitemize[each][3,packed]
\stopsetups

\defineframedtext
  [special]
  [inner=\directsetup{framedtext:special},
   width=max]

为了确保覆盖全局设置,您应该使用关键字1,2,...作为命令each的第一个参数\setupitemize,因为与 MkII 不同,eachMkIV 中的关键字不再覆盖特定级别的设置。

\startsetups[framedtext:special]
    \setupitemize[1,2,3,4][3,packed]
\stopsetups

相关内容