Рейтинг@Mail.ru

АРХИТЕКТУРА МУЛЬТИПЛАТФОРМЕННОЙ БИБЛИОТЕКИ РЕДАКТОРА МАТЕМАТИЧЕСКИХ ФОРМУЛ

Ефанов Д.В., Ибрагимов А.М.

ОАО «Всероссийский научно-исследовательский институт автоматизации управления в непромышленной сфере им. В.В. Соломатина» (ОАО «ВНИИНС»),г. Москва

задать вопрос автору

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

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

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

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

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

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

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

Графический способ набора формул отличают легкость и интуитивная понятность. Кроме того, получаемый результат отображается в общепринятой форме и его правильность легко контролировать прямо во время набора. Также, нет необходимости следить за множеством скобок, обозначающих приоритет, так как формальная математическая запись уже построена таким образом, чтобы минимизировать их количество. Основным недостатком данного способа является только необходимость использования специализированных средств набора, однако на современном уровне развития информационных технологий — это не очень большая плата за столь ощутимые удобства. Существует еще несколько недостатков, но они связаны не с самим способом набора, а с его реализациями. Дело в том, что все имеющиеся на сегодняшний день средства подобного рода не обладают возможностью четкого задания логической структуры формул, так как разрабатывались исключительно для их верстки или отображения. Кроме того, все эти средства либо реализованы в виде отдельных продуктов (исполняемых файлов) с закрытым исходным кодом, либо имеют очень ограниченный функционал и их невозможно (или слишком проблематично) использовать в собственных программах.

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

В данной работе представлена архитектура библиотеки, совмещающая в себе достоинства как текстового, так и графического способов набора формул. На основе этой архитектуры была произведена открытая (open source) реализация, распространяемая по лицензии LGPL версии 2.1 [1]. Это дает право использовать данную реализацию, как в открытых, так и в коммерческих программных разработках.

Любая математическая формула (со смысловой точки зрения) представляет собой суперпозицию n-арных операторов, поэтому ее можно задать в виде корневого дерева [2, 3], которое мы назовём деревом формулы. Сами операторы, составляющие дерево, будем называть элементарными формулами.

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

  1. Корнем дерева является операция, выполняемая последней, исходя из математического контекста формулы.
  2. Если оператор B имеет операнды A1,…,An, то они являются его потомками в дереве формулы.
  3. Операнды A1,…,An одного и того же оператора B естественным образом упорядочиваются, исходя из удобства последовательного перемещения между ними. Например, для оператора A1×A2 примем, что A1A2.
  4. Листьями дерева являются операнды, представляющие собой строку или пустую элементарной формулу. Последняя используется только для представления отсутствующего операнда и необходима при обозначении еще не введенных частей дерева.

Каждая элементарная формула (n-арный оператор) с точки зрения своей логической структуры и визуального представления состоит из n аргументов — вложенных элементарных формул и некоторого (простого или сложного) обозначения. Например, сумма обозначается знаком «∑», корень — с помощью знака «√» и т.д. Все подобные обозначения можно представить в виде одного символа или комбинации нескольких символов некоторого шрифта (шрифтов). При этом кроме наличия, вида и порядка следования операторных символов, большое значение при отображении формулы в целом имеет их относительное расположение, а также расположение к аргументам. К примеру, одна и та же стрелка, находясь над парой заглавных латинских букв, обозначает вектор, а расположенная между этими же буквами — логическую импликацию.

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

Этого вполне достаточно для описания любой элементарной формулы с теоретической точки зрения, однако на практике подобное представление будет чрезвычайно не оптимально. Дело в том, что по сути, каждый тип — это некоторый класс (или его подобие, если говорить о процедурных языках программирования, таких как С или Pascal). Соответственно, для каждого такого класса необходимо использовать отдельный вариант структуры и отдельную реализацию функций. Типы формул, создаваемые в рамках такого подхода, часто будут очень схожи по виду (например, различного рода верхние и нижние индексы; квадратный корень и корень n-ной степени и др.). В связи с этим, их значительно удобнее (и эффективнее) реализовывать одним классом с дополнительным параметром. Таким параметром будет неотрицательное целое число, которое мы назовем подтипом. В конечном итоге приходим к тому, что каждую элементарную формулу можно охарактеризовать с помощью трех параметров: типа, подтипа и упорядоченной совокупности строк операторных символов.

Архитектура библиотеки

Одним из основных преимуществ предлагаемой архитектуры является то, что она определяет именно библиотеку. Это позволяет легко встраивать отображение и редактирование формул в любые приложения. Кроме того, при написании реализации использовался «чистый» стандарт ANSI C89 [4], за счет чего была достигнута полная мультиплатформенность.

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

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

Набираемые с помощью библиотеки формулы удовлетворяют требованиям высокого эстетического качества, что достигается использованием шрифтов и принципов рисования, на которых основана издательская система TeX [5].

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

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

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

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

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

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

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

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

Литература

  1. GNU Lesser General Public License, version 2.1 [Электронный ресурс] − http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
  2. Кнут Д. Э. Искусство программирования: пер. с англ. − М.: Издательский дом «Вильямс», 2000 г.
  3. Кормен Т., Лейзерсон Ч., Ривест Р. и др. Алгоритмы: построение и анализ: пер. с англ. − М.: Издательский дом «Вильямс», 2009 г.
  4. Standart ANSI X3.159-1989 «Programming Language C» [Электронный ресурс] − http://www.ansi.org/.
  5. Кнут Д. Э. Все про TeX: пер. с англ. − М.: Издательский дом «Вильямс», 2003 г.