Реферат: Особенности создания математических формул в Web

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

Учреждение образования «Гродненский Государственныйуниверситет

имени Янки Купалы»

Математический факультет

Кафедра теории функции, функционального анализа иприкладной математики

Особенности создания математических формул в Web

Курсовая работа студента 2 курса Парахневича Юрия Николаевича

Научный руководитель:

доцент Вувуникян Ю.М.

                                                                            

Допущен к защите

29 апреля 2002 г.

Зав.кафедрой ТФФА и ПМ

Ровба Е.А.

Гродно, 2002

Содержание:

1.  Введение.

2.  Язык математической разметки MathML.

3.  Создание математических формул в Web спомощью MathBuilder

4.  Заключение.

5.  Приложение 1: Исходный кодпрограммы MathBuilder v1.01

6.  Приложение 2: Скриншоты.

 

Введение.

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

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

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

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

2. Язык математической разметки MahML.

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

   Несмотря на широкоераспространение Web, недостаток поддержки научной связи  ограничивает сферу ееприменения.

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

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

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

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

    дополнение к вышесказанному, MathML долженсогласовываться и с существующей HTML средой.

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

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

Общие принципы MathML:

 

Существует глубокая связьмежду математическими идеями и их записью.

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

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

  <MSUP>,<MFRAC> и <MROW>.

   Рассмотрим пример: <(x + 2)^2 >.Используя отметки MathML, его можно записать так :

    <MSUP>

    <MROW>

    <MF>(</MF>

    <MROW>

    <MI>x</MI>

    <MO>+</MO>

    <MN>2</MN>

    </MROW>

    <MF>)</MF>

    </MROW>

    <MN>2</MN>

    </MSUP>

В дополнение к отметкам представления MathML содержит ещепримерно 50 различных отметок. Используя эти отметки, предыдущий пример можнозакодировать так:

    <EXPR>

    <EXPR>

     x

    <PLUS/>

     2 

    </EXPR>

    </EXPR>

    <POWER/>

     2

    </EXPR>

Рассмотрим пример :

x ^ 2 + 4x + 4= 0

     <MROW>

    <MROW>

    <MSUP>

    <MI>x</MI>

    <MN>2</MN>

    </MSUP>

    <MO>+</MO>

    <MROW>

    <MN>4</MN>

   <MO>⁢</MO>    

    <MI>x</MI>

    </MROW>

    <MO>+</MO>

    <MN>4</MN>

    </MROW>

    <MO>=</MO>

    <MN>0</MN>

    </MROW>

Здесь стоит обратить вниманиена два аспекта: во-первых, в примере присутствуют отметки типа MI,MN,MO и«вложенные» отметки типа MSUP и MROW, а во-вторых, отметки типа MROWиспользуются для обозначения условия, в данном случае представленного операндом "=".

   Отметки, содержащиеданные, указывают на их тип. Например, отметка MI указывает на идентификаторили переменную, а отметка MN — на номер. Другие отметки  обозначают схемуразмещения. Каждая схема размещения содержит определенное число подвыражений всторогом порядке. Например,MSUP схема должна содержать в точности дваподвыражения.

x =(-b + — sqrt( b ^ 2 — 4ac)) / 2a:

    <MROW>

    <MI>x</MI>

    <MO>=</MO>

    <MFRAC>

    <MROW>

    <MROW>

    <MO>-</MO>

    <MI>b</MI>

    </MROW>

    <MO>&PlusMinus</MO>

    <SQRT>

    <MROW>

    <MSUP>

    <MI>b</MI>

    <MN>2</MN>

    </MSUP>

    <MO>-</MO>

    <MROW>

    <MN>4</MN>

   <MO>⁢</MO>

    <MI>a</MI> 

   <MO>⁢</MO>

    <MI>c</MI>

    <MROW>

    </MROW>

    </SQRT>

    </MROW>

    <MROW>

    <MN>2</MN>

   <MO>⁢</MO>

    <MI>a</MI>

    </MROW>

    </MFRAC>

    </MROW>

В этом примере следуетобратить внимание на то, что знак «плюс/минус» — специальныйпоименованный объект. MathML предоставляет большой список имен математическихобъектов.

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

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

Лексемы :

    <MI>       идентификаторы

  <MN>       номер

  <MO>       оператор

  <MF>      заграждающая метка

  <MTEXT>    текст

  <MSPACE/>  пробел

  <MS>       литералстроки

 

    Общая схема размещения :

 <MSTYLE>   изменениестиля

 <MERROR>   включениесообщения о синтаксической ошибке

 <MPHANTOM> присохранении размера содержание становится невидимым.

<MROW>    горизонтальная группировка любого числа подвыражений            <MFRAC>   формирование дроби из двух подвыражений

 <MSQRT>   формирование знака квадратного корня (радикала безиндекса)

<MROOT>    формированиерадикала с определенным индексом

    Таблицы и матрицы :

    <MTABLE>   таблицаили матрица

    <MTR>      строка втаблице или матрице

    <MTD>      одновхождение в таблицу или матрицу.

   Механизмы исполнения операторов и заграждающих меток идентичны и более сложны по сравнению с другими маркерами.

   Многие математические символы типа интегральногосимвола, знака "+", круглых скобок и т.д. имеют заданные по умолчаниюатрибуты, которые могут включаться в <MO> и <MF> схемы.

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

  Знак "+",например, в зависимости от ситуации может быть как префиксом, так и  инфиксом.Если оператор является первым подвыражением в <MROW> и его длинапревышает единицу, то используется префиксная форма; если же оператор являетсяпоследним подвыражением в <MROW>, то правилами предусматриваетсяиспользование постфиксной формы. Инфиксная форма для операторов, включенных всхему типа <MROW>, не используется. Если возникает ситуация выбора однойиз нескольких форм и не дано никаких дополнительных указаний, то право ееостается за пользователем. Существуют четыре атрибута, регулирующиесоотношениями между размерами  операторов, заграждающих меток и другихэлементов: stretchy, symmetric, maxsize и minsize. Например, если для символаmaxsize=«3», это означает, что его размеры  могут превыситьстандартные не более,  чем в три раза.

3.Создание математических формул в Webспомощью MathBuilder

   Программа MathBuilder (рис.1) представляет собой приложение к системе созданияматематических формул MathType 5. При публикации математических формул в webбез использования языка математической разметки MathML, спомощью представления формулы в формате *.bmp, (*.gif ) возникает проблема, связанная с невернымрасположением формулы,

(рис.2) эту проблему можнорешить с помощью некоторого HTML кода, а именно

<HTML>

<TABLE>

<TD>Текст1</TD>

<TDALIGN=BOTTOM><IMG SRC=Имя_Файла.bmp></TD>

<TD>Текст2</TD>

</HTML>

 Но учитывая объёмы формул,используемые в математической литературе, встаёт необходимость автоматизацииэтого процесса. Автоматизировать этот процесс может MathBuilder.Сама программа имеет простой интерфейс (рис.2), меню «Файл» и «Редактировать».Меню «Файл» содержит в себе «Открыть» (Открытие файла в формате *.txt),«Сохранить» (Сохранение файла в формате *.txt),«Экспортировать» (Экспорт файла в формат *.html),

«Выход» (Выход из программы).Меню «Редактировать»  \содержит в себе следующие функции: «Просмотр»(Открывается окно  браузера, в котором без сохранения можно просмотретьрезультат работы),

 «Вставить рисунок»(позволяет вставить ссылку в файл на нужный рисунок), «Гиперссылка» (вставляетссылку на интернет документ, помещая в файл ссылку на документ).

   Сам набор документа ничемне отличается от набора текстового документа в редакторе «Блокнот». При нажатия«вставить рисунок» программа предлагает выбрать файл рисунка (в данном случаематематическую формулу) и в поле набора текста появляется запись <img src=Имя файла>

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

Ведь если, к примеру,сохранить её в каталоге «мои документы» и указать программе на этот каталог тов ссылке на картинку пропишется путь в этот каталог. А на сервере, на которомбудет находится той или иной документ, не будет этого каталога, следовательнокартинка отображаться не будет. Программа MathBuilderпредусматривает этот момент и поэтому она записывает ссылку на картинку так,как будто она находится в текущем каталоге. Если воспользовавшись встроеннымброузером картинка отображаться не будет, то это означает что нужнаяматематическая формула не находится в каталоге с программой.

   При разработке программывозникла одна проблема: Если пользователь, создав математическую формулу ссистеме MathType сохранит её в формате *.bmp (хотя MathTypeне предлагает сохранение в таком формате) то как ни странно файл сохранится взаданном формате, даже ярлык у этого файла будет таким, какой характерен дляфайлов с таким форматом, однако броузер InternetExplorer отображать этот рисунок не будет, т.к. в самом деле MathTypeсохранит файл с заданным расширением (bmp) но в формате gif.Следовательно, следует сохранять файл в формате *.gif, тогдапроблем такого типа не будет.

Пояснение к исходному кодупрограммы:

 

procedureTForm1.N2Click(Sender: TObject);

 begin

  With OpenDialog1do

  If Execute Then

   Begin

   memo1.lines.loadfromfile(Filename);

   ExtractFilename(Filename);

   SaveDialog1.FileName := Filename;

    Filename := '';

   End;

 end;

этот код обеспечиваетоткрытие файла.

procedureTForm1.N3Click(Sender: TObject);

begin

    Memo1.Lines.SaveToFile(SaveDialog1.FileName);   // Сохранение файла

end;

procedureTForm1.N4Click(Sender: TObject);

begin

with SaveDialog1do                                         

  If execute Then

    Memo1.Lines.SaveToFile(SaveDialog1.FileName); // Меню «Сохранить как.»

End;

//сейчас идёт описание самойглавной части программы

procedureTForm1.N5Click(Sender: TObject);

var list:TStringList;

    tmpString:string;

   i,CurrentSymbol,SeekSymbol, lastTag: integer;

    notFound:boolean;

begin

 With SaveDialog2do

 If execute then

  Begin

 list:=TStringList.Create;

   for i:=0 tomemo1.Lines.Count-1 do list.Add(memo1.lines[i]);

  list.Insert(0,'<HTML>');

  list.Add('</HTML>');

// в этой части (смотритевыше) происходит вставка тэгов

//<html>перед набранным текстом и </html>после текста.

   for i:=1 to memo1.Lines.Count do

    begin

     lastTag:=1;tmpString:='';

     forCurrentSymbol:=1 to Length(List[i]) — 9 do

      ifCopy(List[i], CurrentSymbol, 9) = '<img src=' then

        begin

        SeekSymbol:=CurrentSymbol; notFound:=true;

         while(SeekSymbol <= Length(List[i])) and (notFound) do

          begin

           ifCopy(List[i], SeekSymbol, 1) = '>' then

            begin

            tmpString := tmpString+'<td>'+

            Copy(List[i],lastTag,CurrentSymbol-lastTag)+

            '</td><td align=bottom>'+

            Copy(List[i],CurrentSymbol,SeekSymbol-CurrentSymbol+1) +'</td>';

            lastTag:=SeekSymbol+1; notFound:=false;

            end;

          inc(SeekSymbol);

          end;

        end;

     if tmpString<>''then

      begin

      tmpString:=tmpString+'<td>'+Copy(List[i],lastTag,Length(List[i])-lastTag+1)+'</td>';

      List[i]:='<table>'+tmpString+'</table>';

      end;

    end;

  List.SaveToFile(Filename);

   list.Free;

  End;

end;

//В этой части происходитвставка таблицы (смотрите стр. 9).

//Чтобы обеспечить корректноеотображение формулы браузером.

    В общем, код программыоснован на нескольких принципах: на поиске тэга, в котором находится ссылка наматематическую формулу, вставка таблицы, и экспортировании текста в формат HTML.При написании программы самой сложной частью оказалась вставка таблицы. Вначале программа могла находить нужные тэги только в том случае, если оннаходился отдельно в какой либо строчке. Далее, после устранения вышеописаннойошибки, второй проблемой стала невозможность вставки в документ сразу несколькокартинок, что непосредственно важно для математического документа. Самойпоследней проблемой была невозможность работы программы на других машинах. Этапроблема была вызвана некорректным обращением компонента программы со средой Windows.Решение оказалось банальным – я использовал браузер, отображающий результатыработы без сохранения (а в нём была проблема), который назначен Windowsпо умолчанию. И вот все проблемы были решены.

Заключение:

    Изучение языкаматематической разметки «MathML» содержит в себе некоторые минусы:

1.  Не все браузеры поддерживает «MathML».

2.  Доскональное изучение «MathML»громоздко и сложно для обычного пользователя.

     На момент написания «MathBuilder» из браузеров, которые поддерживают язык математической разметки былтолько Mozilla 0.9.9 и Internet Explorer5.5 остальные не поддерживают без плагинов (англ. plug-inдополнительная программа для выполнения каких либо специфических функций).Однако, метод которым пользуется MahBuilder поддерживается всеми браузерами.

Вышеописанная программа, намой взгляд,  вносит некий вклад в развитие математических представлений в Web,потому что на всех математических сайтах, математические формулы представленыкак на рисунке № 3, то есть с новой строчки, что менее корректно выглядит, вотличии от рисунка №4, когда формула отображается в той же строке, что и текст.Следовательно целесообразнее использовать метод, используемый в MathBuilder.

Приложение №1

Исходный код программы MathBuilder.

unit MyEditu;

interface

uses

  Windows,Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

  StdCtrls,ExtCtrls, Menus, ExtDlgs, shellapi;

type

  TForm1 =class(TForm)

    Memo1: TMemo;

    OpenDialog1:TOpenDialog;

    SaveDialog1:TSaveDialog;

    MainMenu1:TMainMenu;

    N1: TMenuItem;

    N2: TMenuItem;

    N3: TMenuItem;

    N4: TMenuItem;

    N5: TMenuItem;

    N7: TMenuItem;

    SaveDialog2: TSaveDialog;

    N6: TMenuItem;

    N8: TMenuItem;

    N10:TMenuItem;

    N11:TMenuItem;

    OpenDialog3:TOpenDialog;

    OpenDialog2:TOpenDialog;

    N9: TMenuItem;

    N12:TMenuItem;

    procedureN2Click(Sender: TObject);

    procedureN3Click(Sender: TObject);

    procedureN4Click(Sender: TObject);

    procedureN5Click(Sender: TObject);

    procedureN6Click(Sender: TObject);

    procedureN8Click(Sender: TObject);

    procedureN10Click(Sender: TObject);

    procedureN11Click(Sender: TObject);

    procedureN12Click(Sender: TObject);

  private

    { Privatedeclarations }

  public

    { Publicdeclarations }

  end;

var

  Form1: TForm1;

implementation

uses Unit4;

//es Unit2;

{$R *.DFM}

procedureTForm1.N2Click(Sender: TObject);

begin

With OpenDialog1do

  If Execute Then

   Begin

   memo1.lines.loadfromfile(Filename);

   ExtractFilename(Filename);

   SaveDialog1.FileName := Filename;

    Filename :='';

   End;

end;

procedureTForm1.N3Click(Sender: TObject);

begin

    Memo1.Lines.SaveToFile(SaveDialog1.FileName);

end;

procedureTForm1.N4Click(Sender: TObject);

begin

with SaveDialog1do

  If execute Then

    Memo1.Lines.SaveToFile(SaveDialog1.FileName);

end;

procedureTForm1.N5Click(Sender: TObject);

var list:TStringList;

    tmpString:string;

   i,CurrentSymbol,SeekSymbol, lastTag: integer;

    notFound: boolean;

begin

 With SaveDialog2do

 If execute then

  Begin

 list:=TStringList.Create;

   for i:=0 tomemo1.Lines.Count-1 do list.Add(memo1.lines[i]);

  list.Insert(0,'<HTML>');

   list.Add('</HTML>');

   for i:=1 tomemo1.Lines.Count do

    begin

     lastTag:=1;tmpString:='';

     forCurrentSymbol:=1 to Length(List[i]) — 9 do

      ifCopy(List[i], CurrentSymbol, 9) = '<img src=' then

        begin

        SeekSymbol:=CurrentSymbol; notFound:=true;

         while(SeekSymbol <= Length(List[i])) and (notFound) do

          begin

           ifCopy(List[i], SeekSymbol, 1) = '>' then

            begin

            tmpString := tmpString+'<td>'+

            Copy(List[i],lastTag,CurrentSymbol-lastTag)+

            '</td><td align=bottom>'+

            Copy(List[i],CurrentSymbol,SeekSymbol-CurrentSymbol+1) +'</td>';

            lastTag:=SeekSymbol+1; notFound:=false;

            end;

          inc(SeekSymbol);

          end;

        end;

     iftmpString<>'' then

      begin

      tmpString:=tmpString+'<td>'+Copy(List[i],lastTag,Length(List[i])-lastTag+1)+'</td>';

      List[i]:='<table>'+tmpString+'</table>';

      end;

    end;

  List.SaveToFile(Filename);

   list.Free;

  End;

end;

procedureTForm1.N6Click(Sender: TObject);

// prosmotr

    var list:TStringList;

    tmpString:string;

   i,CurrentSymbol,SeekSymbol, lastTag: integer;

    notFound:boolean;

  Begin

  list:=TStringList.Create;

   for i:=0 tomemo1.Lines.Count-1 do list.Add(memo1.lines[i]);

  list.Insert(0,'<HTML>');

  list.Add('</HTML>');

   for i:=1 tomemo1.Lines.Count do

    begin

     lastTag:=1;tmpString:='';

     forCurrentSymbol:=1 to Length(List[i]) — 9 do

      ifCopy(List[i], CurrentSymbol, 9) = '<img src=' then

        begin

        SeekSymbol:=CurrentSymbol; notFound:=true;

         while(SeekSymbol <= Length(List[i])) and (notFound) do

          begin

           ifCopy(List[i], SeekSymbol, 1) = '>' then

            begin

             tmpString:= tmpString+'<td>'+

            Copy(List[i],lastTag,CurrentSymbol-lastTag)+

            '</td><td align=bottom>'+

            Copy(List[i],CurrentSymbol,SeekSymbol-CurrentSymbol+1) +'</td>';

            lastTag:=SeekSymbol+1; notFound:=false;

            end;

          inc(SeekSymbol);

          end;

        end;

     iftmpString<>'' then

      begin

      tmpString:=tmpString+'<td>'+Copy(List[i],lastTag,Length(List[i])-lastTag+1)+'</td>';

      List[i]:='<table>'+tmpString+'</table>';

      end;

    end;

  List.SaveToFile('tmp.html');

   list.Free;

  ShellExecute(handle, 'open', 'tmp.html', '', '', SW_SHOW);

  //winexec('tmp.html', SW_SHOW)

   //Form2.showModal;

  End;

 //end ofprosmotr                        }

procedureTForm1.N8Click(Sender: TObject);

begin

close;

end;

procedureTForm1.N10Click(Sender: TObject);

var tmpMemo:string;

begin

   WithOpenDialog2 do

 if execute then

  Begin

    begin

    tmpMemo:=tmpMemo + '<img src=' + ExtractFilename(Filename) + '>';

     Memo1.SelText:=tmpMemo;

    end;

  End;

end;

procedureTForm1.N11Click(Sender: TObject);

var Href: String;

begin

With OpenDialog3do

 if Execute then

 Begin

   Href:=Href +'<a href=' + ExtractFilename(OpenDialog3.Filename) + '>'

   + 'Ссылка'+ '</a>';

     Memo1.SelText:=Href;

  End;

end;

procedureTForm1.N12Click(Sender: TObject);

begin

form4.ShowModal;

end;

end.


Приложение№2.

Скриншоты.

/>

Рис.1

/>

Рис.2

/>

Рис.3

/>

Рис.4

еще рефераты
Еще работы по информатике, программированию