Sponsoring The Perl Toolchain Summit 2025: Help make this important event another success Learn more

# /=====================================================================\
# | LaTeXML-block.rnc |
# | RelaxNG model for LaTeXML generated documents |
# |=====================================================================|
# | Part of LaTeXML: |
# | Public domain software, produced as part of work done by the |
# | United States Government & not subject to copyright in the US. |
# |=====================================================================|
# | Bruce Miller <bruce.miller@nist.gov> #_# |
# \=========================================================ooo==U==ooo=/
default namespace = "http://dlmf.nist.gov/LaTeXML"
## The block module defines the following `physical' block elements.
Block.class |=
p | equation | equationgroup | quote | block | listing
| itemize | enumerate | description | pagination
## These are inline forms of logical lists
## (they are included in Misc since that has been the general strategy)
Misc.class |= inline-itemize | inline-enumerate | inline-description
## Additional Metadata that can be present in equations.
EquationMeta.class = constraint
#======================================================================
p =
## A physical paragraph.
element p { p_attributes, p_model }
## Attributes for \elementref{p}.
p_attributes =
Common.attributes,
ID.attributes,
Positionable.attributes,
Backgroundable.attributes
## Content model for \elementref{p}.
p_model = Inline.model
#======================================================================
constraint =
## A constraint upon an equation.
element constraint { constraint_attributes, constraint_model }
## Attributes for \elementref{constraint}.
constraint_attributes =
attribute hidden { xsd:boolean }?,
Backgroundable.attributes
## Content model for \elementref{constraint}.
constraint_model = Inline.model
#======================================================================
equation =
## An Equation. The model is just Inline which includes \elementref{Math},
## the main expected ingredient.
## However, other things can end up in display math, too, so we use Inline.
## Note that tabular is here only because it's a common, if misguided, idiom;
## the processor will lift such elements out of math, when possible
element equation { equation_attributes, equation_model }
## Attributes for \elementref{equation}.
equation_attributes =
Common.attributes,
Labelled.attributes,
Backgroundable.attributes
## Content model for \elementref{equation}.
equation_model =
(tags | Math | MathFork | \text | Misc.class | Meta.class | EquationMeta.class)*
#======================================================================
equationgroup =
## A group of equations, perhaps aligned (Though this is nowhere recorded).
element equationgroup { equationgroup_attributes, equationgroup_model }
## Attributes for \elementref{equationgroup}.
equationgroup_attributes =
Common.attributes,
Labelled.attributes,
Backgroundable.attributes,
## the spacing between rows (equations, intertext,...)
attribute rowsep { Length.type}?
## Content model for \elementref{equationgroup}.
equationgroup_model = (tags | equationgroup | equation | p | Meta.class | EquationMeta.class)*
#======================================================================
MathFork =
## A wrapper for Math that provides alternative,
## but typically less semantically meaningful,
## formatted representations.
## The first child is the meaningful form,
## the extra children provide formatted forms,
## for example being table rows or cells arising from an eqnarray.
element MathFork { MathFork_attributes, MathFork_model }
## Attributes for \elementref{MathFork}.
MathFork_attributes = Common.attributes
## Content model for \elementref{MathFork}.
MathFork_model = (Math|\text), MathBranch*
#======================================================================
MathBranch =
## A container for an alternatively formatted math representation.
element MathBranch { MathBranch_attributes, MathBranch_model }
## Attributes for \elementref{MathBranch}.
MathBranch_attributes =
Common.attributes,
attribute format { text }?
## Content model for \elementref{MathBranch}.
MathBranch_model = (Math|tr|td)*
#======================================================================
quote =
## A quotation.
element quote { quote_attributes, quote_model }
## Attributes for \elementref{quote}.
quote_attributes =
Common.attributes,
ID.attributes,
Backgroundable.attributes,
## The kind of quotation; could be something like verse, or translation
attribute role { text }?
## Content model for \elementref{quote}.
quote_model = Block.model
# This was Inline.model, but since quotes can be arbitrarily complex
# including equations, etc, not just verse, should be Block.model, perhaps even Para.model?
#======================================================================
block =
## A generic block (fallback).
element block { block_attributes, block_model }
## Attributes for \elementref{block}.
block_attributes =
Common.attributes,
ID.attributes,
Positionable.attributes,
Backgroundable.attributes
## Content model for \elementref{block}.
block_model = Block.model
#======================================================================
listing =
## An Listing, (without caption: see \elementref{float})
element listing { listing_attributes, listing_model }
## Attributes for \elementref{listing}.
listing_attributes =
Common.attributes,
Labelled.attributes,
Positionable.attributes,
Backgroundable.attributes,
Data.attributes
## Content model for \elementref{listing}.
listing_model = listingline*
#======================================================================
listingline =
## a line in a listing
element listingline { listingline_attributes, listingline_model }
## Attributes for \elementref{listingline}
listingline_attributes =
Common.attributes,
Labelled.attributes
## Content model for \elementref{listingline}; Inline.model plus equations
listingline_model = tags?, (text | Inline.class | Misc.class | Meta.class | equation | equationgroup )*
#======================================================================
itemize =
## An itemized list.
element itemize { itemize_attributes, itemize_model }
## Attributes for \elementref{itemize}.
itemize_attributes =
Common.attributes,
ID.attributes,
Backgroundable.attributes
## Content model for \elementref{itemize}.
itemize_model = item*
#======================================================================
enumerate =
## An enumerated list.
element enumerate { enumerate_attributes, enumerate_model }
## Attributes for \elementref{enumerate}.
enumerate_attributes =
Common.attributes,
ID.attributes,
Backgroundable.attributes
## Content model for \elementref{enumerate}.
enumerate_model = item*
#======================================================================
description =
## A description list. The \elementref{item}s within are expected to have a \elementref{tag}
## which represents the term being described in each \elementref{item}.
element description { description_attributes, description_model }
## Attributes for \elementref{description}.
description_attributes =
Common.attributes,
ID.attributes,
Backgroundable.attributes
## Content model for \elementref{description}.
description_model = item*
#======================================================================
item =
## An item within a list (\elementref{itemize},\elementref{enumerate} or \elementref{description}).
element item { item_attributes, item_model }
## Attributes for \elementref{item}.
item_attributes =
Common.attributes,
Labelled.attributes,
Backgroundable.attributes,
## the vertical spacing between items
attribute itemsep { Length.type}?
## Content model for \elementref{item}.
item_model = tags?, Para.model
#======================================================================
inline-itemize =
## An inline form of itemized list.
element inline-itemize { inline-itemize_attributes, inline-itemize_model }
## Attributes for \elementref{inline-itemize}.
inline-itemize_attributes =
Common.attributes,
ID.attributes,
Backgroundable.attributes
## Content model for \elementref{inline-itemize}.
inline-itemize_model = inline-item*
#======================================================================
inline-enumerate =
## An inline form of enumerated list.
element inline-enumerate { inline-enumerate_attributes, inline-enumerate_model }
## Attributes for \elementref{inline-enumerate}.
inline-enumerate_attributes =
Common.attributes,
ID.attributes,
Backgroundable.attributes
## Content model for \elementref{inline-enumerate}.
inline-enumerate_model = inline-item*
#======================================================================
inline-description =
## An inline form of description list.
## The \elementref{inline-item}s within are expected to have a \elementref{tags}
## which represents the term being described in each \elementref{inline-item}.
element inline-description { inline-description_attributes, inline-description_model }
## Attributes for \elementref{inline-description}.
inline-description_attributes =
Common.attributes,
ID.attributes,
Backgroundable.attributes
## Content model for \elementref{inline-description}.
inline-description_model = inline-item*
#======================================================================
inline-item =
## An item within an inline list (\elementref{inline-itemize},\elementref{inline-enumerate}
## or \elementref{inline-description}).
element inline-item { inline-item_attributes, inline-item_model }
## Attributes for \elementref{item}.
inline-item_attributes =
Common.attributes,
Labelled.attributes,
Backgroundable.attributes
## Content model for \elementref{inline-item}.
inline-item_model = tags?, (Inline.class | Misc.class | Meta.class)*
#======================================================================
tags =
## A container for one or more \elementref{tag}s.
## At most one will have no \attr{role}, which would be the default display.
## Other \elementref{tag} will have the role attribute for use in
## special forms of referencing.
element tags { tags_model }
tags_model = tag+
tag =
## A tag within an item indicating the term or bullet for a given item.
element tag { tag_attributes, tag_model }
## Attributes for \elementref{tag}.
tag_attributes =
Common.attributes,
Backgroundable.attributes,
## specifies the purpose this tag is used for: no value is default display
attribute role { text}?,
## specifies an open delimiters used to display the tag.
attribute open { text }?,
## specifies an close delimiters used to display the tag.
attribute close { text }?
## Content model for \elementref{tag}.
tag_model = Inline.model
#======================================================================
pagination =
## A page break or related pagination information.
element pagination { pagination_attributes, pagination_model }
## Attributes for \elementref{pagination}.
pagination_attributes =
Common.attributes,
## what kind of pagination
attribute role { text }?
## Content model for \elementref{pagination}.
pagination_model = empty
#======================================================================