Смекни!
smekni.com

Набор и верстка математических текстов. (стр. 1 из 2)

Набор и верстка математических текстов.

Т.Н. Катанова, А.П. Шестаков

Язык разметки математических текстов MathML

С распространением глобальных компьютерных сетей (в частности, Интернет) появилась необходимость размещения в ней в т.ч. и математических текстов.

Язык MathML является подмножеством языка XML (eXtensible Markup Language — расширяемый язык разметки), который часто служит для создания других языков. Такое использование XML сегодня вполне естественно и хорошо зарекомендовало себя и в других случаях, когда применение HTML для передачи данных новых типов наталкивалось на ограничения этого формата. К настоящему времени консорциум W3C опубликовал 2-е издание версии 2.0 спецификации языка MathML, что говорит о жизнеспособности и устойчивости проекта.

Среди целей, которые ставились рабочей группой W3C по математике при создании MathML, были:

обеспечение кодирования материалов математического характера для коммуникаций всех уровней образовательного и научного типа;

обеспечение кодирования как математической символики, так и ее значений;

поддержка создания шаблонов и других приемов математического редактирования;

обеспечение преобразования в другие математические форматы как чисто презентационного, так и семантического характера, а также — из этих форматов в создаваемый язык математической разметки. Форматы вывода должны включать средства для отображения графической информации, синтеза речи, представления текста в форме, пригодной для ввода ее в системы компьютерной алгебры, совместимость с другими языками описания математических текстов, такими, как ТДО, возможность отображения «чистого» текста (т. е. не включающего математических символов и выражений), возможность вывода текстов на печать в различной форме, включая вывод по системе Брайля. При этом преобразования между различными форматами могут приводить к потерям информации;

возможность передачи информации с учетом особенностей конкретных программ визуализации;

поддержка эффективных процессов просмотра длинных математических выражений;

обеспечение расширяемости возможностей (способами, которые заранее не известны).

Общий принцип использования MathML состоит в том, что математические конструкции встраиваются в обычный HTML-документ и (если браузер либо специальная программа поддерживает эту спецификацию) адекватно воспроизводятся при загрузке документа из сети.

Первое, с чем приходится столкнуться в MathML и что отличает данный язык разметки от аналогов, — это использование двух способов кодирования выражений. Один из них основан на непосредственной передаче синтаксиса формулы (presentation), другой, напротив, отражает семантику выражения (content). Презентационная разметка описывает математическую символику с выражениями, которые строятся с использованием некоторых схем вывода, с заданием способов размещения подвыражений, таких, как дроби, верхние и нижние индексы. Семантическая разметка описывает математические объекты и функции, где для каждого узла конструируется дерево выражения согласно некоторой конкретной схеме, а ветви этого дерева отвечают подвыражениям.

Из популярных броузеров с MathML работают (ОС Windows):

IE 5.0 с плагином Techexplorer

IE 5.5 с плагинами MathPlayer или Techexplorer

IE 6.0+ (необязательно) с плагинами MathPlayer или Techexplorer

Netscape 6.1 с плагином Techexplorer

Netscape 7.0+

Amaya, все версии (только Presentation MathML)

Mozilla 0.9.9+

Все элементы MathML делятся на три группы: элементы представления, элементы содержания и интерфейсные элементы.

Элементы представления описывают визуально ориентированную двухмерную структуру математической нотации. Например, элемент mrow обычно применяется для обозначения горизонтального ряда частей выражения, и элемент msup, который отмечает верхний индекс. Как правило, каждый элемент представления соответствует одному типу нотационной схемы, такой как ряд, верхний индекс, нижний индекс и т.д. Любая формула состоит из частей, которые могут состоять из простейших элементов, таких как цифры, буквы или другие символы.

Наиболее важными элементами представления являются mi, mn и mo, используемые для представления идентификаторов, чисел и операторов соответственно. Обычно эти элементы отображаются разными стилями: числа — прямым шрифтом, идентификаторы — наклонным, вокруг операторов оставляется дополнительное свободное пространство.

В терминах разметки, большинство элементов MathML определяются открывающим и закрывающим тегами, которые ограничивают содержание элемента. Некоторые элементы, например, знаки операций (<plus/>) определяются одиночным тегом.

Рассмотрим более подробно некоторые элементы, необходимые для верстки математических формул, на примере презентационной разметки.

Токены (token elements) представляют индивидуальные символы, названия, числа, обозначения и т. д. В основном в качестве содержания токены могут иметь только символы.

MathML игнорирует пробельные символы, встречающиеся вне токенов. Непробельные символы здесь запрещены. Пробельные символы, встречающиеся в содержании токенов, удаляются на концах, то есть удаляются все пробельные символы в начале и конце содержания. Пробельные символы, расположенные внутри содержания элементов MathML свертываются канонически, то есть каждая последовательность из 1 или более таких символов заменяется на 1 (иногда называемый пустым символом).

Тег Определение Пример
mi идентификатор (identifier) <mi>a</mi>
mn число (number) <mn> 2008 </mn>
mo оператор (operator), ограничитель (fence) или разделитель (separator) <mo>+</mo>
mtext текст (text) <mtext> Пример текста </mtext>
ms текстовая строка (string literal) <ms> абракадабра</ms>

Основные элементы

Тег Определение Пример Результат
mrow группирует любое количество подвыражений в строку (аналог операторных скобок) <msqrt> <mrow> <mi>a</mi> <mo>+</mo> <mi>b</mi> </mrow> </msqrt>
mfrac формирует дробь из двух подвыражений <mfrac> <mi>a</mi> <mi>b</mi> </mfrac>
mroot формирует радикал с определенной степенью <mroot> <mrow> <mi>b</mi> <mo>+</mo> <mi>c</mi> </mrow> <mn>3</mn> </mroot>
mpadded регулирует отступы вокруг содержимого <mpadded width="+5em"> <mi>a</mi> <mo>+</mo> <mi>b</mi> </mpadded> <mo>-</mo> <mi>c</mi>
mphantom делает содержимое невидимым, но сохраняет его размер <mi> x </mi> <mphantom> <mo> + </mo> <mi> y </mi> </mphantom> <mo> + </mo> <mi> z </mi>
mfenced окружает содержимое парой скобок <mfenced> <mrow> <mi>x</mi> <mo> + </mo> <mi> y </mi> </mrow> </mfenced> (x+y)

Индексы

Тег Определение Пример Результат
msub добавляет нижний индекс к основанию <msub> <mi>x</mi> <mn>1</mn> </msub> x1
msup добавляет верхний индекс к основанию <msup> <mi>x</mi> <mi>y</mi> </msup> xy
msubsup добавляет верхний и нижний индексы к основанию <msubsup> <mi>x</mi> <mn>14</mn> <mn>12</mn> </msubsup>
munderover добавляет символы одновременно и над, и под основанием <m:munderover> <m:mi>X</m:mi> <m:mi>h</m:mi> <m:mi>t</m:mi> </m:munderover>

Рассмотрим несколько примеров формул в MathML.

<msup>

<mo class="MathClass-op">sin</mo>

<mn>2</mn>

</msup>

<mrow> <mi>α</mi> </mrow>

<mo class="MathClass-bin">+</mo>

<msup>

<mo class="MathClass-op"> cos</mo>

<mn>2</mn>

</msup>

<mrow><mi>α</mi></mrow>

<mo class="MathClass-rel">=</mo>

<mn>1</mn>

Греческую букву α получаем с помощью кода x03B1.

Посмотреть результат (в новом окне) (если пример не отображется, сохраните файл на диске и откройте его)

Напоминаем также, что для работы с MathML в Internet Explorer необходимо установить MathPlayer. В любом файле, содержащем разметку MathML, перед заголовочной частью документа должны присутствовать строки

<?xml version="1.0" encoding="windows-1251"?>

<?xml-stylesheet type="text/xsl" href="http://www.w3.org/Math/XSL/pmathml.xsl"?>

<html xmlns="http://www.w3.org/1999/xhtml">

Кроме того, любой код MathML открывается тегом <math xmlns="http://www.w3.org/1998/Math/MathML"> и закрывается тегом </math>.

<mfrac>

<mrow>

<msup><mi>a</mi><mn>2</mn></msup>

<mo>+</mo>

<mi>a</mi>

<mi>b</mi>

<mo>+</mo>

<msup><mi>b</mi><mn>2</mn></msup>

</mrow>

<mrow>

<mi>a</mi>

<mo>+</mo>

<mi>b</mi>

</mrow>

</mfrac>

Посмотреть результат (в новом окне) (если пример не отображется в IE, сохраните файл на диске, с помощью контекстного меню выберите Свойства, разблокируйте файл и откройте его)

<mfrac>

<mrow>

<mn>1</mn>