Вправить мозги MathType - есть идея

  • Автор темы Автор темы Dresden
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Dresden

Топикстартер
20 лет на форуме
Сообщения
3 161
Реакции
665
Исследовал файлы eps с кириллицей, генерируемых Маттайпом. Результаты мне показались очень интересными. Возможно с помощью специалистов по скриптам можно заставить Маттайп делать правильные eps.

Что выяснилось. Во-первых, разные версии MathType по-разному обращаются с кириллицей. Я тестировал две версии - 6.0a и 6.0c. 6.0a ведет себя, очевидно, так же, как 5.2 (точно проверить не могу). В 6.0c кое-что изменили, в результате чего нормальную кириллицу в eps получить в ней мне не удалось никакими способами. Но об этом чуть позже.
В прикрепленном файле cyr-alfabet-mt6a.eps имеется русский алфавит, набранный через Insert Symbol в МТ 6.0а шрифтом Minion Cyr. Кириллица отображается и выводится нормально. Содержимое файла можно посмотреть в блокноте. Обратите внимание на то, что в комментарии к ps-коду Маттайп использует в явном виде юникодные обозначения для символов кириллицы (в секции %MathType!MathML!1!1!+-). Например, x0430 - это кириллическая "а", x0431 - "б" и т. д.

В ps-коде в секции 320 /MinionCyr-Regular f1 для тех же букв используются обозначения \340, \341 и т. д. Почему так - не знаю, но работает.

Теперь откройте в блокноте файл cyr-alfabet-mt6a_uncor.eps, в котором тот же алфавит набран просто с клавитатуры (шрифт NewtonC). В %MathType!MathML!1!1!+- остались те же юникодные обозначения, а вот в секции 320 /NewtonC-Italic f1 все изменилось. Вместо кошерных обозначений \340, \341 стоят последние символы из юникодных обозначений, т. е. "0" из x0430, "1" из x0431 и т. д.

Я провел простой эксперимент - заменил прямо в eps-файле неправильные коды в секции 320 /NewtonC-Italic f1 на правильные, т. е. на \340, \341 и т. д., после чего импортировал этот eps в ИД, отправил на ps-принтер с печатью в файл и отдистиллил. Кириллица работает.
Естественно, eps сохранялся в МТ с опцией Encapsulated PostScript/none, т. е. без превью, чтобы получить чисто текстовой файл.

Осталось только сделать скрипт, который бы обрабатывал уже сгенеренные Маттайпом eps, заменяя неправильные коды на правильные, ориентируясь на порядок расположения юникодных кодов кириллических букв, содержащихся в комментарии %MathType!MathML!1!1!+-.

Если кто-то сделает такой скрипт, я первым его купить. Думаю, он будет очень полезен многим.
Очень желательно было бы совместить его со скриптом Макса Цофина, предусмотрев, в частности, повторную обработку отдельных файлов после их редактирования из ИД.
 

Вложения

Ответ: Вправить мозги MathType - есть идея

Два слова о различиях между версиями 6.0a и 6.0c.

Если вы откроете окно Insert Symbol в МТ 6.0a и выберете какой-нибудь Type1-шрифт, например, NewtonC или MinionCyr, то увидите, что в представленном наборе символов кириллица отображается дважды - в первый раз так, как это было в доюникодные времена, т. е. сразу после базовой латиницы (в диапазоне с 128 по 256), а второй раз на позициях в юникоде, выделенных для кириллицы. Так вот, если набирать кириллицу через Insert Symbol, пользуясь символами кириллицы, расположенными на "правильных" юникодных позициях, то eps с кириллицей будет неправильным, т. е. таким же, как если бы кириллицу набирали напрямую с клавиатуры.
Иными словами, маттайповцы реализовали поддержку юникода через одно место, и кириллица в eps-файлах из Маттайпа работает только за счет оставшейся поддержки неюникодных шрифтов.

В чем же отличие версии 6.0с? А в том, что теперь кириллица в окне Insert Symbol отображается только на истинно юникодных позициях со всеми вытекающими последствиями. Костылей в виде кириллицы в диапазоне 128-256 больше нет.

Но не все так плохо. В 6.0с у меня нормально заработал шрифт Symbol - постскрипты из ИД теперь генерятся корректно.

P. S. В первом сообщении следует читать "Если кто-то сделает такой скрипт, я первым готов его купить."
 
Ответ: Вправить мозги MathType - есть идея

Прошу прощения, невольно ввел в заблуждение относительно версии 6.0с. На самом деле все осталось по-прежнему. Дело в том, что в 6.0с я ограничился исследованием шрифта NewtonC, поправленного Maks_Tsofin для правильной генерации wmf-файлов. В нем кириллица стоит только на юникодных позициях. Т. е. все зависит от шрифта, например, обычный NewtonC или MinionCyr ведут себя так же, как 6.0а.
 
Ответ: Вправить мозги MathType - есть идея

Хм... Есть такой гадский хак для шрифтов, называется Duble encoding.
Заключается в том, что глифы дубируются как на своих законных местах, так и в диапазоне Latin1 128-256, т.е. на месте латиницы.
Может быть в таком случае всё заработает?
 
Ответ: Вправить мозги MathType - есть идея

Вот он и имеет здесь место. Проблема в том, что МТ воспринимает этот хак только при вводе через окно Insert Symbol.
 
Ответ: Вправить мозги MathType - есть идея

А каков результат при использовании нормальных шрифтов?

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

P.S. В принципе нужна тривиальная програмка обрабатывающая все EPS в папке...
Пишется на любом скриптовом языке, или просто на Турбо Паскакале.
 
Ответ: Вправить мозги MathType - есть идея

JAW сказал(а):
А каков результат при использовании нормальных шрифтов?
Никакой. Не любит МТ кириллицу. Только через Insert Symbol, и то не для всех шрифтов, а только тех, что с "хаком". Т. е. никакой полноценный юникодный шрифт, у которого заполнены все диапазоны, не катит.
JAW сказал(а):
P.S. В принципе нужна тривиальная програмка обрабатывающая все EPS в папке...
Пишется на любом скриптовом языке, или просто на Турбо Паскакале.
Ну так в путь. Я бы и сам написал, но не умею.
 
Ответ: Вправить мозги MathType - есть идея

пример "cyr-alfabet-mt6a_uncor.rar" непоказателен. А если в наборе используются латинские буквы (и тем более пробел, цифры и пунктуация)?
 
Ответ: Вправить мозги MathType - есть идея

1998 сказал(а):
пример "cyr-alfabet-mt6a_uncor.rar" непоказателен. А если в наборе используются латинские буквы (и тем более пробел, цифры и пунктуация)?
Чем непоказательный? Речь же только о кириллице. Все остальное (я не беру экзотические языки) обрабатывается нормально.
Я сейчас пробую создать специализированный encoding файл для юникодных шрифтов с кириллицей, основываясь на SDK по Маттайпу (ссылка есть в соседней ветке). Кажется, я понял, что там надо писать, только движется дело медленно. Надеюсь к вечеру/ночи закончу.

1998
Вадим, а Вы не знаете, что означают коды \340, \341 и т. д. в постскрипте для русских букв? Нигде не нашел объяснений, почему именно они.
 
Ответ: Вправить мозги MathType - есть идея

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

что означают коды \340, \341
в восьмеричной системе, т.е. 224 и т.д.
 
Ответ: Вправить мозги MathType - есть идея

Dresden сказал(а):
Ну так в путь. Я бы и сам написал, но не умею.

Дык напишем. Не JAW, так я напишу. Вы только момент с некириллическими символами проясните... :)
 
Ответ: Вправить мозги MathType - есть идея

Во вложении - eps, в который добавлена кое-какая латиница и частично знаки препинания. Я, честно говоря, не понимаю, в чем может быть проблема с латиницей.
 

Вложения

Ответ: Вправить мозги MathType - есть идея

1998 сказал(а):
дело в том, что - а не заметили, что "неправильные коды" -- это

в восьмеричной системе, т.е. 224 и т.д.
Ага, спасибо. Но все равно ведь из второй части диапазона 0-255. Латинские буквы прописываются Маттайпом в eps явно - т. е. как a, b, c и т. п.
 
Ответ: Вправить мозги MathType - есть идея

Ну... Э... С вас ТЗ и "таблица перекодировки". :)
 
Ответ: Вправить мозги MathType - есть идея

Минуточку, ТЗ будет и таблица перекодировки тоже.
Я, как мне казалось, был близок к правильному результату и без скриптов. Но где-то ошибся.

Уважаемые специалисты по постскрипту, посмотрите, что не так в этом файле eps? (набор букв "абвгдеж" делался в Маттайпе с клавиатуры, вроде имеем правильные коды \340 и т. д., однако ИД и прочие показывают пустое место). Это результат присваивания шрифту newton.otf другой кодировки (encoding file).
 

Вложения

Ответ: Вправить мозги MathType - есть идея

Латинские буквы прописываются Маттайпом в eps явно
а я о чем? Вот в "cyr-alfabet-mt6a_uncor_new.eps" сначала пишется латинская "A" --
а потом что-то русское (лень считать)
Какую "неправильную" заменить, какую "правильную" не надо трогать?
 
Ответ: Вправить мозги MathType - есть идея

Ура! Заработало! Это я сначала захотел очень многого - чтобы опентайповский ньютон со всеми заполненными диапазонами работал.
Создал привязку к моему encoding file для NewtonC. Полет пока нормальный, но нужно внимательно потестить. Во всех случаях направление движения верное.

Нужна помощь обладателей Маттайпа, работающих в ИД. Во вложении - файл cyrfont.enc. Его нужно поместить в папку C:\Program Files\MathType\Fonts. Кроме того, нужно внести в файл FontInfo.ini, находящийся там же,
В секцию [Encoding]
срочку
Cyrfont = cyrfont.enc

И в конце файла FontInfo.ini для всех используемых кириллических шрифтов строчки вида

[Font1]
Name = NewtonC
Encoding = Cyrfont
PSName1 = P,NewtonC-Regular

Большая просьба сообщить о результатах.
 

Вложения

Ответ: Вправить мозги MathType - есть идея

1998
Спасибо за поддержку, скрипт больше, похоже, не нужен. Задачу решит пользовательский encoding-файл, работающий непосредственно в Маттайпе.
 
Ответ: Вправить мозги MathType - есть идея


Не по теме:
сколько бы я не возникал, что скриптом задачу не решить, он все-таки оказался не нужен :)
Поздравляю!
 
Ответ: Вправить мозги MathType - есть идея


Не по теме:
Я так и не понял, почему не получится решить скриптом, ну да ладно.
 
Статус
Закрыто для дальнейших ответов.