Отображение математических формул в формате LaTeX на форуме PHPBB3

Отображение математических формул в формате LaTeX на форуме PHPBB3






Введение



Было бы большой ошибкой говорить об Интернете только как о банке информации, доступной всему миру. Ценность Интернета была бы намного ниже, если бы не было возможности общаться с его помощью с другими людьми, легко преодолевая любые расстояния и границы. На сегодняшний день общение с помощью Интернета является самым дешёвым и удобным. Существует несколько способов обмениваться информацией. Рассмотрим самые распространённые из них.

Электронная почта

Электронная почта или имей (англ. e-mail либо email, сокр. от electronic mail) – наименование службы и предоставляемой ею услуги по пересылке и получению электронных сообщений по распределенной (в том числе глобальной) компьютерной сети.

Особенности

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

В завершение разговора об электронной почте стоит сказать, что это – основное средство общения через Интернет. Основное, но не единственное. Далее пойдёт речь о других достаточно распространённых способах общения.

2. Чаты

Чаты (англ. chat – дружеский разговор; беседа; болтовня) – ещё одно место для «тусовок» в Интернете. Это тоже место для общения, только цель этого места – не обмен мнениями на какую-то тему, а просто времяпрепровождение.

Принцип работы чата следующий:

После регистрации вы выбираете себе «комнату» для общения. Комната – это условный раздел, которых определяется интересами посетителей: музыка, спорт, секс, и т.п.; или возрастом: молодёжный, «взрослый».

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

Вы можете оставить своё сообщение в этой комнате, вписав его в соответствующее поле ввода. Оно появится в том же окне, где и все буквально через несколько секунд.

Вы можете посылать личные сообщения участникам чата. В этом случае никто, кроме адресата, его не увидит.

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

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

Вот несколько посещаемых чатов: chat.ctc-tv.ru, chat.chat.ru, chat.mail.ru.

3. Интернет-пэйджер (ICQ)

Особое место в ряде возможностей общения через Интернет занимают программы, позволяющие обмениваться мгновенными сообщениями. Такие программы называют интернет-пэйджерами. Преимущество использования этих программ состоит в том, что адресат получает сообщение через секунду после его отправки. Причём для этого не надо никуда специально заходить и проверять состояние входящей корреспонденции. На экране компьютера замигает значок программы, раздастся характерный звук. Одним словом, вы узнаете об этом сразу. Более того, наладив контакт с адресатами, вы всегда будете видеть, находятся ли они в данный момент в сети или нет.

Самой распространённой среди них является ICQ. Есть мнение, что название эта программа получила от созвучия этих букв фразе I seek you (я ищу тебя). Есть и другие программы, причём по функциональности они в чём-то могут превосходить вышеназванную. Но ни одна из них не может пока превзойти её в количестве пользователей. На сегодняшний день сервер, регистрирующий пользователей этой программы, выдаёт девятизначные порядковые номера. Не все из них, правда, реально используются, но всё равно число внушительное.

Пользоваться программой ICQ можно абсолютно бесплатно, если не считать платой показ в её окнах рекламных баннеров. Для этого необходимо зайти на сайт производителя и скачать дистрибутив программы. После установки программы на компьютер, вам будет предложено либо активировать на ней уже существующего пользователя (если вы имеете свой уникальный номер и знаете к нему пароль), либо завести нового пользователя. В последнем случае вам будет присвоен новый уникальный номер (ICQ UIN), который вы сможете раздавать всем, желающим с вами общаться. Вас также попросят ввести некоторую информацию о себе. Вы можете рассказать о себе ровно столько, сколько захотите. Эта информацию будет доступна всем, кто проявил к вам интерес.

4. Форумы

Данный материал будет рассмотрен ниже.






1. Форумы и их движки



Веб-форум – класс веб-приложений для организации общения посетителей веб-сайта. Термин соответствует смыслу исходного понятия «форум».

Форум предлагает набор разделов для обсуждения. Работа форума заключается в создании пользователями тем в разделах и последующим обсуждением внутри этих тем. Отдельно взятая тема, по сути, представляет собой тематическую гостевую книгу.

Распространённое деление веб-форума: Разделы → темы → сообщения.

Обычно сообщения несут информацию «автор – тема – содержание – дата / время». Сообщение и все ответы на него образует ветку («тред»).

Обсуждение должно соответствовать теме. Отклонение от начальной темы обсуждения часто запрещено правилами поведения форума. За соблюдением правил следят модераторы и администраторы – участники, наделённые возможностью редактировать, перемещать и удалять чужие сообщения в определённом разделе или теме, а также контролировать к ним доступ отдельных участников.

На форумах может применяться чрезвычайно гибкое разграничение доступа к сообщениям. Так, на одних форумах чтение и создание новых сообщений доступны любым случайным посетителям, на других необходима предварительная регистрация (наиболее распространённый вариант) – те и другие форумы называют открытыми. Применяется и смешанный вариант – когда отдельные темы могут быть доступны на запись всем посетителям, а другие – только зарегистрированным участникам. Кроме открытых, существуют закрытые форумы, доступ к которым определяется персонально для каждого участника администраторами форума. На практике также нередко встречается вариант, когда некоторые разделы форума общедоступны, а остальная часть доступна только узкому кругу участников.

При регистрации участники форума могут создавать профили – страницы со сведениями о данном участнике. В своём профиле участник форума может сообщить информацию о себе, настроить свой аватар или подпись – в зависимости от предпочтений. Подпись может быть статичным текстом, либо содержать графические картинки (юзербары).

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

Многие форумы при создании новой темы имеют возможность присоединения к ней голосований или опросов. При этом другие участники форума могут проголосовать или ответить на заданный в заголовке темы вопрос, не создавая нового сообщения в теме форума.

Каждый конкретный форум имеет свою тематику – достаточно широкую, чтобы в ее пределах можно было вести многоплановое обсуждение. Часто также несколько форумов сводят воедино в одном месте, которое также называют форумом (в широком смысле).

По методу формирования набора тем форумы бывают с динамическим списком тем и с постоянным списком тем. В форумах с динамическим списком тем простые участники могут создавать новую тему в рамках тематики форума.

Обычно форум имеет возможность поиска по своей базе сообщений.

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

В настоящее время веб-форумы почти полностью вытеснили новостные группы на базе NNTP и являются одним из наиболее популярных способов обсуждения вопросов во Всемирной паутине. На данный момент форумы сосуществуют наравне с блогами. Эти две формы общения в Интернете практически не уступают друг другу по популярности.

Движки форумов

Движок форума – конкретное веб-приложение, реализующее перечисленные выше признаки. Десять самых популярных движков для крупнейших форумов в Сети (более 500 000 сообщений), данные на 23 октября 2006:





Программное обеспечение форума

Число инсталляций

Доля

1

vBulletin (vBulletin)

1091

58,5%

2

Invision Power Board

238

12,8%

3

phpBB

210

11,3%

4

UBB (UBB)

41

2,2%

5

ezboard (ezboard)

37

2,0%

6

Simple Machines Forum (SMF)

33

1,8%

7

ASP Playground

15

0,8%

8

MesDiscussions.net

15

0,8%

9

Burning Board

11

0,6%

10

Другие проекты (Fusetalk (Fusetalk), proboards, XMB, ASP.net, Ikonboard, zeroforum, Web Wiz Forums, Lithium, Jive, wwwthreads, Ideal BB, discuz, Aceboard, IGNBoards, Snitz, YaBB, CrazyWeb, WebCrossing, React, Novogate, PunBB, FluxBB, bbPress, Opentopic, WowBB, ExBB)

73

3,9%

11

Собственные разработки

101

5,4%



Всего

1865

100%



Обзор форумных движков

Если вы решили создать форум, то перед вами, наверняка, встала проблема выбора движка. Форумных движков много, хороших – меньше, но все еще достаточное количество, чтобы можно было запутаться при выборе.
Для обзора были использованы следующие движки: phpBB, phpBB 3, punBB, Simple Machines Forum, Vanilla, bbPress и miniBB.

Приведем небольшое описание каждому из движков, основываясь на двух критериях: удобство для пользователей и удобство для администратора.

phpBB

Начнем с самого распространенного движка. phpBB не зря заслужил свою популярность – он в меру прост и удобен, а его стандартная тема subSilver является практически эталоном тем для форумов. Панель администрирования неплоха, но неудобно её устройство – предпочтительнее видеть один не разделенный на фреймы экран с единой полосой прокрутки. Так же неудобно отсутствие поддержки плагинов – любые изменения, по сути, являются модами и хаками, что неизбежно скажется при апдейте движка. Наверняка, со временем на смену большинству инсталляций phpBB2 придет более современный phpBB3.

phpBB 3

Первое впечатление можно описать фразой «так вот ты какое, будущее…». Инсталлятор удобен и понятен, хотя, можно было бы уменьшить количество шагов. Панель администрирования функциональна, но требует времени, чтобы с ней разобраться. Сразу что-либо сделать не получается – нужно сначала подумать, где находится нужная функция и как с ней работать. По умолчанию установлена тема prosilver. Судя по названию, это нечто гораздо более крутое и лучшее, чем предыдущая стандартная тема – subSilver. Выглядит, конечно, впечатляюще… В общем, движок функциональностью не обделен и очень популярен, но интерфейсу явно не хватает интуитивности и удобства.

Simple Machines Forum

SMF – последний «тяжеловес» в данном обзоре. Причем, свое звание он оправдывает полностью. Удивителен размер темы по умолчанию – 2 мб. Половину места в установленном форуме занимают именно темы (в стандатной поставке идут три темы, в сумме ~2,5 МБ). Скорее всего, у движка большие проблемы с разделением логики и представлением данных. Зато панель администрирования порадовала – функционально и просто. SMF – неплохая альтернатива распространенному phpBB – он гораздо функциональнее, чем phpBB2 и в то же время удобнее и понятнее, чем phpBB3.

punBB

Очень легкий и приятный форум. Стандартная тема сверстана на дивах и не использует картинок. Для тех, кто знает CSS или знает очень плохо не составляет большого труда «персонализировать» тему. Большим минусом является отсутствие системы персональных сообщений – хотя существует мод, который это исправляет. Но не одними модами изменяется форум – движок поддерживает плагины, которые вы можете включать и отключать когда захотите. Панель администрирования проста и удобна. punBB подойдет тем, кто ищет простой и легкий движок не обремененный излишней функциональностью.

punBB (русская сборка)

Русская сборка punBB хоть и не является отдельным движком, но заслуживает отдельного обзора. В этой сборке сохранены все преимущества punBB, добавлены персональные сообщения, работа с кодировкой UTF-8 и много других вкусностей. Используйте, если хотите получить функциональный и легкий форум с русскоязычной поддержкой.

Vanilla

Этот форумный движок отличается от других своей модульностью. В начальном виде это легкий форум, но с помощью аддонов можно добавить любую функциональность. По сути, Vanilla – это платформа-конструктор для создания сообщества с нужными функциями. Но там, где другие движки заработали без лишних вопросов, Vanilla потребовала к себе особого внимания… Панель администрирования вполне нормальная, тема по умолчанию тоже. Данный движок подойдет, если вы хотите создать нечто большее, чем форум – с помощью аддонов вы сможете создать свое сообщество.

bbPress

Еще один не совсем форумный движок. Поддерживаются темы и плагины. Еще есть теги и возможность помечать топики как «favorite». Кстати, свой слоган («Simply, Fast, Elegant») движок отлично выполняет. В общем, вещь весьма интересная и неплохо подойдет для организации «тусовки при блоге».

miniBB

Минимум функций форматирования текста. Абсолютно невыразительный процесс установки. И панель администрирования, от которой хочется плакать. Возможно, кому-то такой минимализм придется по душе. Его можно описать как «движок для сообщества максимум в 10 человек». Хотя, разумеется, не все так страшно – просто так движок выглядит рядом с другими из этого обзора.

Phorum

Phorum – не самый новый продукт, однако его популярность неоспорима, поскольку его движок используется на самых посещаемых сайтах Интернета. Причина его успеха, по большей части, кроется в простоте, которая заключается в низких требованиях движка к ресурсам сервера, а так же к уровню навыков программирования вебмастера. Движок форума разработан на PHP, использует базу данных MySQL или PostgreSQL. Вам остается лишь установить его на сервер, где присутствуют необходимые компоненты. По функциональным возможностям форум напоминает phpBB, например, существует возможность развернуть несколько форумов и сгруппировать их в разделы. Однако, в отличие от phpBB, форум не обладает несколькими распространенными функциями, например поддержкой аватаров и приватных сообщений.

Система администрирования достаточно развита и позволяет гибко настраивать движок и дизайн форума: существует возможность поставить ограничение на доступ участников к различным форумам, разрешить / запретить прикрепленные файлы, назначить модераторов и.т.д. Внешний вид можно настроить, поменяв цвета и размер таблиц. Код хорошо организован, его блоки распределены по различным модулям. Так модификация файлов header.php и footer.php приводит к изменению содержания верхней и нижней части страницы. Поэтому вы можете легко модифицировать форум под ваши нужды при условии хорошего знания php. Phorum – прекрасное решение, если вы не хотите путаться в дополнительных сервисах phpBB. Можно, конечно, придраться к отсутствию некоторых нужных функций, однако большое количество существующих модулей и плагинов помогут решить эту проблему. Возможно, в пятой версии эти пробелы будут устранены. С сайта разработчика необходимо скачать русский интерфейс.

Выводы:

phpBB – подойдет, если вы хотите «форум-стандарт» и вам не потребуется дополнительных функций. Для любых сообществ, независимо от размера и тематики.

phpBB3 – подойдет, если вы можете потратить немного времени на изучение его возможностей. Для небольших сообществ без перспективы роста использование кажется не слишком оправданным.

SMF – если вы хотите иметь хорошую функциональность (каптча, система кармы и многое другое). Подойдет для любых сообществ.

punBB – если вам нужен легкий, функциональный и удобный форум. Для любых сообществ.

Vanilla – подойдет для создания уникальной платформы для различных сообществ.

bbPress – лучше всего будет смотреться в кооперации с Wordpress, предоставляя удобную площадку для читателей блога.

miniBB – для небольших сообществ, либо сообществ, где не важна функциональность форума.

Характеристика движка форума phpBB

phpBB – это мощное, полностью масштабируемое и легко изменяемое программное обеспечение с открытым исходным кодом для создания конференций. У phpBB дружественный интерфейс, простой и понятный администраторский раздел и всеохватывающий FAQ. Основанный на мощном языке PHP и имеющий поддержку серверов баз данных MySQL, MS-SQL, PostgreSQL или Access/ODBC phpBB является идеальным бесплатным решением для создания конференции на вашем сайте.

Основные возможности:

Поддержка популярных серверов баз данных

Неограниченное количество форумов и сообщений в них

Интерфейс с поддержкой нескольких языков

Закрытые и общедоступные форумы

Мощное средство поиска

Система личных сообщений

Полная изменяемость внешнего вида

phpBB второй версии был полностью переписан со времен первоначального выпуска. Версия 2 фокусируется на модульном дизайне профессионального уровня, высокой степени безопасности, многоязычном интерфейсе, поддержке множества серверов баз данных и возможностях полной настройки внешнего вида – и всё при низком потреблении системных ресурсов.

phpBB основывается на PHP, наиболее быстроразвивающемся языке исполнения скриптов на стороне сервера, что имеет следствием наиболее богатый по функциям форум из всех существующих.

Кроме того, phpBB разрабатывается на основе открытых исходных кодов, а значит не требует оплаты, взносов или подписки, не имеет ограничений к модификации. Прибавьте к этому огромное дружески настроенное сообщество phpBB и вы получите отличное решение для организации общения на вашем сайте!

Инсталляция

Простой механизм инсталляции, позволяющий создать работоспособный форум в течение считанных минут.

Возможность полного обновления с версий 1.x.

Поддержка баз данных

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

		MySQL 3.2x

		PostgreSQL 7.x

		Microsoft SQL Server 7/2000

		Microsoft Access (через ODBC)

		а также поддержка других баз данных в будущем

Безопасность

При разработке форума безопасность считалась главным приоритетом.

Мощная и всестороння система авторизации.

Надежные методы шифрования для безопасного хранения паролей в базе данных.

Поддержка сессий cookie и URI.

Отсутствие ограничений для форумов и категорий

Возможность создания неограниченного количества форумов с произвольным числом категорий.

Закрытые форумы и форумы для определенных групп пользователей.

Мощные средства осуществления поиска.

Публикация сообщений

Форматирование сообщений при помощи различных начертаний и размеров шрифтов, а также отображение цитат, кода, рисунков и автоматическая подсветка URL.

Поддержка стандартных и расширенных тегов BBCode и некоторых тегов HTML.

Уведомления об ответе в темах по e-mail.

Мощное средство подписки на уведомления в теме.

Оригинальные смайлики для выражения эмоций.

Гибкость пользовательских групп и прав доступа к форуму

Мощная система управления доступом форумов, пользователей и групп.

Управление доступом к форуму заданных групп пользователей.

Управление всеми аспектами публикации сообщений.

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

Возможности пользователей

Неограниченное количество участников.

Создание личного профиля.

Подсчет количества сообщений и устанавливаемые администратором ранги пользователей.

Подобная e-mail система обмена личными сообщениями

Поддержка локальных, удаленных и загружаемых аватар

Возможности модераторов

Редактирование тем.

Массовое удаление / перемещение / закрытие / открытие тем.

Разделение тем.

Возможность автоматической чистки старых или неотвеченных сообщений для каждого форума.

Легкий в использовании центр администрирования

Общая конфигурация конференции.

Настройка форумов и категорий.

Легкость резервного копирования и восстановления базы данных.

Запрет имен пользователей.

Авторизация пользователей.

Автоцензор слов.

Полное управление участниками.

Настройка смайликов.

Опциональная проверка наличия новых сообщений.

Расширенное управление запрещением доступа к форуму – бан по e-mail, имени пользователя, по одному или группе IP адресов, имени домена.

Регистрация IP-адресов пользователей и сообщений.

Массовая рассылка почты администратором пользователям и группам

Стили и настройка внешнего вида

Возможность выбора среди массы доступных стилей.

Отделенные от кода шаблоны для легкости внедрения или интеграции дизайна.

Полное управление шрифтами и цветами через CSS.

Совместимость стиля по умолчанию со стандартами XHTML 1.0 и HTML 4.01 консорциума W3C.

Поддержка

Всё это поддерживается большим, постоянно растущим и дружелюбным сообществом со всего мира, готовым оказать помощь по любым проблемам, предложениям или просто пообщаться!



2. Использование формул в сети Интернет



Естественнонаучные текстовые ресурсы

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

Во многих естественнонаучных текстах одной из основных компонент являются математические формулы. Поэтому грамотная работа с формулами имеет ключевое значение для эффективной информационной поддержки многих направлений обучения.

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

Анализ существующих подходов

Классической средой работы с естественнонаучными текстами является система TeX, разработанная Д. Кнутом. Большой популярности TeX'а и его потомков (AMSTex, LaTeX и др.) способствовал ряд факторов. Во-первых, формализм ТеХ'а основан на идее разделения содержания и представления. Как правило, такого логического структурирования вполне достаточно, чтобы ТеХ сгенерировал полиграфический вариант текста высокого качества. Доводка внешнего представления текста имеющимися в TeX'е средствами полиграфической настройки может проводиться на втором этапе работы. Это наиболее перспективный подход, когда внешнее представление документа генерируется автоматически из логической разметки текста, сделанной человеком.

TeX является первой системой, в которой угадано основное направление развития представлений текстовой информации в распределенных информационных системах. Используемые в TeX'e, и особенно в его клонах, принципы разметки текста и отделения содержания от представления, лежат в основе современных подходов к обработке структурированной текстовой информации. Конечно, в ТеХ'е все эти возможности используются нерегулярно, и в незначительных масштабах. Кроме того, формализм ТеХ'а не соответствует современным формализмам разметки текстов, основанных на языке XML.

В последнее время для разработки математических текстов стал активно использоваться редактор MS Word, включающий специальные возможности для создания формул (MS Equation Editor, MathType). Подход, реализованный в этом редакторе, более доступен массовому пользователю, чем LaTeX, не требует установки дополнительного программного обеспечения. Минусы также очевидны. Во-первых, полиграфическое качество математических формул в Word'е значительно ниже, чем то, которое генерирует система ТеХ. Во-вторых, DOC-формат является принципиально закрытым форматом, мало пригодным для работы в открытых системах. Из этого, в частности, следует непригодность DOC-формата для публикации информации в Интернете – приходится конвертировать текст либо в HTML (причем хорошо известна колоссальная перегруженность структуры HTML-файла, который генерируется Вордом), либо в другой закрытый, но более приспособленный для обмена формат PDF. Есть и другие довольно существенные недостатки. Вообще, с точки зрения современного понимания того, как работать со структурированной текстовой информацией, идеология, заложенная в редакторе Word, является значительно более устаревшей, чем в появившейся намного раньше системе TeX.

Отметим и другую проблему. Наличие нескольких стандартов представления математических и естественнонаучных текстов вносит очень серьезную путаницу. Например, уже сегодня многие сталкиваются с той проблемой, что организаторы разных научных конференций требуют тексты в разных форматах – кто-то в LaTeXе, кто-то в Word'е. Информационная среда заполняется информацией, сформатированной в совершенно разных, несовместимых стандартах. Результат – потеря целостности информационной среды, постоянные проблемы с чтением, использованием и обработкой текстов в разных форматах.

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

базируется на принципе разделения представления и содержания документа.

основан на разметке текстов логического уровня.

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

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

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

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

допускает богатую «интеллектуальную» обработку документа достаточно легкими онлайновыми программными средствами.

Базой для создания такого формата служит расширяемый язык разметки XML. Очень существенным шагом в этой области является появление диалекта XML – языка MathML, ориентированного на описание математических формул. MathML интересен по многим причинам. Во-первых, формат MathML основан на языке разметки XML, что позволяет использовать большое количество наработанных компонент и библиотек. Во-вторых, формат MathML реализует два вида представления: презентационное и содержательное. В-третьих, формат MathML является открытым стандартом, поддерживаемым консорциумом W3, что очень важно для построения сложных систем, ориентированных на использование широкими массами пользователей. В своей «презентационной» части MathML идеологически весьма близок TeX-формату.

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

Когда речь идет о вводе формул пользователем, то можно рассматривать две основные ситуации: создание, редактирование и представление математических текстов, и ввод формул в различных прикладных приложениях и Web-сервисах, в частности, электронных форумах и учебных программных комплексах. Решение задач обработки естественнонаучной информации является самостоятельной и весьма объемной проблемой.

TeX

TEΧ (обычным текстом – TeX) – система компьютерной вёрстки, разработанная американским профессором информатики Дональдом Кнутом в целях создания компьютерной типографии. В неё входят средства для секционирования документов, для работы с перекрёстными ссылками и для набора сложных математических формул.

Название произносится как «тех» (от греч. τέχνη – «искусство», «мастерство»). В написании буква E опущена ниже T и X.

Документы набираются на собственном языке разметки в виде обычных ASCII-файлов, содержащих информацию о форматировании текста или выводе изображений. Эти файлы (обычно имеющие расширение «.tex») транслируются специальной программой в файлы «.dvi» (device independent – «независимые от устройства»), которые могут быть отображены на экране или напечатаны. DVI-файлы можно специальными программами преобразовать в PostScript, PDF, или другой электронный формат.

Ядро 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. Для следующих версий Кнут изобрёл концепцию «грамотного программирования» (англ. literate programming), способ получения совместимого исходного кода и документации к нему (в виде текста на 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 не функционируют внутри этого тега.

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

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

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

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

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

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

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

Если в настройках пользователя не выбрана опция «Всегда генерировать PNG», то простые формулы будут отображаться как в HTML-разметке. Чтобы заставить их всегда отображаться как PNG-рисунки, следует в начале или в конце формулы вставить один из знаков принудительного пробела (~ \, \!). 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\,</math>

	



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

<math>A\stackrel{f} {\longrightarrow} B</math>.

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



<math>~\pi=3,1415\dots</math>



<math>~\pi=3 {,} 1415\dots</math>





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

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

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

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

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

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

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

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



Шрифты

Буква

Команда

Буква

Команда

Буква

Команда



\Alpha \alpha



\Iota \iota



\Sigma \sigma



\Beta \beta



\Kappa \kappa



\varsigma



\Gamma \gamma



\Lambda \lambda



\Tau \tau



\Delta \delta



\Mu \mu



\Upsilon \upsilon



\Epsilon \epsilon



\Nu \nu



\Phi \phi



\varepsilon



\Xi \xi



\varphi



\Zeta \zeta



\Pi \pi



\Chi \chi



\Eta \eta



\varpi



\Psi \psi



\Theta \theta



\Rho \rho



\Omega \omega



\vartheta



\varrho







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



Вид шрифта

Команда

Изображение

Жирный шрифт (греческий)

\boldsymbol



Жирный шрифт (векторы)

\mathbf



Ажурный шрифт

\mathbb



Рубленый шрифт

\mathsf



Готический шрифт

\mathfrak



Рукописный шрифт

\mathcal



Прямой шрифт

\mathrm

abcd

Прописные наклонным шрифтом

\mathit





Бинарные операции





Команда

Изображение

+ –



\amalg \setminus



\pm \mp



\ast \star *



\centerdot \cdot \bullet



\circ \bigcirc



\odot \circleddash \circledast \circledcirc



\oplus \otimes \ominus \oslash



\boxplus \boxtimes \boxminus \boxdot









Команда

Изображение

\sqcap \sqcup



\cap \cup \uplus



\Cap \Cup



\doublecap \doublecup



\dagger \ddagger



\times \div \divideontimes



\ltimes \rtimes



\leftthreetimes \rightthreetimes



\vartriangle \triangledown



\triangle \mathcal 5









Команда

Изображение

\bigtriangleup \bigtriangledown



\triangleright \triangleleft



\diamond



\bowtie



\vee, \lor \wedge, \land



\veebar \barwedge



\doublebarwedge



\curlywedge \curlyvee



\wr



\intercal



\dotplus







Символы математических функций

При написании стандартных функций обратите внимание:



Правильно:

<math>\sin x + \ln y +\operatorname{sgn}\, z</math>



Неправильно:

<math>sin x + ln y + sgn z</math>









Тригонометрические

\sin



\cos



\tan



\cot



\sec



\csc



\arcsin



\arccos



\arctan



\arccot



\arcsec



\arccsc







Гиперболические

\sinh



\cosh



\tanh



\coth



Прочие

\arg



\deg



\det



\dim



\exp



\lg



\ln



\log









\max



\min



\mod



\bmod



\pmod



\gcd



\hom



\inf



\ker



\lim



\liminf



\limsup



\Pr



\sup











Электронная библиотека Попечительского совета механико-математического факультета  МГУ (http://lib.mexmat.ru)

На форуме появился новый тег \math. Если окружить парой таких тегов формулу в TeX'е, то в сообщение автоматически будет помещена картинка с написанной формулой. Примерно так: пишете



Код:

[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-документ с такой преамбулой:



Код:

\documentclass{article} 
\usepackage{amsmath} 
\usepackage {amsfonts, amssymb} 
\usepackage{amsthm} 
\usepackage[cp1251] {inputenc} 
\usepackage [matrix, arrow, curve] {xy} 
\usepackage [english, russian] {babel} 
\usepackage[final] {graphicx} 
\usepackage{mathrsfs} 
\pagestyle{empty} 
\begin{document}



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

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







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






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



Код:

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



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

Код:

[math]$\Gamma$[/math] [math]$\Delta$[/math] [math]$\Theta$[/math] 
[math]$\Lambda$[/math] [math]$\Xi$[/math] [math]$\Pi$[/math] 
[math]$\Sigma$[/math] [math]$\Upsilon$[/math] [math]$\Phi$[/math] 
[math]$\Psi$[/math] [math]$\Omega$[/math]





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

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







Код:

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



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







Код:

[math] Рассмотрим числовую последовательность $a_n = \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) с последующим вставлением картинок в отправляемый текст сообщения. При наведении курсора на картинку всплывает исходный текст формулы.

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

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

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

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

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

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

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

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

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

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

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

Практическая часть.

Часть php-скрипта («posting.php») форума, в которую были внесены необходимые изменения(хуки) для перехвата текста сообщения:



if ($submit || $preview || $refresh) // Отправка, предварительный просмотр написанного сообщения

{

$post_data ['topic_cur_post_id'] = request_var ('topic_cur_post_id', 0);

$post_data ['post_subject'] = utf8_normalize_nfc (request_var ('subject', «, true));

$text = utf8_normalize_nfc (request_var ('message', «, true)); // Перехват сообщения

include_once ('latexrender/phpbb_hook_1.php'); // Первый хук

include_once ('latexrender/phpbb_hook_2.php'); // Второй хук

$message_parser->message = $text; // Дальнейшая обработка сообщения средствами форума

$post_data['username'] = utf8_normalize_nfc (request_var ('username', $post_data['username'], true));

…

Первый хук:

<? php

$text = preg_replace(«#\[tex\] (.*?)\[/tex\]#si», «[tex:$uid]\\1 [/tex:$uid]», $text);

?>

Второй хук:

<? php

$latexrender_path = «latexrender»;

$latexrender_path_http = «latexrender»;

include_once ($latexrender_path. "/class.latexrender.php»);

preg_match_all(«#\[tex:$uid\] (.*?)\[/tex:$uid\]#si»,$text,$tex_matches);

$latex = new LatexRender ($latexrender_path. "/pictures», $latexrender_path_http. "/pictures», $latexrender_path. "/tmp»);

for ($i=0; $i < count ($tex_matches[0]); $i++) {

$pos = strpos ($text, $tex_matches[0] [$i]);

$latex_formula = html_entity_decode ($tex_matches[1] [$i]);

$url = $latex->getFormulaURL ($latex_formula);

$alt_latex_formula = htmlentities ($latex_formula, ENT_QUOTES);

$alt_latex_formula = str_replace («\r», «&#13;»,$alt_latex_formula);

$alt_latex_formula = str_replace («\n», «&#10;»,$alt_latex_formula);

if ($url!= false) {

$text = substr_replace ($text, «<img src='».$url. «' title='»..$alt_latex_formula. «' alt='».$alt_latex_formula. «' align='absmiddle'>», $pos, strlen ($tex_matches[0] [$i]));

} else {

$text = substr_replace ($text, «[unparseable or potentially dangerous latex formula]»,$pos, strlen ($tex_matches[0] [$i]));

}

}

?>

Скрипт, используемый для обработки формул в массиве, включающий в себя класс:

<? php

class LatexRender {

var $_picture_path =».»;

var $_picture_path_httpd =».»;

var $_tmp_dir =».»;

var $_latex_path = «/usr/bin/latex»;

var $_dvips_path = «/usr/bin/dvips»;

var $_convert_path = «/usr/bin/convert»;

var $_identify_path=»/usr/bin/identify»;

var $_formula_density = 120;

var $_xsize_limit = 500;

var $_ysize_limit = 500;

var $_string_length_limit = 500;

var $_font_size = 10;

var $_latexclass = «article»;

var $_tmp_filename;

var $_image_format = «gif»; // или «png»

var $_latex_tags_blacklist = array (

«include», «def», «command», «loop», «repeat», «open», «toks», «output», «input», «catcode», «name», «^^», «\\every», «\\errhelp», «\\errorstopmode», «\\scrollmode», «\\nonstopmode», «\\batchmode», «\\read», «\\write», «csname», «\\newhelp», «\\uppercase», «\\lowercase», «\\relax», «\\aftergroup», «\\afterassignment», «\\expandafter», «\\noexpand», «\\special»

);

var $_errorcode = 0;

var $_errorextra = «»;

function LatexRender ($picture_path,$picture_path_httpd,$tmp_dir) {

$this->_picture_path = $picture_path;

$this->_picture_path_httpd = $picture_path_httpd;

$this->_tmp_dir = $tmp_dir;

$this->_tmp_filename = md5 (rand());

}

function setPicturePath($name) {

$this->_picture_path = $name;

}

function getPicturePath() {

return $this->_picture_path;

}

function setPicturePathHTTPD($name) {

$this->_picture_path_httpd = $name;

}

function getPicturePathHTTPD() {

return $this->_picture_path_httpd;

}

function getFormulaURL ($latex_formula) {

$latex_formula = preg_replace («/&gt;/i», «>», $latex_formula);

$latex_formula = preg_replace («/&lt;/i», «<», $latex_formula);

$formula_hash = md5 ($latex_formula);

$filename = $formula_hash.».».$this->_image_format;

$full_path_filename = $this->getPicturePath(). "/».$filename;

if (is_file ($full_path_filename)) {

return $this->getPicturePathHTTPD(). "/».$filename;

} else {

if (strlen ($latex_formula) > $this->_string_length_limit) {

this->_errorcode = 1;

return false;

}

for ($i=0;$i<sizeof ($this->_latex_tags_blacklist);$i++) {

if (stristr ($latex_formula,$this->_latex_tags_blacklist[$i])) {

$this->_errorcode = 2;

return false;

}

}

if ($this->renderLatex ($latex_formula)) {

return $this->getPicturePathHTTPD(). "/».$filename;

} else {

return false;

}

}

}

function wrap_formula ($latex_formula) {

$string = «\documentclass [».$this->_font_size. «pt] {».$this->_latexclass.»}\n»;

$string.= «\usepackage[latin1] {inputenc}\n»;

$string.= «\usepackage{amsmath}\n»;

$string.= «\usepackage{amsfonts}\n»;

$string.= «\usepackage{amssymb}\n»;

$string.= «\pagestyle{empty}\n»;

$string.= «\begin{document}\n»;

$string.= «$».$latex_formula. «$\n»;

$string.= «\end{document}\n»;

return $string;

}

function getDimensions($filename) {

$output=exec ($this->_identify_path. "».$filename);

$result=explode(«»,$output);

$dim=explode («x»,$result[2]);

$dim [«x»] = $dim[0];

$dim [«y»] = $dim[1];

return $dim;

}

function renderLatex ($latex_formula) {

$latex_document = $this->wrap_formula ($latex_formula);

$current_dir = getcwd();

chdir ($this->_tmp_dir);

$fp = fopen ($this->_tmp_filename.».tex», «a+»);

fputs ($fp,$latex_document);

fclose($fp);

$command = $this->_latex_path.» – interaction=nonstopmode».$this-> _tmp_filename.».tex»;

$status_code = exec($command);

if (!$status_code) {$this->cleanTemporaryDirectory(); chdir ($current_dir); $this->_errorcode = 4; return false;}

$command = $this->_dvips_path.» – E».$this->_tmp_filename.».dvi».» – o».$this->_tmp_filename.».ps»;

$status_code = exec($command);

$command = $this->_convert_path.» – density».$this->_formula_density.	.» – trim – transparent \ «#FFFFFF\»».$this->_tmp_filename.».ps».

$this->_tmp_filename.».».$this->_image_format;

$status_code = exec($command);

$dim = $this->getDimensions ($this->_tmp_filename.».».$this-> _image_format);

if (($dim [«x»] > $this->_xsize_limit) or ($dim [«y»] > $this->_ysize_limit)) {

$this->cleanTemporaryDirectory();

chdir ($current_dir);

$this->_errorcode = 5;

$this->_errorextra =»: «. $dim [«x»]. «x». number_format ($dim[«y»], 0, «», «»);

return false;

}

$latex_hash = md5 ($latex_formula);

$filename = $this->getPicturePath(). "/».$latex_hash.».».$this->_image_format;

$status_code = copy ($this->_tmp_filename.».».$this->_image_format,»../../». $filename);

$this->cleanTemporaryDirectory();

if (!$status_code) {chdir ($current_dir); $this->_errorcode = 6; return false;}

chdir ($current_dir);

return true;

}

function cleanTemporaryDirectory() {

$current_dir = getcwd();

chdir(»../../»);

unlink ($this->_tmp_dir. "/».$this->_tmp_filename.».tex»);

unlink ($this->_tmp_dir. "/».$this->_tmp_filename.».aux»);

unlink ($this->_tmp_dir. "/».$this->_tmp_filename.».log»);

unlink ($this->_tmp_dir. "/».$this->_tmp_filename.».dvi»);

unlink ($this->_tmp_dir. "/».$this->_tmp_filename.».ps»);

unlink ($this->_tmp_dir. "/».$this->_tmp_filename.».».$this->_image_format);

chdir ($current_dir);

}

}

?>






Заключение



В данной работе были достигнуты следующие результаты:

Собран и изучен материал, связанный с использованием формул в Интернете;

Изучен форумный движок phpBB3;

Созданы PHP скрипты для взаимодействия с форумом.






Список литературы



		Афонин С.М. Программирование на языке PHP / Афонин С.М. – М.: НТ Пресс, 2007. – 256 с.: ил.

		Колисниченко Д.Н. Самоучитель PHP 5. – СПб: Наука и техника, 2004. 576 с.: ил.

		Мазуркевич А. PHP: настольная книга программиста / Александр Мазуркевич, Дмитрий Еловой. – Мн.: Новое знание, 2003. – 480 с.: ил.

		Томсон Лаура. Разработка Web-приложений на РНР и MySQL: Пер. с англ. / Лаура Томсон, Люк Веллинг. – 2-е изд., испр. – СПб: ООО «ДиаСофтЮП», 2003. – 672 с.

		Ульман Л. Основы программирования на РНР: Пер. с англ. – М.: ДМК Пресс, 2001. – 288 с.: ил. (Самоучитель).

		Харрис Э. PHP/MySQL для начинающих / Пер. с англ. – М.: КУДИЦ-ОБРАЗ, 2005. – 384 с.

		http://ru.wikipedia.org

		http://lib.mexmat.ru

		http://avi.ru

		http://teacode.com

2