Смекни!
smekni.com

Отображение математических формул в формате LaTeX на форуме PHPBB3 (стр. 4 из 7)

Ядро TeX’а представляет собой язык низкоуровневой разметки, содержащий команды отступа и смены шрифта. Огромные возможности в TeX’е предоставляют готовые наборы макросов и расширений. Наиболее распространённые расширения стандартного ТеХ’а (наборы шаблонов, стилей и т.д.): LaTeX (произносится «лате́х») и AMS-TeX. При использовании пакета расширения LaTeX можно превратить разросшуюся статью в книгу изменением одного слова в исходнике, вставлять оглавление одной командой, не задумываться о нумерации разделов, теорем, рисунков. Есть много пакетов для оформления химических формул (например, пакет XymTeX), диаграмм (xypic), создания презентаций и визитных карточек и тому подобного.

Распространённые комплекты вёрстки на основе ТеХ’а: для Windows – TeX Live или MikTeX, для UNIX-подобных систем – TeX Live или teTeX.

Для создания шрифтов совместно с TeX’ом используется специально разработанная система METAFONT, в которой шрифты описываются программами на специализированном языке Meta. Могут также использоваться векторные шрифты в формате PostScript Type 1, TrueType и OpenType.

TEΧ применяется в исходных текстах Википедии для набора математических формул.

История

Первый том книги «Искусство программирования» Д. Кнута был опубликован в 1969 году и печатался методом монотипии, технологии XIX века, которая давала на выходе издание в «хорошем классическом стиле», что нравилось Кнуту. Когда в 1976 году публиковалось второе издание второго тома, всю книгу пришлось набирать вновь, поскольку монотипия почти повсеместно была замещена фотографической техникой, и оригинальные шрифты больше не использовались. Однако, когда 30 марта 1977 года Кнут получил новые оттиски, он увидел что они выглядят ужасно. Примерно в это же время Кнут впервые увидел результат работы высококачественной цифровой типографической системы, и заинтересовался возможностями цифровой типографии. Не оправдавшие ожиданий оттиски дали ему дополнительный толчок к тому чтобы решить проблему раз и навсегда, разработав свою типографическую систему. 13 мая 1977 года он написал заметку самому себе, описывающую базовые возможности TeX.

Он планировал завершить систему в свой творческих отпуск 1978 года, но получилось так что язык был зафиксирован лишь в 1989 году, более 10-ти лет спустя. Летом 1978 года, когда Кнут писал первую версию TeX, Guy Steele был в Стэнфорде; осенью того же года он вернулся в МТИ и переписал систему ввода / вывода TeX под операционную систему ITS. Первая версия TeX была написана на языке программирования SAIL и работала на PDP-10 под операционной системой WAITS. Для следующих версий Кнут изобрёл концепцию «грамотного программирования» (англ. literateprogramming), способ получения совместимого исходного кода и документации к нему (в виде текста на TeX, конечно) из одного и того же оригинального файла. Этот язык был назван WEB и производил программы на Паскале.

Новая, переписанная с нуля версия TeX была издана в 1982 году и названа TeX82. Помимо других изменений, первоначальный алгоритм переносов был заменён новым, написанным Frank Liang. TeX82 также использовал арифметику с фиксированной запятой вместо арифметики с плавающей запятой, с тем чтобы обеспечить воспроизводимость результата на различном оборудовании. Помимо этого, под нажимом Guy Steele, в TeX82 появился настоящий, тьюринг-полный язык программирования.

В 1989 году Дональд Кнут выпустил новую версию TeX и METAFONT.

MathML

MathML (отангл. Mathematical Markup Language, язык математической разметки) – это приложение XML, используемое для представления математических символов и формул в документах WWW. MathML рекомендован математической группой W3C.

Спецификация MathML версии 1.01 вышла в июле 1999, в феврале 2001 появилась версия 2.0. В октябре 2003 была опубликована вторая редакция MathML версии 2.0, которая является на настоящий момент последней спецификацией, выпущенной математической группой W3C.

MathML рассматривает не только представление, но и смысл элементов формулы. Также разрабатывается система разметки математической семантики, призванная дополнить MathML. Она называется OpenMath.

MathML имеет 2 версии– Presentation MathML и Content MathML.

Пример:

В TeX описание

x = \frac {-b\pm \sqrt {b^2 – 4ac}} {2a}

используется для представления формулы

Ниже приведено описание этой формулы с помощью MathML:

<mrow><mi>x</mi><mo>=</mo><mfrac><mrow><mrow><mo>-</mo><mi>b</mi></mrow><mo>&PlusMinus;</mo><msqrt><mrow><msup><mi>b</mi><mn>2</mn></msup><mo>-</mo><mrow><mn>4</mn><mo>&InvisibleTimes;</mo><mi>a</mi><mo>&InvisibleTimes;</mo><mi>c</mi></mrow></mrow></msqrt></mrow><mrow><mn>2</mn><mo>&InvisibleTimes;</mo><mi>a</mi></mrow></mfrac></mrow>

XML-структура MathML обеспечивает широкую область использования и позволяет быстро отображать формулы в приложениях, таких как браузеры, а также легко интерпретировать их значения в математических программных продуктах.

Поддержка программного обеспечения

Существует множество утилит для преобразования математических выражений в MathML, включая конвертеры между TeX и MathML.

Основными браузерами, непосредственно поддерживающими MathML, являются последние версии Mozilla и его разновидности. Начиная с бета-сборки 9656 (от 16 ноября 2007), этот язык поддерживает также Opera. Многие другие браузеры поддерживают этот формат при установке соответствующих плагинов. Например, в Internet Explorer для поддержики MathML используется плагин MathPlayer.

Кроме того, MathML поддерживается основными офисными программами, такими как Microsoft Word и OpenOffice.org, а также математическими программными продуктами, например, Mathematica, Maple.

Ряд решений

Рассмотрим 2 варианта решения проблемы отображения формул на конкретных примерах.

Википедия (http://ru.wikipedia.org)

Для математических формул MediaWiki использует разметку TeX'а. Но, в зависимости от пользовательских настроек и сложности выражения, они могут отображаться либо как PNG-рисунки, либо в обычной HTML-разметке.

Общие положения

· Исходный код математической формулы записывается внутри тега <math>…</math>.

· Шаблоны, переменные и параметры MediaWiki не функционируют внутри этого тега.

· Пробелы игнорируются (ТеХ их сделает сам).

· Пустые строки не разрешаются.

· Буквы должны быть набраны только латинским шрифтом. В случае написания даже одной буквы кириллицей программа сообщает об ошибке.

· Каждая буква считается переменной и воспроизводится курсивом, а цифры – прямым шрифтом (исключение – название функций и операций). Чтобы не допустить курсивного начертания для прочего текста, используйте команды &bsol;mbox или &bsol;mathrm. Например, запись <math>&bsol;mbox{abc}_&bsol;mathrm{def}</math> отображается как abcdef.

· Символы записываются с помощью «команд»[2], которые начинаются с «обратного слэш» (&bsol;) и состоят либо из командного слова из латинских букв, либо из символа (не буквы). В первом случае после командного слова должен быть обязательно пробел или другая команда.

· Команды могут иметь аргументы: {обязательные} и [необязательные].

· Переводы строк внутри тега <math>…</math> не отображаются, поэтому, чтобы сделать код более читабельным, можно вставлять переводы строк после каждого выражения или строки матрицы.

· Если в настройках пользователя не выбрана опция «Всегда генерировать PNG», то простые формулы будут отображаться как в HTML-разметке. Чтобы заставить их всегда отображаться как PNG-рисунки, следует в начале или в конце формулы вставить один из знаков принудительного пробела (~ &bsol;, &bsol;!). Cравните:

<math>a (1 + e^2 / 2)</math> a (1 + e2 / 2)<math>~a (1 + e^2 / 2)</math>
<math>df(x) = f'(x) dx</math> df(x) = f'(x) dx<math>df(x) = f'(x) dx&bsol;,</math>

· Чтобы создать выражения вида

, используйте команду &bsol;stackrel{выражение1} {выражение2}, где выражение1 – то, что будет отображаться над строкой, выражение2 – то, что останется в строке. Код приведённой формулы:

<math>A&bsol;stackrel{f} {&bsol;longrightarrow} B</math>.

· Десятичную запятую в десятичных дробях рекомендуется заключать в фигурные cкобки, чтобы избежать ненужного тонкого пробела после запятой. Сравните:

<math>~&bsol;pi=3,1415&bsol;dots</math>
<math>~&bsol;pi=3 {,} 1415&bsol;dots</math>

Исходные команды

Служебные значки

· &bsol; сигнальный символ (команд);

· {начало группы;

· } конец группы;

· _ нижний индекс;

· ^ верхний индекс;

· ~ неразрывный пробел.

Шрифты

Буква Команда Буква Команда Буква Команда
&bsol;Alpha &bsol;alpha
&bsol;Iota &bsol;iota
&bsol;Sigma &bsol;sigma
&bsol;Beta &bsol;beta
&bsol;Kappa &bsol;kappa
&bsol;varsigma
&bsol;Gamma &bsol;gamma
&bsol;Lambda &bsol;lambda
&bsol;Tau &bsol;tau
&bsol;Delta &bsol;delta
&bsol;Mu &bsol;mu
&bsol;Upsilon &bsol;upsilon
&bsol;Epsilon &bsol;epsilon
&bsol;Nu &bsol;nu
&bsol;Phi &bsol;phi
&bsol;varepsilon
&bsol;Xi &bsol;xi
&bsol;varphi
&bsol;Zeta &bsol;zeta
&bsol;Pi &bsol;pi
&bsol;Chi &bsol;chi
&bsol;Eta &bsol;eta
&bsol;varpi
&bsol;Psi &bsol;psi
&bsol;Theta &bsol;theta
&bsol;Rho &bsol;rho
&bsol;Omega &bsol;omega
&bsol;vartheta
&bsol;varrho

С помощью соответствующих команд можно изменять вид шрифта (гарнитуру) и его размеры: