В базовых HTML и XML средствах недостаточно учтены требования к высококачественному представлению математических текстов в документах (книгах, статьях, учебных материалах, презентациях) с естественно-научным и инженерным содержанием. Поэтому существует и применяется ряд языков и основанных на них программных систем, специально предназначенных для описания документов с математической нотацией. Среди них наиболее известными являются система TEX, XML-приложение MathML (Mathematical Markup Language), а также математические пакеты, такие как Mathematica или Maple.
TEX-технология создана для представления научных документов, включающая одноименный язык программирования и разметки документов, а также совокупность программных средств, поддерживающих этот язык. Различают физическую и логическую разметки. Первая из них используется для форматирования, а вторая для структурирования текста.
Программное обеспечение TEX-технологии представлено рядом программных средств. Это базовая компонента tex, компоненты для создания разнообразных шрифтов Metafont, для подготовки графических иллюстраций MetaPost, для обработки библиографических списков и ссылок bibtex. Эти или подобные им компоненты входят в макропакеты, реализующие TEX-технологию, примерами макропакетов могут служить LATEX, Plain и др.
Несмотря на свою универсальность, TEX-технология имеет и определенные недостатки. Во-первых, она довольно сложна в освоении. Во-вторых, в ней отсутствуют средства для вызова других программ и совместного с ними исполнения. В-третьих, язык TEX не согласован с XML, так как TEX-технология создавалась еще в 80-е годы.
Поэтому при создании учебных материалов с математическими текстами все в большей мере используется язык MathML.
В MathML, так же как и в TEX, возможны физический (разметка представления) и логический (разметка содержания) типы описания текстов и, кроме того, смешанный тип, использующий элементы обоих основных типов.
Физический тип состоит из элементов представления, а логический тип - из элементов содержания. Элементы представления описывают ориентированную на визуализацию двухмерную структуру математической нотации. К простым элементам относятся цифры, буквы и другие символы Unicode, более сложные элементы образуются комбинированием простых элементов. Как принято в XML, элементы представляют собой символы нотации вместе с парой обрамляющих тегов.
В качестве примера рассмотрим запись на языке MathML простой математической формулы .
<mrow>
   <mi>x</mi>
   <mo>=</mo>
   <mrow>
      <mn>5</mn>
      <mo>&InvisibleTimes;</mo>
      <mfenced>
      <mrow>
            <msup>
               <mi>a</mi>
               <mn>2</mn>
            </msup>
            <mo>+</mo>
            <mfrac>
               <mrow>
                  <mi>b</mi>
                  <mi>c</mi>
          </mrow>
            </mfrac>
     </mrow>
      </mfenced>
   </mrow>
</mrow>
В этом тексте использованы элементы с тегами (токенами) mi, mn и mo, служащими для представления соответственно идентификаторов, чисел и операторов. Элемент mrow предназначен для обозначения последовательности данных с выравниванием по горизонтали. Элемент mfenced используется для ограничения формул различными типами скобок (по умолчанию используются круглые скобки). Элемент msup применяется в выражениях с верхними индексами и имеет два аргумента: основание (в нашем случае a) и показатель (в нашем случае 2). Элемент mfrac используется для описания дроби. Аналогичным образом описываются и другие символы, выражения и уравнения математических текстов.
Разметка содержания отражает иерархическую структуру математических выражений. Эту структуру можно представить в виде графа, каждый узел графа соответствует элементу MathML, листья соответствуют атомарным элементам, таким как числа, символы и т.п. Приведенный выше пример в случае разметки содержания имеет следующий вид:
<mrow>
<apply>
    <eq/>
    <ci>x</ci>
    <apply>
        <times/>
        <cn>5</cn>
      <apply>
            <plus/>
          <apply>
                <power/>
                <ci>a</ci>
              <cn>2</cn>
          </apply>
          <apply>
              <divide/>
                <ci>b</ci>
                <ci>c</ci>
          </apply>
      </apply>
  </apply>
</apply>
</mrow>
Описание функций, операций и их операндов выполняется в элементе <apply>. Можно заметить, что в контейнере этого элемента используется префиксная форма записи выражений.
Всего для разметки содержания в MathML введено около 120 элементов.