Смекни!
smekni.com

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

Код:
[math]$n \in \mathbb{N}$[/math]

и в сообщении появляется вот такая картинка:

.

А при наведении на нее указателя мышки можно увидеть исходный код картинки, то есть то, что заключено между тегами math.

Теперь размеры картинок регулируемы. Этот параметр можно изменять в собственном профиле. Для Гостей этот параметр неизменяем.

Quick Start для тех, кто пользуется MathType.

Последовательность действия для использования MathType такая:

1) набрать формулу в MathType

2) (требуется выполнять только первый раз – затем настройки сохранятся и этот пункт можно пропускать)

a) Вменю MathType Preferences выбрать Translators. В открывшемся окне в меню «Translator» выбрать один из TeX-трансляторов (например «TeX – AMS-LateX»)

б) убратьгалочкус«Include MathType data in translation»

3) Скопировать формулу

4) Вставить в окно ввода в форуме

5) Выделить вставленный текст и нажать кнопку Math. Ура – формула готова.

Вот пример, генерированный MathType:

Упрощенная форма записи формул в сообщениях.

1. Последовательность $…$ теперь автоматически окружается тегом math, если содержимое не разбито переносом строки.

2. Последовательность $$…$$ теперь тоже автоматически окружается тегом math.

3. Пункты 1 и 2 не выполняются, если указанные последовательности находятся внутри тегов math или code

4. Для отмены автозамены (в случае, когда Вы хотите употребить знак доллара в его обычном смысле) заключите Ваше сообщение в тег <notex>…</notex> (скобки замените на квадратные)

Как писать формулы.

Тег math преобразует содержимое в картинку, которая получилась бы, если бы мы составили LaTeX-документ с такой преамбулой:

Код:
&bsol;documentclass{article}
&bsol;usepackage{amsmath}
&bsol;usepackage {amsfonts, amssymb}
&bsol;usepackage{amsthm}
&bsol;usepackage[cp1251] {inputenc}
&bsol;usepackage [matrix, arrow, curve] {xy}
&bsol;usepackage [english, russian] {babel}
&bsol;usepackage[final] {graphicx}
&bsol;usepackage{mathrsfs}
&bsol;pagestyle{empty}
&bsol;begin{document}

1. Какие бывают формулы.

Формулы бывают обычные и выключные (расположенные на отдельной строке по центру страницы). Обычная формула окружается как скобками символом $, а выключная – парой символов $$. Пример обычной формулы:

А вот выключная формула:


Эти формулы были созданы при помощи следующих кодов:

Код:
[math] По определению, $&bsol;tg x = &bsol;frac {&bsol;sin x} {&bsol;cos x}$. Это все знают. [/math]
[math] Некоторые полагают, что $$&bsol;sin^2 x = &bsol;sin {x^2},$$ но это неверно! [/math]

2. Греческие буквы

Код:
[math]$&bsol;Gamma$[/math] [math]$&bsol;Delta$[/math] [math]$&bsol;Theta$[/math]
[math]$&bsol;Lambda$[/math] [math]$&bsol;Xi$[/math] [math]$&bsol;Pi$[/math]
[math]$&bsol;Sigma$[/math] [math]$&bsol;Upsilon$[/math] [math]$&bsol;Phi$[/math]
[math]$&bsol;Psi$[/math] [math]$&bsol;Omega$[/math]

4. Верхние и нижние индексы

Верхний индекс задается при помощи крышки ^. Символ, непосредственно следующий за крышкой, будет служить верхним индексом для того, что стоит перед крышкой:

Код:
[math]$4^2 = 2 ^ 4 $, exp(x) – это то же самое, что и $e ^x$[/math]

Аналогично нижний индекс задается знаком _:

Код:
[math] Рассмотрим числовую последовательность $a_n = &bsol;frac 1 n$[/math]

Верхний и нижний индексы можно сочетать, причем порядок следования индексов не важен:

Код:
[math] $C_n^0 = C ^n _n = 1 $[/math]

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

[math]$C_n^k = C_{n-1}^k + C_{n-1}^{k-1}$[/math]

3. Постановка задачи

Передо мной была поставлена задача: создать решение проблемы отображения математических и других формул для форума физико-математического факультета Орловского государственного университета, используя установленный форумный движок phpBB3, издательскую систему TeX, пакет расширений LaTeX и пакет для обработки графических файлов ImageMagick.

Рассмотрим вкратце то, что из перечисленного не было рассмотрено ранее.

LaTeX

LaTeX (произносится как «лэйтех» или «латех» аналогично TeXу; ударение допустимо на любой из слогов) – наиболее популярный набор макрорасширений (или макропакет) к TeX, который облегчает набор сложных документов. Важно заметить, что ни один из макропакетов для TeX'а не может расширить TeX'овских возможностей (всё, что можно сделать в LaTeX’е, можно сделать и в Plain TeX'е), но благодаря различным упрощениям использование макропакетов зачастую позволяет избежать весьма изощрённого программирования.

Пакет позволяет автоматизировать многие задачи набора текста и подготовки статей, включая набор текста на нескольких языках, нумерацию разделов и формул, перекрёстные ссылки, размещение иллюстраций и таблиц на странице, ведение библиографии и др. Кроме базового набора существует множество пакетов расширения LaTeX. Первая версия была выпущена Лесли Лампортом (Leslie Lamport) в 1984, текущая версия – LaTeX2ε, после создания в 1994 году испытывала некоторый период нестабильности, окончившийся к концу 90-х годов, а в настоящее время стабилизировалась (хотя раз в год выходит новая версия).

Общий внешний вид документа в LaTeX определяется стилевым файлом. Существует несколько стандартных стилевых файлов для статей, книг, писем и т.д., кроме того, многие издательства и журналы предоставляют свои собственные стилевые файлы, что позволяет быстро оформить публикацию, соответствующую стандартам издания.

Во многих развитых компьютерных аналитических системах, например, Maple, Mathematica, Maxima возможен экспорт документов в формат *.tex. Для представления формул в Википедии также используется TeX-нотация.

Распространяемый под лицензией GNU GPL, LaTeX относится к свободному программному обеспечению.

LaTeX-редакторы

Для облегчения набора и сборки документов LaTeX существует несколько интегрированных сред, например:

· Emacs + auctex + reftex + preview-latex

· Kile

· LEd

· LyX (http://www.lyx.org/)

· TeXmacs (http://www.texmacs.org/)

· Winefish (http://winefish.berlios.de/)

· Texmaker (англ.)

· TeXnicCenter (англ.)

· WinEdt – единственный коммерческий из перечисленных.

ImageMagick

ImageMagick – свободный и многоплатформенный пакет программ для неинтерактивной (пакетной) обработки графических файлов. Поддерживает множество графических форматов, выпущен под лицензией GPL. Может использоваться с языками Perl, C, C++, Python, Ruby, PHP, Pascal, Java, в скриптах командной оболочки или самостоятельно. В его состав входят такие программы как convert, dvips, identify.

4. Реализация поставленной задачи

Сначала опишем сам процесс, направленный на получение отображения необходимой формулы: участник форума во время написания сообщения может использовать тег [TeX] (обязателен закрывающий тег [/TeX]), внутри которого необходимо написать требуемую формулу, используя язык разметки TeX.

Далее первый хук перехватывает весь текст сообщения и изменяет теги [TeX] и [/TeX] на теги вида [TeX:$uid] и [/TeX:$uid] для возможной дальнейшей более тесной интеграции с форумом.

Второй хук выполняет непосредственные преобразования всех формул, заключенных в теги [TeX] и [/TeX] в картинки необходимого формата (gif или png) с последующим вставлением картинок в отправляемый текст сообщения. При наведении курсора на картинку всплывает исходный текст формулы.

Преобразование формул в картинки происходит следующим образом:

1. весь текст между тегами формул заносится в массив для удобной обработки;

2. далее идет обработка каждой формулы: проверка на корректность;

3. во временной директории создается файл с расширением tex, который содержит стандартное оформление документа с отдельной формулой, и случайным именем;

4. создается dvi файл, используя latex;

5. этот dvi файл конвертируется в Postscript (ps), используя dvips (tetex);

6. конвертирование, обрезка и добавление прозрачности, используя convert из пакета ImageMagick, в результате получается требуемая картинка;

7. далее имя конечной картинки рассчитывается через применение функции необратимого шифрования md5 (), которая является стандартной в языке PHP, параметром этой функции является текст формулы; полученное имя является уникальным для данной формулы;

8. очистка временной директории от использовавшихся файлов;

9. в текст сообщения передается ссылка на получившуюся картинку;

10. в случае ошибки при данном процессе выводится соответствующее предупреждение («[unparseable or potentially dangerous latex formula]»).