Difference between revisions of "Command/defineitemgroup"

From Wiki
Jump to navigation Jump to search
m
m
 
(10 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
== Defining lists ==
 
== Defining lists ==
  
Defining {{cmd|itemize}} like *itemgroups* is accomplished through {{cmd|defineitemgroup}} and the correspoding setup. For historical reasons these have a non-standard, duplicate interface
+
Defining {{cmd|startitemize}}-like ''itemgroups'' is accomplished through {{cmd|defineitemgroup}} and the corresponding setup. For historical reasons these have a non-standard, duplicate interface
requiring some options to be specified as key-value setups, others as an argument list.
+
requiring some options to be specified as key-value setups, others as an argument list. For example:
  
<code>
+
<texcode>
 
\defineitemgroup[myitems]
 
\defineitemgroup[myitems]
 
\setupitemgroup [myitems] [each] [joinedup]
 
\setupitemgroup [myitems] [each] [joinedup]
 
\setupitemgroup [myitems] [each] [itemalign=flushright]
 
\setupitemgroup [myitems] [each] [itemalign=flushright]
</code>
+
</texcode>
  
The second argument determines the itemization level the settings apply to.
+
The arguments include the:
  
The third argument comes in two varieties.
+
* item group name;
 +
* itemization level; and
 +
* list of horizontal and vertical whitespace controls.
  
Parameters that concern whitespace (both vertical and horizontal) belong in the argument list: joinedup, packed, nowhite, and others.
+
Parameters that concern whitespace (both vertical and horizontal) belong in the argument list: {{code|joinedup}}, {{code|packed}}, {{code|nowhite}}, and others.
  
Further options are part of the setup. Both kinds can be given in a combined version:
+
Further options are part of the setup, and can be combined:
  
<code>
+
<texcode>
 
\setupitemgroup  [myitems] [each] [joinedup] [itemalign=flushright]
 
\setupitemgroup  [myitems] [each] [joinedup] [itemalign=flushright]
</code>
+
</texcode>
  
 
== Custom bullets ==
 
== Custom bullets ==
Line 29: Line 31:
 
number as the contents of the box like so:
 
number as the contents of the box like so:
  
<code>
+
<texcode>
 
\definesymbol [instruction_symbol_numbered]
 
\definesymbol [instruction_symbol_numbered]
 
   [{\framed{\currentitemnumber}}]
 
   [{\framed{\currentitemnumber}}]
</code>
+
</texcode>
  
 
The {{cmd|framed}} must be adapted to the specific requirements.
 
The {{cmd|framed}} must be adapted to the specific requirements.
Line 40: Line 42:
 
Below listing combines all the above into one working example.
 
Below listing combines all the above into one working example.
  
<code>
+
<texcode>
 
     \unprotect
 
     \unprotect
 
      
 
      
Line 96: Line 98:
 
       \stopInstructions
 
       \stopInstructions
 
     \stoptext
 
     \stoptext
</code>
+
</texcode>

Latest revision as of 15:55, 13 March 2016

Defining lists

Defining \startitemize-like itemgroups is accomplished through \defineitemgroup and the corresponding setup. For historical reasons these have a non-standard, duplicate interface requiring some options to be specified as key-value setups, others as an argument list. For example:

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

The arguments include the:

  • item group name;
  • itemization level; and
  • list of horizontal and vertical whitespace controls.

Parameters that concern whitespace (both vertical and horizontal) belong in the argument list: joinedup, packed, nowhite, and others.

Further options are part of the setup, and can be combined:

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

Custom bullets

Bullets are very flexible. They hook into the \symbol mechanism.

The macro generator here is \definesymbol. Basically it allows for all valid Context code to appear inside the definition, including the list item counter. This counter can be accessed via \currentitemnumber. To achieve the “item number in a box” effect we have to draw this number as the contents of the box like so:

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

The \framed must be adapted to the specific requirements.

Putting it together

Below listing combines all the above into one working example.

    \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