Кіріспе

Растрлық қаріптерді анықтау үшін қолданылатын сипаттама тілі – Metafont. Бұл растрлық қаріптерді анықтауға арналған сипаттама тілі. Сонымен қатар, Metafont кодын орындайтын интерпретатордың атауы, ол мысалы, PostScript-ке енгізілетін битмап қаріптерін жасайды. Metafont-ты Дональд Кнут өзінің TeX жинақтау жүйесіне қосымша ретінде ойлап тапты. Metafont-тың ерекшеліктерінің бірі – глифтердің пішінін анықтайтын нүктелер (мысалы, сабақтың жоғарғы жағы немесе сабақ пен көлденең сызықтың қиылысуы) геометриялық теңдеулермен беріледі. «m» әрпінің үш сабағының көлденең аралығы бірдей болуы үшін 1, 2 және 3 нүктелері үш сабақтың төменгі ұштарында орналасқандай көрсетіледі, ал олардың барлығы бір тік сызықта аяқталуы үшін… Metafont – макро тіл, онда «4 нүктесінде сабақтың жоғарғы жағындағы төменгі регистрлі serif сызу» сияқты операциялар әріптің бағдарламасында бір макро-нұсқау ретінде (нүкте аргумент ретінде) көрінуі мүмкін. Пішіндерді сипаттау үшін Metafont жолдарды құрудың кең спектрін ұсынады, бұл пайдаланушыны басқару нүктелерін есептеуден босатады. Metafont қаріптерінің көптеген отбасылары қаріптің негізгі бастапқы файлында тек бірнеше дизайн параметрлерін (x биіктігі, em ені, көлбеулік, тік сызықтың ені және т.б.) анықтайды, содан кейін жеке глифтерді салу үшін бүкіл қаріптер жинағы үшін ортақ жеке бастапқы файлды шақырады; осының арқасында жүйе мета-аспектіге ие.

Жұмыс істеу тәсілдері

Metafont көбінесе шығару құрылғысының (принтер, экран) драйверлеріне көмекші ретінде іске қосылады; мұндай жағдайларда оның міндеті – шығару құрылғысының (Metafont-та «режим» деп аталады) және ажыратымдылығының (шығарылған файл атауында көрінеді, төменде қараңыз) нақты комбинациясы үшін қаріптің биттік карталарын жасау. Бұл биттік карталар әдетте кейіннен қайта пайдалану үшін сақталады, сондықтан Metafont әр құжат көрсетілген сайын іске қосылуы қажет емес, бірақ Metafont компоненті бар TeX дистрибутивтерінде көбінесе алдын ала жасалған биттік қаріптер болмайды, себебі олар оларды жасауға болатын бастапқы кодтармен салыстырғанда тым үлкен болады. Metafont қаріптері дәстүрлі түрде TeX-тің негізгі қаріптері саналғандықтан, басқа қаріп форматтары ерекшеліктер болып келді, сондықтан Metafont емес қаріпті толық орнатпау кейде Metafont-ты шақырып, «somefont.mf табылмады» деген шатастыратын қате хабарламасын шығаруы мүмкін. Тағы да маңызды, бірақ сирек кездесетін жағдай – Metafont-ты қаріп метрикасы (TFM) файлы жасау үшін іске қосу; TFM файлы тек қаріп жасау айнымалысы оң болғанда ғана жасалады. Көбінесе TeX дистрибутивтері барлық TFM файлдарын алдын ала жасалған күйде ұсынады (өйткені олар өте кішкентай), бірақ егер біреу Metafont қаріпін бастапқы кодтардан орнатса, TeX оны пайдаланудан бұрын TFM файлын жасауы керек. Metafont-ты пайдаланудың үшінші жолы – сынақ режимі: егер сынақ айнымалысы оң болса, онда биттік қаріп файлында қаріп дизайнері дизайн үшін маңызды деп есептеген нүктелердің орналасуы мен атауларын қамтитын, арнайы командалар арқылы берілген қосымша ақпарат болады. Егер жеке gftodvi утилитасын қолдансаңыз, бұл арнайы ақпарат қосылады; нүктелердің орналасуы пиксельдік ажыратымдылығымен шектелмейді. Metafont интерактивті режимде де іске қосылуы мүмкін және ол жасаған кескіндерді экранда көрсетуге арналған командалары бар. Кнут Metafont-ты күрделі теңдеулерді шешу үшін үстел калькуляторы ретінде пайдаланғанын айтты, бірақ қазір математикалық иллюстрациялар үшін MetaPost-ты қолданады. Metafont тек глифтерді ғана емес, кез келген графикалық шығысты көрсетуге қабілетті. Дегенмен, математикалық иллюстрациялар үшін MetaPost және Asymptote ұсынылады. Metafont көбінесе пайдаланушының тікелей сұрауы болмаса іске қосылады. DVI файлдарында PostScript сияқты басқа форматтарға рұқсат етілгендей растрлық немесе векторлық глифтер жиынтығы емес, тек қаріптерге сілтемелер болады. Осылайша, DVI файлын қарау, басып шығару немесе түрлендіру сұранысы кезінде қаріптердегі глифтерге қол жеткізу қажет.

Шығару файлдары

Metafont бірнеше түрлі файлдарды шығарады: NAME.mf деп аталатын файл үшін, ол мыналарды шығара алады:

NAME.NNNNgf – NNNN ажыратымдылығында (әдепкіде 2602) растрлық шығыс файлы. NAME.tfm – TeX шрифтінің метрикалық ақпаратын қамтитын файл, бұл TeX-ке қажетті ақпарат. Әдетте, Metafont-қа осы файлды жасауды айту қажет. NAME.log – Өңдеу нәтижесінде алынған журнал файлы.

Metafont-ты іске қосып болғаннан кейін, әдетте NNNNgf файлдарын pk (жинақталған) пішіміне (.NNNNpk) айналдыру үшін gftopk бағдарламасы қолданылады. pk пішімі негізінен файл көлемін кішірейтин үшін (шамамен екі есеге дейін) енгізілді, сонымен қатар деректерді енгізу/шығару көлемі азайтылғандықтан өңдеу жылдамдығын арттыру күтілді. GF және PK пішімдері біт-карталардың ұзындықтарын кодтауды қолданады, бірақ ұзындықтардың екілік кодтауын әртүрлі жасайды. PK пішімі сондай-ақ біт-карталарды алдын ала өңдейді (шекаралық тіктөртбұрыш, қайталама қатарларды жою) және әрбір таңбаның барлық қатарын бір ұзын биттік тізбек ретінде кодтайды. TeX Directory Structure стандартында файл атаулары 8+3 таңбамен шектеледі, сондықтан GF және PK файлдарында тек gf және pk кеңейтімдері болады. Әртүрлі ажыратымдылықтағы файлдар dpiNNNN деп аталатын бөлек каталогтарға орналастырылып сақталады, мысалы dpi300/cmr10.pk.

Тіл

Metafont тілі – императивті емес, негізінен декларативті сипатқа ие бағдарламалар үшін интерпретацияланатын тіл.

Синтаксисі

Metafont-та кең таралған синтаксиске ие сандық және жол тұрақты белгілер бар; жолдар " тырнақшаларымен шектеледі, сандық тұрақтылар ондық бөлігі болуы мүмкін, бірақ дәрежелік бөлігі жоқ. Қалған барлық белгілер символдық деп жіктеледі және оларды кез келген түрде қайта анықтауға болады; белгілі бір мағынасы бар белгілердің атауында белгілі бір таңбалар болуы керек деген шектеу жоқ. Орындалу кезінде, кез келген типтегі тұрақты мәнді белгілер болып табылатын капсула белгілері де болуы мүмкін; бастапқы кодта олар символдық белгілер ретінде көрінеді. Сандық немесе жол тұрақтыларында таңбалар кездеспесе, белгілі бір таңбаны қамтитын белгінің ұзындығы сол таңбаның қай сыныпқа жататынына байланысты; TeX-тен айырмашылығы, Metafont-та таңбалардың белгілі сыныптары бар. ,, ;, (, және ) таңбалары "жеке" болып саналады және тек бір таңбадан тұратын белгілерді құрайды. <=>:|, ‘’ (бір тырнақша), + , /*\, ! ?, #&@$, ^~, [, ], {}, және . сияқты таңбалар сыныптары, сондай-ақ, үлкен және кіші әріптермен бірге төмен сызық сыныбы A–Z, бір сыныптағы таңбалардың ең ұзын тізбегінен тұрады. Бос орын белгілері белгілерді құрамайды. % таңбасы жолдың соңына дейін созылатын түсіндірме бастайды. Бұл ережелердің ерекшелігі, # таңбасы Metafont кодындағы айнымалы атауларының бір бөлігі ретінде жиі кездеседі, мысалы, em# және pt#. Шекаралар (мысалы, жақшалар) кіріктірілген мағынаға ие емес, олардың орнына екі символдық белгіні сәйкес келетін шекаралар жұбына айналдыратын команда бар, бірақ әдетте Metafont бағдарламалары тек қарапайым жақшаларды қолданады. Өрнектердегі басымдықтарды жоюдан басқа, шекаралар белгілі бір макро аргументтерінің айналасында да қажет.

Графика

Metafont-тағы қисықтар квадраттық емес, кубтық сплиндер ретінде анықталады, бұл күрделі арифметикаға байланысты, бірақ одан да әмбебаптыққа мүмкіндік береді. Көп тараған контурлы қаріп форматтарынан (мысалы, TrueType немесе PostScript Type 1) өзгеше, Metafont қаріпі негізінен шекті ені бар "қаламдармен" салынған штрихтардан және толтырылған аймақтардан тұрады. Осылайша, Metafont файлы глифтің контурын тікелей сипаттаудың орнына, қаламның қозғалыс жолын сипаттайды. Кейбір қарапайым Metafont қаріптері, мысалы, Computer Modern отбасының каллиграфиялық математикалық қаріптері, әрбір глифтің көрінетін "штрихын" жасау үшін салыстырмалы түрде үлкен қаламмен бір штрихты қолданады. Computer Modern отбасының римдік мәтіндік қаріптері сияқты күрделі қаріптер, көрінетін "штрихтардың" контурын бақылап өту үшін кішкентай қаламды пайдаланады, содан кейін олар толтырылады; нәтиже контурлы қаріпке ұқсас, бірақ қалам пішінімен анықталатын сәл жұмсақ бұрыштармен. Қаріп пішіндері тікелей кодталған сандар емес, теңдеулер арқылы анықталғандықтан, әр глифтің сипаттамасында (содан кейін бір қаріпті емес, мета қаріпті анықтайтын) қатынас, қаріптің еңіс бұрышы, штрих ені, сериф мөлшері және т.б. сияқты параметрлерді енгізуге болады. Осылайша, Metafont файлындағы бір параметрдің мәнін өзгерту арқылы бүкіл қаріп бойынша біркелкі өзгеріс жасауға болады. Computer Modern Roman осы мүмкіндіктің көптеген мысалдарын көрсетеді; әдеттегі TeX орнатылымында қаріптің 5-ден 17 cpi-ға дейінгі бірнеше нұсқасы бар, штрих ені барлық өлшемдерде бірдей болады (қаріп ұлғайтылғанда өспейді). Сонымен қатар, Computer Modern дөңгелек және безсериф қаріптері негізінен римдік қаріп үшін қолданылатын Metafont файлының негізінде жасалған, бірақ әртүрлі жаһандық параметрлермен.

Қолдану

Белгілі типтік дизайнерлер, мысалы Герман Запф, Кнутпен бірлесіп Metafont-ты қолдана отырып жаңа қаріптер жасаған, бірақ бұл жүйе кәсіби типтік дизайнерлер арасында кеңінен таралған жоқ. Кнут мұны "суретшіні 60 параметрлі қаріпті қалай жасауды түсіну үшін жеткілікті математик болуға шақыру тым қиын" дей отырып түсіндіреді. Джонатан Хофлер Metafont жүйесінің "сіздің сүйікті қаріптеріңіздің қайсысының да артында қалып қойған технологияға айналғанын" айтты. Кнуттың әріптердің негізгі құрылымдық формалардан басталатын идеясы кемшілікке толы. Metafont жүйесі қаріптерді ерекше жолдармен өңдеуге мүмкіндік береді; 1982 жылы Кнут оның қаріптерді өзгертуге, яғни бір қаріптің (мысалы, қалың әріптің) біртіндеп басқа қаріпке (мысалы, қалыңсыз әріпке) айналуына қалай қолданылатынын көрсетті.

Тарих

Дональд Кнут 1977 жылы шрифттер жасау бағдарламасын жасауға кірісіп, 1979 жылы Metafont-тың алғашқы нұсқасын шығарды. Бастапқы Metafont тілінің жетілмеушіліктеріне байланысты Кнут 1984 жылы толығымен жаңа Metafont жүйесін жасады, және қазір қолданылып жүргені – осы жаңартылған жүйе. Metafont-та TeX-ке ұқсас нұсқалау жүйесі бар, онда әр жаңартумен сан асимптотикалық түрде e санына жақындай береді.