Как я могу преобразовать уравнение MathType в формат MathML? - PullRequest
1 голос
/ 06 июля 2011

Я хочу преобразовать уравнение MathType, сохраненное в формате GIF, в MathML. Во-первых, я открыл эти файлы GIF и сохранил их в MathType 6.7. В результате текст MathML вставляется в конец файлов GIF. Однако, когда я извлек текст MathML из этих файлов GIF с помощью сценария Perl, я обнаружил некоторые искаженные символы в тексте MathML в виде следующего текста:

<mn </em>> ххх

В приведенной выше строке искаженный символ inserted вставляется перед меткой «mn». Это ошибка MathType? Как я могу обойти эту проблему? Я загрузил свои тестовые файлы GIF. URL: http://ubuntuone.com/p/1352/

Обновление: Я попытался вставить полный блок MathML здесь, но обнаружил, что синтаксический формат текста MathML был испорчен. Поэтому я вставил MathML на GitHub: https://gist.github.com/1068723.

В седьмой строке текста MathML есть искаженный символ: "& # x00A0; & # x00A0;? # X00A0;".

Исходный файл GIF, который не содержит текст MathML: http://ubuntuone.com/p/13Ba/

Perl-скрипт, извлекающий MathML из GIF-изображения, сгенерированного MathType: https://gist.github.com/1068749

Спасибо, thinkhy

1 Ответ

2 голосов
/ 06 июля 2011

Спасибо, думаю.Это может быть неправильное извлечение данных (мы еще не рассмотрели ваш сценарий).Только один из ваших GIF-файлов имел MathML - тот, у которого имя файла начинается с 106R.В этом случае, если вы просто захватываете все байты от первого бита, который выглядит как MathML до конца, вы периодически получаете там нечетные байты, в основном 255, кроме последнего.(Это, однако, не похоже на ненужный символ, который вы видите.) Причина 255-х в том, что MathML распределяется по нескольким записям комментариев, каждая из которых начинается с количества байтов в записи.Из MathType SDK (скачать бесплатно; ссылка ниже):


Файлы изображений GIF

Текст MathML встроен в файл GIF в виде записи расширения приложения, которая состоит из 14-заголовок байта (дескриптор расширения приложения), за которым следуют данные MTEF.Заголовок содержит:

Byte Introducer = 0x21;
Byte ExtensionLabel = 0xFF;
Byte BlockSize = 0x0B;
Byte ApplicationId[8] = "MathType";
Byte AuthenticationCode[3] = "003";

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

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


Возможно, вы уже используете SDK, но вы не сказали, были ли вы или нет,так вот ссылка: http://www.dessci.com/en/reference/sdk/.

...