---
name: "LaTeXML::Definition"
section: "3pm"
platform: "linux"
package: "latexml"
version: "0.7.0-1"
release: "Debian 7 (Wheezy)"
platforms: ["linux"]
url: "https://new.carta.tech/LaTeXML::Definition"
---

# LaTeXML::Definition(3pm)

Control sequence definitions.

## NAME

`"LaTeXML::Definition"`  - Control sequence definitions.

## DESCRIPTION

These represent the various executables corresponding to control sequences. See LaTeXML::Package for the most convenient means to create them.

- "LaTeXML::Expandable"

  represents macros and other expandable control sequences that are carried out in the Gullet during expansion. The results of invoking an `"LaTeXML::Expandable"` should be a list of `"LaTeXML::Token"`s.

- "LaTeXML::Primitive"

  represents primitive control sequences that are primarily carried out for side effect during digestion in the LaTeXML::Stomach and for changing the LaTeXML::State.  The results of invoking a `"LaTeXML::Primitive"`, if any, should be a list of digested items (`"LaTeXML::Box"`, `"LaTeXML::List"` or `"LaTeXML::Whatsit"`).

- "LaTeXML::Register"

  is set up as a speciallized primitive with a getter and setter to access and store values in the Stomach.

- "LaTeXML::CharDef"

  represents a further specialized Register for chardef.

- "LaTeXML::Constructor"

  represents control sequences that contribute arbitrary XML fragments to the document tree.  During digestion, a `"LaTeXML::Constuctor"` records the arguments  used in the invokation to produce a LaTeXML::Whatsit.  The resulting LaTeXML::Whatsit (usually) generates an XML document fragment when absorbed by an instance of LaTeXML::Document. Additionally, a `"LaTeXML::Constructor"` may have beforeDigest and afterDigest daemons defined which are executed for side effect, or for adding additional boxes to the output.

More documentation needed, but see LaTeXML::Package for the main user access to these.

### Methods in general

- "$token = $defn-\>getCS;"

  Returns the (main) token that is bound to this definition.

- "$string = $defn-\>getCSName;"

  Returns the string form of the token bound to this definition, taking into account any alias for this definition.

- "$defn-\>readArguments($gullet);"

  Reads the arguments for this `$defn` from the `$gullet`, returning a list of LaTeXML::Tokens.

- "$parameters = $defn-\>getParameters;"

  Return the `"LaTeXML::Parameters"` object representing the formal parameters of the definition.

- "@tokens = $defn-\>invocation(@args);"

  Return the tokens that would invoke the given definition with the provided arguments.  This is used to recreate the TeX code (or it's equivalent).

- "$defn-\>invoke;"

  Invoke the action of the `$defn`.  For expandable definitions, this is done in the Gullet, and returns a list of LaTeXML::Tokens.  For primitives, it is carried out in the Stomach, and returns a list of LaTeXML::Boxes. For a constructor, it is also carried out by the Stomach, and returns a LaTeXML::Whatsit. That whatsit will be responsible for constructing the XML document fragment, when the LaTeXML::Document invokes `"$whatsit-"`beAbsorbed($document);\>.

  Primitives and Constructors also support before and after daemons, lists of subroutines that are executed before and after digestion.  These can be useful for changing modes, etc.

### More about Primitives

Primitive definitions may have lists of daemon subroutines, `"beforeDigest"` and `"afterDigest"`, that are executed before (and before the arguments are read) and after digestion. These should either end with `"return;"`, `"()"`, or return a list of digested  objects (LaTeXML::Box, etc) that will be contributed to the current list.

### More about Registers

Registers generally store some value in the current `"LaTeXML::State"`, but are not required to. Like TeX's registers, when they are digested, they expect an optional `"="`, and then a value of the appropriate type. Register definitions support these additional methods:

- "$value = $register-\>valueOf(@args);"

  Return the value associated with the register, by invoking it's `"getter"` function. The additional args are used by some registers to index into a set, such as the index to `"\count"`.

- "$register-\>setValue($value,@args);"

  Assign a value to the register, by invoking it's `"setter"` function.

### More about Constructors

A constructor has as it's `"replacement"` a subroutine or a string pattern representing the XML fragment it should generate.  In the case of a string pattern, the pattern is compiled into a subroutine on first usage by the internal class `"LaTeXML::ConstructorCompiler"`. Like primitives, constructors may have `"beforeDigest"` and `"afterDigest"`.

## AUTHOR

Bruce Miller \<bruce.miller@nist.gov\>

## COPYRIGHT

Public domain software, produced as part of work done by the United States Government & not subject to copyright in the US.
