背景

背景

背景

我想在同一页面上独立地改变多个项目列表的样式。

代码

一个简短的例子:

\setuppapersize[A5]
\setupcolors[state=start]

% Itemized in a bullet list by default.
\definestartstop[RegularList][
  before={\startitemize[joinedup]},
  after={\stopitemize},
]

\defineframed[StyleBulletFramed][
  frame=off,
  height=0.5em,
  width=0.5em,
  background=color,
  backgroundcolor=red,
]

% First level of indenting (regular bullets) use the bullet style.
\setupitemize[1][broad][
  stopper=,
  width=\zeropoint,
  symbol=,
  command=\StyleBulletFramed{},
]

\define[3]\regularlist{\item #1 #2 #3}

\startnotmode[ModeCompactInstructions]
\definestartstop[Instructions][
  before={\startitemize[n,joinedup]},
  after={\stopitemize},
]

% First level of indenting (regular bullets) use the bullet style.
\setupitemize[1][][
  stopper=,
  width=\zeropoint,

  % ???
  %command={\StyleBulletFramed[width=1em,height=1em]{}\hskip0.5em},
]

\define[1]\instruction{\item #1.}

\starttext

\startbodymatter
  Chemicals
  \startRegularList
    \regularlist{80}{ml}{water}
    \regularlist{20}{ml}{sodium}
  \stopRegularList

  Instructions
  \startInstructions
    \instruction{Drop sodium into water}
    \instruction{Run away}
  \stopInstructions
\stopbodymatter

\stoptext

得出的结果为:

依赖列表

问题

第一个列表中的红色项目符号非常适合第一个列表。但是,第二个列表中的红色项目符号存在问题:

  • 项目符号大小应该更大(足够容纳两位数)
  • 项目符号应该位于数字后面

问题

第一个问题让我困惑,第二个问题也许可以帮我\defineitemlist解答。你会怎么做:

  1. 确保数字画在项目符号的上方吗?
  2. 独立格式化列表(即第二个列表中的项目符号更大)?

缺少资源

我以为我可以定义一个命名组,但是\defineitemgroup 不存在相关文档。

答案1

定义列表

定义\itemize商品组是通过 \defineitemgroup和相应的设置来完成的。由于历史原因,它们具有非标准的重复接​​口,需要将一些选项指定为键值设置,将其他选项指定为参数列表。例如

\defineitemgroup  [myitems]
\setupitemgroup  [myitems] [each] [joinedup]
\setupitemgroup  [myitems] [each] [itemalign=flushright]

第二个参数决定设置适用的项目级别。第三个参数有两种。与空白(垂直和水平)有关的参数属于参数列表:joinedup、、packed等等nowhite更多选项 是设置的一部分。两种类型都可以组合使用:

\setupitemgroup  [myitems] [each] [joinedup] [itemalign=flushright]

自定义项目符号

子弹非常灵活。它们会钩住 \symbol 机制。这里的宏生成器是 \definesymbol。基本上,它允许所有有效的上下文代码出现在定义中,包括列表项计数器。可以通过以下方式访问此计数器 \currentitemnumber。为了实现“盒子里的物品编号”效果,我们必须将这个数字画成盒子的内容,如下所示:

\definesymbol [instruction_symbol_numbered]
  [{\framed{\currentitemnumber}}]

当然,需要根据代码中的命令\framed等具体要求进行调整。\StyleBulletFramed

把它放在一起

下面的列表将上述所有内容合并为一个工作示例。(当然,某些设置(例如框大小)需要进一步调整。)

演示

\unprotect

%% the bullet: a red square

\defineframed [instruction_symbol_frame] [
  background=color,
  backgroundcolor=red,
  frame=off,
  width=1em,
  height=\framedparameter{width}, %% -> let height = width
]

%% bare bullet

\definesymbol [instruction_symbol]
  [{\instruction_symbol_frame{\strut}}]

%% same bullet, with item number inside

\definesymbol [instruction_symbol_numbered]
  [{\instruction_symbol_frame{\currentitemnumber}}]

%% define the “regular“ itemization with a red box as bullet indicator

\defineitemgroup [RegularList]
\setupitemgroup [RegularList] [each] [joinedup]
\setupitemgroup [RegularList] [symbol=instruction_symbol]

%% define the “Instructions” type itemization that includes the item
%% number inside the box

\defineitemgroup [Instructions]
\setupitemgroup [Instructions] [each] [joinedup]
\setupitemgroup [Instructions] [symbol=instruction_symbol_numbered]

\protect

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% demo

\starttext
  Chemicals
  \startRegularList
    \startitem \input knuth \stopitem
    \startitem \input ward \stopitem
  \stopRegularList

  \blank [2*big]

  Instructions
  \startInstructions
    \startitem \input knuth \stopitem
    \startitem \input ward \stopitem
  \stopInstructions
\stoptext

相关内容