[Comm] Проблемы шрифтов больших размеров (попытка разобраться)

Yury Aliaev =?iso-8859-1?q?mutab0r_=CE=C1_rambler=2Eru?=
Чт Июн 15 17:41:33 MSD 2006


Пытаясь разобраться с проблемой, я нарыл некоторые вещи:
Во-первых, рассмотрим файл описания одного из семейств шрифтов в LaTeX, 
про который говорится, что "типа там нету нужного размера", например 
/usr/share/texmf/tex/latex/cyrillic/t2acmr.fd. Там, в частности, есть 
такая строчка:

\providecommand{\EC на family}[5]{%
   \DeclareFontShape{#1}{#2}{#3}{#4}%
   {<5><6><7><8><9><10><10.95><12><14.4>%
    <17.28><20.74><24.88><29.86><35.83>genb*#5}{}}

Не понятно, почему там указаны только отдельные значения размеров 
шрифтов (шрифты-то масшатбируемые), а главное -- всё заканчивается 
35,83-мя пунктами, в то время как мне нужно до 80. Ладно, пытаюсь 
сделать грязный хак и добавить в список параметров <80>. Запускаю LaTeX, 
он пытается генерить шрифты и... обламывается! Оставив записку примерно 
такого содержания (там размер не 80, а меньше, но это без 
разницы)(привожу имеющий отношение к делу фрагмент):

(/usr/share/texmf/fonts/source/lh/base/lkligtbl.mf)
! Enormous number has been reduced.
<scantokens> 4100

<to be read again>
                    /
use_driver->...base);else:gensize:=scantokens(ss)/
                                                   100;ss:="input 
ec"&(substr...
l.259 use_driver(fonteq)
                         ;
I can't handle numbers bigger than about 4095.99998;
so I've changed your constant to that maximum amount.

 >> 40.96

Дальше я выяснил, что в файлике 
/usr/share/texmf/fonts/source/lh/base/fikparm.mf есть такие строчки:

  ss:=substring(length(param_base)-ii,length(param_base)) of param_base;
  if (genmode="ex") or (genmode="ec"):
% - set gensize for ec parameter files
     if (ss="8") or (ss="10"): % for EC slitex fonts
        exbase:=1; %!!! THAT'S TRICK: we don't need exbase at all
        gensize:=scantokens(ss);
        ss:="input "& (substring(0,fonteq-2) of param_base) & "ec"
                    & (substring(fonteq,length(param_base)) of param_base);
     else:
        gensize:=scantokens(ss)/100;

Получаем следующее: прога kpathsea, отвечающая за управление шрифтами, 
создаёт файл исходника шрифта, именуемый 
/var/lib/texmf/source/lh/lh-t2a/larm4100.mf,
который она и подсовывает бедному metafont'у. А в его скриптах и имеются 
вышепроцитированные строчки, смысл которых сводится к тому, что из имени 
файла вычисляется значение размера шрифта. Делается это так: выделяется 
цифровая часть (в данном случае -- 4100), делится на 100 и получаем 
размер шрифта: 41,00. Но не тут-то было! Оказывается, metafont не умеет 
работать с числами, большими чем 4096. Тут-то облом и наступает :(

Получается порочная схема, на позволяющая сгенерировать шрифт размером 
больше 40 пунктов. Наверное, никому из пользователей ALT Linux до меня 
это не было нужно, раз никто не наткнулся. Я считаю, что проблема 
достаточно серьёзная, и её нужно решить, хотя чувствую, что для этого 
придётся основательно покопаться в кишках ТеХ'а. Всё сказанное относится 
к ТеХ'у из комплекта Мастера 2.4. Возможно, в сизифе это уже решено 
(проверю на днях). Тогда всё заметно упрощается т.к. достаточно будет 
спортировать TeX из Сизифа.

Всех благ!
Юрий.



Подробная информация о списке рассылки community