Использование True
Type шрифтов в Microsoft Office 97
Виктор Галактионов
Весной этого года Microsoft
выпустила очередную локализованную версию своего продукта
Office 97. С переходом на новую версию появились проблемы
использования прежних TrueType шрифтов,
оставшихся в наследство от Windows 3.x.
И многие задавались одним и тем же вопросом: неужели Microsoft
не заметила такой очевидный недочет, за которым не нужно далеко
ходить, он лежит на поверхности. В этой статье проясняется ситуация
с использованием True Type шрифтов в Microsoft
Office 97.
Если разобраться более детально, то никаких ошибок в работе в Microsoft
Office 97 нет. Все работает именно так, как и задумано.
Мы имеем дело с одним из тех немногих случаев, когда Microsoft
отказалась от старого догматичного подхода во имя нового перспективного
решения ценой потери совместимости.
История кодовых таблиц
Первые персональные компьютеры появились более четверти века назад
и были ориентированы на текстовый вывод информации. Известно, что
для представления символов использовались их числовые эквиваленты –
коды символов. По началу применялось 7-битная кодировка, которая
могла представить 128 символов. Тогда же и был выработан стандарт
ASCII – единая таблица соответствия кодов и самих символов.
Позже она была расширена до 8 бит (256 символов) и дошла в таком
виде практически до сегодняшнего дня. При этом первая половина (символы
0-127) были всегда одни и те же, соответствующие стандарту ASCII,
а вторая половина таблицы (символы 128-255) менялась в зависимости
от страны, где она использовалась. Есть варианты второй половины
для европейских символов, греческих и др. Существует с десяток русских
вариантов (всем до боли знакомые ГОСТ’овская,
альтернативная, КОИ-8 и пр.), в которых одному и тому же коду (к
примеру, 192) может соответствовать множество различных по начертанию
символов, в зависимости от того, какая таблица кодировки используется.
По этой причине для каждой кодовой таблицы создавались свои шрифты,
правильно отображающие символы в строгом соответствии с их кодами.
Текст, набранный в кодировке КОИ-8, при использовании шрифта, разработанного
для альтернативной ДОС кодировки, прочитать не удастся. Это известно
практически всем и проявляется в частности в отдельной проблеме –
использования русского шрифта в электронных письмах.
С развитием компьютерной индустрии и с выходом программных продуктов
за границы использования только английского языка возникла необходимость
убрать путаницу в представлении символов. К этому подталкивало и
бурное развитие Internet. Были предложены
многочисленные варианты решения данной проблемы. Одна из них получила
массовое признание – стандарт Unicode.
Этот стандарт оговаривает кодирование символов не одним байтом (256
символов), а двумя, что дает возможность представить одновременно
до 65536 символов. Этот стандарт оговаривает строгое расположение
символов, использующихся в странах мира, в таблице кодировки. первые
128 символов, как и следовало ожидать, остались теми же, что и в
ASCII - цифры, знаки препинания, буква латинского алфавита. Для
русских букв выделено место с шестнадцатеричными кодами от 401h
до 458h. Есть также места и для греческих, арабских, японских и
тибетских знаков.
Стандарт Unicode был поддержан Microsoft
при выпуске Windows 95. Поставляемые в ее
составе шрифты Arial, Courier New, Times
New Roman содержат уже не 256 символов, как это было в прежних шрифтах,
а около 700. Конечно, не все символы из Unicode
реализованы в этих шрифтах. В панъевропейской и русской версиях
эти шрифты содержат символы европейских стран (включая кириллицу).
В Windows 3.x для одновременного использования
русских и, скажем, специфических немецких или французских символов
использовались два различных шрифта - один для кириллицы, другой
для немецких или французских символов. Зачастую эти шрифты разрабатывались
разными производителями и немного отличались начертанием. Всем известный
случай, когда вы пишите в заголовке статьи "a-излучение"
и используете для греческого символа a (альфа) шрифт
Symbol, в то время когда все остальное набирается гарнитурой
Академическая. В этом случае «альфа» будет смотреться как белая
ворона на фоне остальных символов. И ничего с этим сделать нельзя,
нет другого шрифта, кроме Symbol.
Особенности использования Unicode
С выходом Windows 95 ситуация немного изменилась
к лучшему. теперь в Unicode шрифтах, поставляемых
к примеру в составе с Windows 95, есть и
необходимые нам символы греческого алфавита и кириллица. Поэтому
все слово будет выглядеть ровно. Однако старые программы не умели
работать с символами с двухбайтным кодированием. Для обхода этой
трудности были введены в систему "виртуальные" шрифты,
типа Arial CE,
Arial Cyr, Arial
Greek и т.д. На самом деле этих шрифтов нет на самом деле, они
все берутся из одного и того же Arial и задаются в файле WIN.INI примерно следующим образом:
[FontSubstitutes]
Arial Cyr,204=Arial,204
Arial CE,238=Arial,238
Courier New Cyr,204=Courier New,204
Courier New CE,238=Courier New,238
Times New Roman Cyr,204=Times New
Roman,204
Times New Roman CE,238=Times New
Roman,238
Здесь числа 204 и 238 обозначают не что иное, как кодовую таблицу.
204 – это кирилличная раскладка, 238 – центpальноевpопейская
и т.д. Таким образом, для программ Arial Cyr –
это шрифт, содержащий 256 символов, во второй половине которого
находятся русские буквы. В Arial CE на этом
месте стоят европейские символы подобные Ã (А с тильдой)
или ē (e со штрихом).
Однако использовать такой вариант по-прежнему не очень удобно –
для того, чтобы переключиться на греческую таблицу нужно выбрать
другой шрифт. В случае необходимости поменять шрифт Arial
на Times New Roman придется по всему тексту
вылавливать Arial CE и менять его на Times
New Roman CE, а Arial Cyr в свою
очередь на Times New Roman Cyr и т.д.
При разработке Office 97 компания Microsoft
пошла немного другим путем, на полпути к которому уже был
WordPad из Windows 95. Теперь все символы, будь они греческими или кирилличными,
считаются одним шрифтом, а соответствующий выбор кодовой страницы
происходит в зависимости от языка, в котором находится клавиатура
при наборе этих символов. Если переключиться в русскую раскладку,
то при наборе можно увидеть русские буквы (Unicode
401h-458h). При наборе во французской раскладке тех же символов
автоматически будут появляться французские (Unicode
0C0h-0FFh). Это намного удобнее и быстрее.
При этом для смены шрифта достаточно выделить весь текст и вместо
Arial присвоить Times New Roman. И все буквы, и русские, и греческие, и французские
останутся самими собой в новом шрифте, т.к. теперь все символы в
Office 97 кодируются 2 байтами сразу в кодировке
Unicode, в отличие от предыдущих версий
Microsoft Office. Скорее всего, именно это
послужило, основной причиной того, что Microsoft
изменила заголовок файлов .DOC, сделав их
тем самым полностью несовместимым с предыдущими версиями. Да и что
бы можно было увидеть, открыв документ Word 97,
к примеру, в Word 6?
Все это прекрасно работает, пока используются шрифты, разработанные
с учетом Unicode стандарта. А как же быть
со «старыми» True Type шрифтами? Оказывается,
с ними так просто работать не получается. Причина заключается в
том, что, как я уже говорил раньше, старые шрифты TrueType
(да и Type 1) имели всего по 256 символов
(а то и меньше). И коды этих символов были соответственно от 0 до
255. По стандарту Unicode в диапазоне 0-255
находятся цифры, знаки пунктуации, символы латинского алфавита,
а так же символы центральноевропейских стран. При открытии документа,
набранного старым шрифтом, например TimesET,
в Word 95, новый редактор Word
97 считает, что это европейские символы, а не русские. Но вот только
шрифт TimesET сделан так, что на месте этих
самых французских, немецких и пр. символов стоят русские. Посему
документы, открытые Word 97 отображаются
на экране правильно. Если же вы хотите дописать рядышком несколько
русских символов, то вместо них Word 97
начнет рисовать квадратики. Потому, что он начинает воспринимать
введенные буквы как русские, а не европейские, и выводить символы
с кодами после 401h. По причине того, что
в шрифте TimesET нет символов с кодом больше
255, то вместо этих несуществующих символов и отображается символ
по умолчанию (обычно это белый прямоугольник с рамкой). Для проверки
достаточно выделить импортированный русский текст из Word 95
вместе с вновь введенными квадратиками и присвоить ему шрифт Arial.
Русские буквы станут французскими, немецкими и какими угодно, а
прямоугольники – русскими.
Варианты решения
Вариант 1. Самым простым и честным решением представляется использование
шрифтов Unicode. Однако пока отечественные
компании, занимающиеся разработкой шрифтов, не выпустят новые версии
своих шрифтов, этот вариант вряд ли приемлем. Хотя уже сегодня многие
и зарубежные компании, например, AG Group,
начали выпускать Unicode-шрифты, а значит содержащие и кириллицу. Некоторые из
таких шрифтов поставляются вместе с CorelDraw в разделе "Шрифты Windows 95".
Вариант 2. «Подправить» имеющиеся шрифты. Для этого нужно перенести
символы с кодами 0C0h-0FFh в область, начиная с кода 401h. Такие
"подправленные" шрифты конечно не будут содержать греческих
и других символов, но с кириллицей проблем не будет. Отрицательным
моментом этого варианта является нарушение лицензионного соглашения
с производителем шрифта, дающего право использования шрифта, но
запрещающего любые его модификации. Кроме
этого при пересылке кому-либо своего документа, он с большой степенью
уверенности не будет прочитан, если в документ не будет при сохранении
внедрен этот шрифт (опция «внедрять шрифты True
Type» закладка «Сохранение» в режиме «Сервис|Параметры…»).
Вариант 3. Заключается в том, чтобы «обмануть» Office 97
и подсовывать ему русские буквы под видом европейских. Для этого
нужно в Windows 95 удалить русскую и, если
есть, другие, типа украинской, белорусской и пр., раскладки клавиатуры.
Затем следует поставить европейские клавиатуры, скажем, французскую,
немецкую и т.д. При этом нужно изменить их раскладку на русскую,
украинскую и т.д. (режим «Настройка|Панель
управления», «Клавиатура», закладка «Свойства» позволяет сменить
раскладку символов имеющейся клавиатуры). Таким образом, при наборе
на французской клавиатуре с русской раскладкой Word 97
будет генерировать коды символов в диапазоне до 255, что не будет
выходить за пределы имеющихся символов в шрифтах типа TimesET,
Pragmatica и др. Отрицательным моментом
при этом, конечно, является исключение возможности работы с Unicode
шрифтами. Хотя для работы с ними при необходимости можно оставить
и родную русскую клавиатуру. Кроме этого, при наборе на такой «фpанцузско-pусской»
клавиатуре Word 97 автоматически будет
присваивать французский язык набираемым словам, что не даст использовать
режим автоматической проверки правописания (spellchecker).
С описанных позиций представляется понятным принятое компанией
Microsoft решение. После появления достаточного
количество Unicode шрифтов работать с текстами
на разных языках станет гораздо проще, чем сейчас.
|