Как я могу преобразовать уравнение MathType в формат MathML?

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

<mn> xxx

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

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

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

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

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

Спасибо

1 ответ

Спасибо, думаю. Это может быть неправильное извлечение данных (мы еще не рассмотрели ваш сценарий). Только один из ваших 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/.

Другие вопросы по тегам