SetVariable

Associates a value with a variable name. The value can be a simple value or a more complex one consisting of several elements.

Child elements

Attribute, ClearPage, Column, Columns, Copy-of, Element, ForAll, Loop, Output, Paragraph, PlaceObject, SortSequence, Switch, Table, TableNewPage, Tablehead, Tablerule, Td, Tr, Value

Parent elements

AtPageCreation, AtPageShipout, Case, Contents, ForAll, Function, Include, Layout, Loop, Otherwise, Record, SavePages, Table, Until, While

Attributes

execute (optional, since version 4.11.8)

Execute the contents of setvariable now or execute it on usage.

now

Execute the contents during SetVariable (default).

later

Execute the contents when evaluated during Copy-of. Experimental.

select (XPath expression, optional)

The value of the contents.

trace (optional)

Show information about the assignment in the log file.

yes

Show information.

no

Don’t show information (default).

type (optional, since version 4.3.10)

Set the data type of the variable. Currently only supported for MetaPost variables.

sd:any

The default (any) datatype for variables in the speedata layout language.

mp:boolean

A MetaPost boolean value.

mp:cmykcolor

A MetaPost CMYK color.

mp:numeric

A MetaPost numeric value.

mp:string

A MetaPost string value.

mp:rgbcolor

A MetaPost RGB color.

variable (text)

The name of the variable that holds the contents.

Remarks

Variables have global scope.

Example

<Record element="product">
  <SetVariable variable="wd" select="5"/>
  <PlaceObject>
    <Textblock width="{ $wd }">
      <Paragraph>
        <Value select="$articlenumber"/>
      </Paragraph>
    </Textblock>
  </PlaceObject>
</Record>

The following example shows a more complex scenario: you can collect complex elements in a variable.

<Record element="products">
  <SetVariable variable="articletext"/>
  <ProcessNode select="article"/>
  <PlaceObject>
    <Textblock>
      <Value select=" $articletext "/>
    </Textblock>
  </PlaceObject>
</Record>

<Record element="article">
  <SetVariable variable="articletext">
    <!-- the previous contents is added -->
    <Value select="$articletext"/>
    <Paragraph>
      <Value select=" @description "/>
    </Paragraph>
  </SetVariable>
</Record>

See also

The sections Programming and Create and use images with MetaPost.