8 Руководство пользователя Web2C

Web2C — это интегрированная коллекция программ, относящихся к TeXу: сам TeX, metafont, MetaPost, BibTeX, и т.д. Это сердце TeX Live.

Немного истории. Исходная имплементация была сделана Томасом Рокики, который в 1987 году создал первую систему TeX-to-C, адаптировав файлы изменений для Юникса, разработанные в основном Говардом Трики и Павлом Куртисом. Тим Морган стал поддерживать систему, и в этот период её имя сменилось на Web-to-C. В 1990 году Карл Берри взялся за работу, координируя работу десятков программистов, а в 1997 он передал руководство Олафу Веберу.

Система Web2C работает на Юниксе, 32-битовых Windows, MacOSX, и других операционных системах. Она использует оригинальные исходники Кнута для TeXа и других программ, написанных на языке web и переведённых на C. Основные программы системы:

bibtex
Поддержка библиографий.
dmp
troff в MPX (картинки в MetaPost).
dvicopy
Раскрывает виртуальные шрифты в файлах DVI.
dvitomp
DVI в MPX (картинки в MetaPost).
dvitype
DVI в текст.
gftodvi
Гранки шрифтов.
gftopk
упаковка шрифтов
gftype
GF в текст.
makempx
Вёрстка меток MetaPost.
mf
Создание шрифтов.
mft
Вёрстка исходников metafont.
mpost
Создание технических диаграмм.
mpto
Извлечение меток MetaPost.
newer
Сравнение дат модификации.
patgen
Создание таблиц переносов.
pktogf
PK в GF.
pktype
PK в текст
pltotf
Перевод из списка свойств шрифта в TFM.
pooltype
Показ файлов pool в web.
tangle
web в Pascal.
tex
Вёрстка.
tftopl
TFM в список свойств шрифта.
vftovp
Виртуальный шрифт в список свойств шрифта.
vptovf
Список свойств шрифта в виртуальный шрифт.
weave
web в TeX.

Полностью эти программы описаны в документации к соответствующим пакетам и самой Web2C. Однако знание некоторых общих принципов для всей семьи программ поможет вам полностью использовать программы системы Web2C.

Все программы поддерживают стандартные опции GNU:

--help
напечатать краткую справку
--verbose
печатать подробную информацию по мере работы
--version
Напечатать версию программы и завершить работу.

Для поиска файлов программы Web2C используют библиотеку Kpathsea. Эта библиотека использует комбинацию переменных окружения и конфигурационных файлов, чтобы найти нужные файлы в огромной системе TeX. Web2C может просматривать одновременно больше одного дерева директорий, что полезно для работы со стандартным дистрибутивом TeXа и его локальными расширениями. Для ускорения поисков файлов каждое дерево содержит файл ls-R, в котором указаны названия и относительные пути всех файлов в этом дереве.

8.1 Поиск файлов в Kpathsea

Рассмотрим сначала общий алгоритм библиотеки Kpathsea.

Будем называть путём поиска набор разделённых двоеточием или точкой с запятой of элементов пути, представляющих из себя в основном названия директорий. Путь поиска может иметь много источников. Чтобы найти файл «my-file» в «.:/dir», Kpathsea проверяет каждый элемент пути по очереди: сначала ./my-file, затем /dir/my-file, возвращая первый (или, возможно, все) файл.

Чтобы работать с разными операционными системами, Kpathsea под системой, отличной от Юникса может использовать разделители, отличные от «:» и slash («/».

Чтобы проверить определённый элемент пути p, Kpathsea вначале проверяет, приложима ли к нему база данных (см. «База данных файлов» на стр. 74), т.е., есть ли база в директории, которая является префиксом для p. Если это так, спецификация пути сравнивается с содержимым базы данных.

Если база данных не существует, или не относится к этому элементу пути, или не содержит нужного элемента, проверяется файловая система (если это не запрещено спецификацией, начинающейся с «!!», и если файл должен существовать). Kpathsea конструирует список директорий, которые соответствуют элементу, и в каждой ищет нужный файл,

Условие «файл должен существовать» относится файлам «.vf» и файлам, которые открывает TeX по команде \openin. Такие файлы могут и не существовать (например, файл cmr10.vf), и было бы неправильно искать их на диске. Поэтому, если вы не обновите ls-R при установке нового файла «.vf», он никогда не будет найден. Каждый элемент пути ищется по очереди: сначала база данных, затем диск. Если нужный файл найден, поиск останавливается, и возвращается результат.

Хотя самых простой и часто встречающийся элемент — это название директории, Kpathsea поддерживает дополнительные возможности: разнообразные значения по умолчанию, имена переменных окружения, значения из конфигурационных файлов, домашние директории пользователей, рекурсивный поиск поддиректорий. Поэтому мы говорим, что Kpathsea вычисляет элемент пути, т.е., что библиотека преобразует спецификации в имя или имена директории. Это описано в следующих разделах в том же порядке, в котором происходит при поиске.

Заметьте, что имя файла при поиске может быть абсолютным или относительным, т.е. начинаться с «/» или «./» или «../», Kpathsea просто проверяет, существует ли файл.

8.1.1 Источники путей поиска

Путь поиска может иметь разные источники. Kpathsea использует их в следующем порядке:

  1. Установленные пользователем переменные окружения, например TEXINPUTS. Переменные окружения с точкой и названием программы имеют преимущество; например «latex» — имя программы. то TEXINPUTS.latex имеет преимущество перед TEXINPUTS.
  2. Конфигурационный файл, специфический для данной программы, например, строка «S /a:/b» в config.ps для dvips.
  3. Конфигурационный файл Kpathsea texmf.cnf, содержащий строку типа «TEXINPUTS=/c:/d» (см. ниже).
  4. Значение, заданное при компиляции.

Вы можете увидеть каждое из этих значений для данного пути поиска, задав соответствующий уровень отладки (см. «Отладка» на стр. 82).

8.1.2 Конфигурационные файлы

Kpathsea читает конфигурационные файлы texmf.cnf для задания своих параметров. Путь поиска для этих файлов называется TEXMFCNF (по умолчанию, такой файл находится в поддиректории texmf/web2c). Все найденные файлы texmf.cnf будут прочитаны и определения в более ранних файлах имеют преимущество перед определениями в более поздних. Таким образом, если путь поиска задан как .:$TEXMF, значения в ./texmf.cnf имеют преимущество перед значениями в $TEXMF/texmf.cnf.

Фрагмент конфигурационного файла, иллюстрирующий эти правила приведён ниже:


  TEXMF              = {$TEXMFLOCAL;!!$TEXMFMAIN}
  TEXINPUTS.latex    = .;$TEXMF/tex/{latex;generic;}//
  TEXINPUTS.fontinst = .;$TEXMF/tex//;$TEXMF/fonts/afm//
  % e-TeX related files
  TEXINPUTS.elatex   = .;$TEXMF/{etex;tex}/{latex;generic;}//
  TEXINPUTS.etex     = .;$TEXMF/{etex;tex}/{eplain;plain;generic;}//

8.1.3 Подстановка путей

Kpathsea разпознаёт определённые специальные символы и конструкции в путях поиска, аналогичные конструкциям в стандартных оболочках Юникса. Например, сложный путь ~$USER/{foo,bar}//baz, означает все поддиректории директорий foo и bar в домашней директории пользователя $USER, которые содержат файл или поддиректорию baz. Это объяснено в следующем разделе.

8.1.4 Подстановка по умолчанию

Если путь поиска с наибольшим приоритетом (см. «Источники путей» на стр. 69) содержит дополнительное двоеточие (в начале, в конце, двойное), Kpathsea заменяет его следующим по приоритету путём. Если этот вставленный путь содержит дополнительное двоеточие, то же происходит со следующим путём. Например, если переменная окружения задана как


setenv TEXINPUTS /home/karl:
и TEXINPUTS в файле texmf.cnf содержит

  .:$TEXMF//tex
то поиск будет происходить с путём

  /home/karl:.:$TEXMF//tex

Поскольку было бы бесполезно вставлять значение по умолчанию более, чем один раз, Kpathsea изменяет только одно лишнее двоеточие, и оставляет остальные: она проверяет сначала двоеточие в начале, потом в конце, потом двойные двоеточия.

8.1.5 Подстановка скобок

Полезна также подстановка скобок, из-за которой, например, v{a,b}w означает vaw:vbw. Вложенность возможна. Благодаря этому можно иметь несколько иерархий директорий, путём присвоения значения со скобками $TEXMF. Например, в файле texmf.cnf, можно найти следующее определение:


    TEXMF = {$HOMETEXMF,$TEXMFLOCAL,!!$VARTEXMF,!!$TEXMFMAIN}

Благодаря этому можно писать такое:


    TEXINPUTS = .;$TEXMF/tex//

что означает, что кроме текущей директории будет происходить поиск только в $HOMETEXMF/tex, $TEXMFLOCAL/tex, $VARTEXMF/tex и $TEXMFMAIN/tex (последние два используют файлы ls-R). Это удобно для поддержки двух параллельных структур, «замороженной» (например, на CD) и обновляемой по мере появления новых версий. Используя переменную $TEXMF во всех определениях, можно задать поиск в обновляемом дереве первым.

8.1.6 Подстановка поддиректорий

Два или более «/» в элементе пути вслед за именем директории d заменяются всеми поддиректориями d рекурсивно. На каждом уровне порядок поиска по директориям не определён.

Если вы определите компоненты имени файла после «//», только поддиректории с соответствующими компонентами будут включены. Например, «/a//b» даёт поддиректории /a/1/b, /a/2/b, /a/1/1/b, и т.д., но не /a/b/c или /a/1.

Возможны несколько конструкций «//» в одном пути, но «//» в начале пути игнорируются.

8.1.7 Список специальных символов и их значений

В следующем списке приводятся специальные символы в конфигурационных файлах Kpathsea.

:
Разделитель в спецификациях путей; в начале или конце означает подстановку по умолчанию.
;
Разделитель для не-Юникса (то же, что :).
$
Подстановка переменных.
~
Означает домашнюю директорию пользователя/
{. . . }
Подстановка скобок.
//
Подстановка поддиректорий (может встретиться где угодно, кроме начала пути).
%
Начало комментария.
\
Символ продолжения (для команд из нескольких строк).
!!
Поиск только в базе данных, но не на диске.

8.2 Базы данных

Kpathsea старается минимизировать обращение к диску при поиске. Тем не менее в системах с большим количеством директорий поиск в каждой возможной директории может занять долгое время (это особенно верно, если надо проверить сотни директорий со шрифтами). Поэтому Kpathsea может использовать внешний текстовый файл, «базу данных» ls-R, который знает, где находятся файлы в директориях, что даёт возможность избежать частых обращений к диску.

Ещё одна база данных, файл aliases позволяет вам давать дополнительные названия файлам в ls-R. Это полезно, если вам нужно соблюдать правило DOS «8.3».

8.2.1 Базы данный ls-R

Как объяснено выше, основная база данных называется ls-R. Вы можете создать её в корне каждого дерева TeXа, которое просматривается Kpathsea (по умолчанию, $TEXMF); в большинстве случаев иерархия только одна. Kpathsea ищет файлы ls-R в пути TEXMFDBS.

Рекомендуемый способ создания и поддержки «ls-R» — скрипт mktexlsr, включённый в дистрибутив. Он вызывается разными скриптами «mktex». . . . В принципе этот скрипт выполняет команды типа


cd /your/texmf/root && ls -LAR ./ >ls-R
при условии, что в вашей системе ls даёт вывод в нужном формате (GNU ls годится). Чтобы поддерживать базу данных в текущем состоянии, проще всего перегенерировать её регулярно из cronа, так что она автоматически обновляется после установки нового пакета.

Если файл не найден в базе данных, по умолчанию Kpathsea ищет на диске. Если элемент пути начинается с «!!», то поиск происходит только в базе данных.

8.2.2 kpsewhich: поиск файлов

Программа kpsewhich выполняет поиск в соответствии с алгоритмом, описанным выше. Это может быть полезно в качестве варианта команды find для поиска файлов в иерархиях TeXа hierarchies (это широко используется в скриптах «mktex»).


kpsewhich option. . .  filename. . .
Опции, указанные в option, начинаются либо с «-» либо «--», и любые сокращения возможны.

Kpathsea рассматривает каждый аргумент, не являющийся опцией, как имя файла, и возвращает первый найденный файл. Нет опции вернуть все найденные файлы (для этого можно использовать программу «find»).

Наиболее важные опции описаны ниже.

--dpi=num

Установить разрешение num; это влияет только на поиск файлов «gf» и «pk» lookups. Синоним «-D», для совместимости с dvips. По умолчанию 600.
--format=name

Установить формат для поиска name. По умолчанию, формат определяется из имени файла. Для форматов, для которых нет однозначного суффикса, например, файлов MetaPost и конфигурационных файлов dvips, вы должны указать название в соответствии с первой колонкой Таблицы 3, которая перечисляет известные имена, описание, возможные расширения файла и соответствующие переменные окружения.
Таблица 3: Типы файлов kpathsea.

Название

Описание
Переменные
Суффиксы

afm

Метрики шрифтов Adobe

AFMFONTS

.afm

base

Дамп памяти Metafontа

MFBASES, TEXMFINI

.base

bib

Источники библиографии для BibTeXа

BIBINPUTS, TEXBIB

.bib

Битмапы шрифтов

GLYPHFONTS, TEXFONTS

bst

Стили BibTeXа

BSTINPUTS

.bst

cnf

Конфигурационные файлы

TEXMFCNF

.cnf

dvips config

Конфигурационные файлы dvips, например, config.ps и psfonts.map

TEXCONFIG

.map

fmt

Дамп памяти TeXа

TEXFORMATS, TEXMFINI

.fmt, .efmt, .efm

gf

Битмапы в формате GF

GFFONTS

.gf

graphics/figure

Encapsulated PostScript

TEXPICTS, TEXINPUTS

.eps, .epsi

ist

Стили программы makeindex

TEXINDEXSTYLE, INDEXSTYLE

.ist

ls-R

Базы данных

TEXMFDBS

map

Fontmaps

TEXFONTMAPS

.map

mem

Дамп памяти MetaPostа

MPMEMS, TEXMFINI

.mem

mf

Исходный код для Metafontа

MFINPUTS

.mf

mfpool

Строки для Metafontа

MFPOOL, TEXMFINI

.pool

mft

Стили для MFT

MFTINPUTS

.mft

Разные шрифты

MISCFONTS

mp

Исходные файлы для MetaPostа

MPINPUTS

.mp

mppool

Строки для MetaPostа

MPPOOL, TEXMFINI

.pool

MetaPost support

Файлы для MetaPostа, используются программой DMP

MPSUPPORT

ocp

Скомпилированные файлы для _O_

OCPINPUTS

.ocp

ofm

Метрики шрифтов для _O_

OFMFONTS, TEXFONTS

.ofm, .tfm

opl

Списки свойств для _O_

OPLFONTS, TEXFONTS

.opl

otp

Файлы для переводов _O_

OTPINPUTS

.otp

ovf

Виртуальные шрифты для _O_

OVFFONTS, TEXFONTS

.ovf

ovp

Виртуальные списки свойств шрифтов для _O_

OVPFONTS, TEXFONTS

.ovp

pk

упакованные битмапы шрифтов

programFONTS (program тут XDVI, etc.), PKFONTS, TEXPKS, GLYPHFONTS, TEXFONTS

.pk

PostScript header

заголовки для PostScriptа

TEXPSHEADERS, PSHEADERS

.pro, .enc

tex

Исходники для TeXа

TEXINPUTS

.tex, .cls, .sty, .clo, .def

TeX system documentation

Документация для TeXа

TEXDOCS

TeX system sources

Исходники для системы TeX

TEXSOURCES

texpool

Строки для программы TeX

TEXPOOL, TEXMFINI

.pool

tfm

Метрики шрифтов для TeXа

TFMFONTS, TEXFONTS

.tfm

Troff fonts

Шрифты troff, для DMP

TRFONTS

truetype fonts

Шрифты в формате TrueType

TTFONTS

.ttf, .ttc

Type 1 fonts

Шрифты в формате Type 1 (PostScript)

T1FONTS, T1INPUTS, TEXPSHEADERS, DVIPSHEADERS

.pfa, .pfb

type42 fonts

Шрифты в формате Type 42 (PostScript)

T42FONTS

vf

Виртуальные шрифты

VFFONTS, TEXFONTS

.vf

web2c files

Файлы для Web2C

WEB2C

other text files

текстовые файлы для «foo»

FOOINPUTS

other binary files

Двоичные файлы для «foo»

FOOINPUTS

Последние две строки в Таблице 3 — специальные случаи, когда пути и переменные окружения зависят от названия программы; имя переменной окружения конструируется преобразованием названия программы в верхний регистр, и добавлением INPUTS.

Переменные окружения устанавливаются по умолчанию в конфигурационном файле texmf.cnf. Если вы хотите переопеределить одно или несколько значений из этого файла, вы можете установить их явно.

Опции «--format» и «--path» не могут использоваться вместе.

--mode=string

Установить название моды string; влияет только на поиск файлов «gf» и «pk». ПО умолчанию ищутся все моды.
--must-exist

Сделать всё возможное, чтобы найти файлы, включая обращения к диску. По умолчанию ищутся только базы данных из соображений эффективности.
--path=string

Искать в пути string (разделённом двоеточиями, как обычно), вместо того, чтобы определить путь по названию файла. «//» и т.д. поддерживаются. Опции «--path» и and «--format» не могут быть употреблены вместе.
--progname=name

Установить имя программы name. Это влияет на поиск из-за переменных типа .progname По умолчанию kpsewhich.
--show-path=name

Показывает пути, использованные для поиска файла типа name. Расширение имени файла (.pk, .vf, и т,д.) или название можно использовать, как и для опции «--format».
--debug=num

Устанавливает уровень отладки num.

8.2.3 Примеры использования

Давайте посмотрим на Kpathsea в действии. Вот простой поиск:


kpsewhich article.cls
/usr/local/texmf/tex/latex/base/article.cls
Мы ищем файл article.cls. Так как суффикс «.cls» однозначен, нам не нужно указывать, что мы ищем файл типа tex (исходники TeXа). Мы находим его в поддиректории tex/latex/base корневой директории «TEXMF». Аналогично, всё последующее находится без проблем из-за однозначного суффикса:

kpsewhich array.sty
   /usr/local/texmf/tex/latex/tools/array.sty
kpsewhich latin1.def
   /usr/local/texmf/tex/latex/base/latin1.def
kpsewhich size10.clo
   /usr/local/texmf/tex/latex/base/size10.clo
kpsewhich small2e.tex
   /usr/local/texmf/tex/latex/base/small2e.tex
kpsewhich tugboat.bib
   /usr/local/texmf/bibtex/bib/beebe/tugboat.bib

Последнее — библиографическая база данных для статей журнала TUGBoat.


kpsewhich cmr10.pk
Битмапы шрифтов типа .pk используются программами dvips о xdvi. Ничего не найдено, так как у нас нет готовых файлов шрифтов Computer Modern в формате «.pk» (так как мы используем версии в формате Type 1 из дистрибутива TeX Live).

kpsewhich ecrm1000.pk
   /usr/local/texmf/fonts/pk/ljfour/jknappen/ec/ecrm1000.600pk
Для дополнительных шрифтов Computer Modern мы должны сгенерировать «.pk», и так как мода metafont [о умолчанию в нашей системе ljfour с разрешением of 600 dpi, этот шрифт и найден.

kpsewhich -dpi=300 ecrm1000.pk
В этом случае нам нужно разрешение 300 dpi (-dpi=300); мы видим, что такого шрифта в системе нет. На самом деле программа dvips или xdvi построила бы нужный файл .pk при помощи скрипта mktexpk.

Теперь обратимся к заголовкам и конфигурационным файлам dvips. Вначале рассмотрим один из наиболее часто используемых файлов, пролог tex.pro для поддержки TeXа, а затем рассмотрим общий конфигурационный файл config.ps и карту шрифтов psfonts.map. Так как суффикс «.ps» неоднозначен, мы должные явно указать тип файла, который мы ищем: (dvips config) для файла config.ps.


kpsewhich tex.pro
   /usr/local/texmf/dvips/base/tex.pro
kpsewhich --format="dvips config" config.ps
   /usr/local/texmf/config/config.ps
kpsewhich psfonts.map
   /usr/local/texmf/dvips/base/psfonts.map

Рассмотрим теперь файлы поддержки URW Times (PostScript). Префикс для этих файлов в стандартной схеме обозначения шрифтов «utm». Вначале мы рассмотрим конфигурационный файл, который содержит название карты шрифтов:


kpsewhich --format="dvips config" config.utm
/usr/local/texmf/dvips/psnfss/config.utm
Содержание этого файла:

  p +utm.map
что указывает на файл utm.map, который мы хотим теперь найти.

kpsewhich --format="dvips config" utm.map
/usr/local/texmf/dvips/psnfss/utm.map
Эта карта определяет названия шрифтов формата Type 1 (PostScript) в коллекции URW. Она выглядит так (мы показываем только часть файла):

utmb8r  NimbusRomNo9L-Medi    ... <utmb8a.pfb
utmbi8r NimbusRomNo9L-MediItal... <utmbi8a.pfb
utmr8r  NimbusRomNo9L-Regu    ... <utmr8a.pfb
utmri8r NimbusRomNo9L-ReguItal... <utmri8a.pfb
utmbo8r NimbusRomNo9L-Medi    ... <utmb8a.pfb
utmro8r NimbusRomNo9L-Regu    ... <utmr8a.pfb
Давайте найдём, например, файл для Times Roman utmr8a.pfb:

kpsewhich utmr8a.pfb
 /usr/local/texmf/fonts/type1/urw/utm/utmr8a.pfb

Из этих примеров очевидно, что вы можете легко найти заданный файл. Это особенно важно, если вы думаете, что программы находят не ту версию файла, поскольку kpsewhich показывает первый найденный файл.

8.2.4 Отладка

Иногда необходимо проверить, как программа ищет файлы. С этой целью Kpathsea предлагает разные уровни отладки:

 1
статистика обращений к диску. При работе с базами ls-R это почти не должно давать строк в лог.
 2
Ссылки на хеши (например, базы данных ls-R, конфигурационные файлы и т.д.).
 4
Операции открытия и закрытия файлов.
 8
Общая информация о типах файлов, которые ищет Kpathsea. Это полезно для того, чтобы найти, где определяется тип пути поиска для данного файла.
16
Список директорий для каждого элемента пути (при поисках на диске).
32
Поиски файлов.

Значение -1 задаст все опции вышел именно это значение чаще всего используется на практике.

Аналогично, запустив программу dvips и используя сочетание этих опций, можно проследить подробно, как ищутся файлы. С другой стороны, если файл не найден, трассировка показывает, где его искали, так что можно понять, в чём состоит проблема.

Вообще говоря, поскольку большинство программ пользуются библиотекой Kpathsea, вы можете установить опцию отладки используя переменную окружения KPATHSEA_DEBUG, и установив её на комбинацию описанных выше значений.

(Примечание для пользователей Windows: в этой системе трудно перенаправить все сообщения в файл. Для диагностики вы можете временно установить SET KPATHSEA_DEBUG_OUTPUT=err.log).

Рассмотрим в качестве примера простой файл в формате LaTeX, hello-world.tex, со следующим содержанием:


    \documentclass{article}
    \begin{document}
    Hello World!
    \end{document}

Этот маленький файл использует только шрифт cmr10, так что давайте порсмотрим, как dvips создаёт файл в формате PostScript (мы хотим использовать версию шрифтов в формате Type 1, отсюда опция -Pcms).


dvips -d4100 hello-world -Pcms -o
В этом случае мы объединили отладочный уровень 4 для dvips’s debug class 4 (директории шрифтов) с подстановкой элементов путей в Kpathsea(см. Руководство пользователя dvips, texmf/doc/html/dvips/dvips_toc.html). Результат (слегка отредактированный) показан на Рис. 7.
debug:start search(file=texmf.cnf, must_exist=1, find_all=1,
  path=.:/usr/local/bin/texlive:/usr/local/bin:
       /usr/local/bin/texmf/web2c:/usr/local:
       /usr/local/texmf/web2c:/.:/./teTeX/TeX/texmf/web2c:).
kdebug:start search(file=ls-R, must_exist=1, find_all=1,
  path=~/tex:/usr/local/texmf).
kdebug:search(ls-R) =>/usr/local/texmf/ls-R
kdebug:start search(file=aliases, must_exist=1, find_all=1,
  path=~/tex:/usr/local/texmf).
kdebug:search(aliases) => /usr/local/texmf/aliases
kdebug:start search(file=config.ps, must_exist=0, find_all=0,
  path=.:~/tex:!!/usr/local/texmf/dvips//).
kdebug:search(config.ps) => /usr/local/texmf/dvips/config/config.ps
kdebug:start search(file=/root/.dvipsrc, must_exist=0, find_all=0,
  path=.:~/tex:!!/usr/local/texmf/dvips//).
search(file=/home/goossens/.dvipsrc, must_exist=1, find_all=0,
  path=.:~/tex/dvips//:!!/usr/local/texmf/dvips//).
kdebug:search($HOME/.dvipsrc) =>
kdebug:start search(file=config.cms, must_exist=0, find_all=0,
  path=.:~/tex/dvips//:!!/usr/local/texmf/dvips//).
kdebug:search(config.cms)
=>/usr/local/texmf/dvips/cms/config.cms
Рис. 7: Поиск конфигурационных файлов
kdebug:start search(file=texc.pro, must\_exist=0, find\_all=0,
  path=.:~/tex/dvips//:!!/usr/local/texmf/dvips//:
       ~/tex/fonts/type1//:!!/usr/local/texmf/fonts/type1//).
kdebug:search(texc.pro) => /usr/local/texmf/dvips/base/texc.pro
Рис. 8: Поиск файла пролога
kdebug:start search(file=cmr10.tfm, must\_exist=1, find\_all=0,
  path=.:~/tex/fonts/tfm//:!!/usr/local/texmf/fonts/tfm//:
       /var/tex/fonts/tfm//).
kdebug:search(cmr10.tfm) => /usr/local/texmf/fonts/tfm/public/cm/cmr10.tfm
kdebug:start search(file=texps.pro, must\_exist=0, find\_all=0,
   ...
<texps.pro>
kdebug:start search(file=cmr10.pfb, must\_exist=0, find\_all=0,
  path=.:~/tex/dvips//:!!/usr/local/texmf/dvips//:
       ~/tex/fonts/type1//:!!/usr/local/texmf/fonts/type1//).
kdebug:search(cmr10.pfb) => /usr/local/texmf/fonts/type1/public/cm/cmr10.pfb
<cmr10.pfb>[1]
Рис. 9: Поиск файла шрифта

Программа dvips вначале ищет свои конфигурационные файлы. Сначала находится texmf.cnf, который содержит определения для путей поиска остальных файлов, затем база данных ls-R (для оптимизации поиска файлов) и файл aliases, который позволяет объявить несколько имён (например, короткие 8.3 и более длинные) для одного файла. Затем dvips ищет свой конфигурационный файл config.ps до поиска файла .dvipsrc (который в данном случае не найден). Наконец, dvips находит конфигурационный файл для шрифтов Computer Modern PostScript config.cms (это было задано опцией -Pcms в командной строке). Этот файл содержит список карт, которые определяют соотношения между файлами в форматах TeX, PostScript и названиями шрифтов:


more /usr/local/texmf/dvips/cms/config.cms
   p +ams.map
   p +cms.map
   p +cmbkm.map
   p +amsbkm.map
dvips находит все эти файлы плюс общую карту шрифтов psfonts.map, которая всегда загружается (она содержит обычные шрифты в формате PostScript; см. последнюю часть раздела 8.2.3 ).

В этот момент dvips сообщает о себе пользователю:


This is dvips(k) 5.92b Copyright 2002 Radical Eye Software (www.radicaleye.com)
Затем она ищет пролог texc.pro:

kdebug:start search(file=texc.pro, must_exist=0, find_all=0,
  path=.:~/tex/dvips//:!!/usr/local/texmf/dvips//:
       ~/tex/fonts/type1//:!!/usr/local/texmf/fonts/type1//).
kdebug:search(texc.pro) => /usr/local/texmf/dvips/base/texc.pro

Найдя этот файл, dvips печатает дату и время, и информирует нас, что собирается генерировать файл hello-world.ps, что ей нужен файл cmr10, и что последний является «резидентным» (битмапы не нужны):


TeX output 1998.02.26:1204’ -> hello-world.ps
Defining font () cmr10 at 10.0pt
Font cmr10 <CMR10> is resident.
Теперь она ищет файл cmr10.tfm, который она находит, затем ещё несколько прологов (здесь они опущены), и наконец файл формата Type 1 cmr10.pfb найден и включён в выходной файл (см, последнюю строку):

kdebug:start search(file=cmr10.tfm, must_exist=1, find_all=0,
  path=.:~/tex/fonts/tfm//:!!/usr/local/texmf/fonts/tfm//:
       /var/tex/fonts/tfm//).
kdebug:search(cmr10.tfm) => /usr/local/texmf/fonts/tfm/public/cm/cmr10.tfm
kdebug:start search(file=texps.pro, must_exist=0, find_all=0,
   ...
<texps.pro>
kdebug:start search(file=cmr10.pfb, must_exist=0, find_all=0,
  path=.:~/tex/dvips//:!!/usr/local/texmf/dvips//:
       ~/tex/fonts/type1//:!!/usr/local/texmf/fonts/type1//).
kdebug:search(cmr10.pfb) => /usr/local/texmf/fonts/type1/public/cm/cmr10.pfb
<cmr10.pfb>[1]

8.3 Опции запуска

Ещё одна полезная возможность Web2C, это контроль параметров памяти (в особенности размер массивов) при запуске, во время чтения файла texmf.cnf библиотекой Kpathsea. Параметры памяти находятся в части 3 этого файла в дистрибутиве TeX Live. Вот самые важные:

main_memory
Общее количество слов в памяти для программ TeX, metafont и MetaPost. Вы должны создать новый формат для этих изменений. Например, вы можете создать «огромную» версию TeXа, и назвать соответствующий формат hugetex.fmt. По общим правилам Kpathsea, значение переменной main_memory будет читаться из файла texmf.cnf (ср. общее значение и значение для «hugetex»).
extra_mem_bot
Дополнительная память для «больших» структур, которые создаёт TeX. Особенно полезно при использовании PI CTeXа.
font_mem_size
Количество слов информации о шрифтах для TeXа. Это более или менее суммарный размер всех файлов TFM, которые читает TeX.
hash_extra
Дополнительный размер хеша для имён команд. Примерно 10 000 команд может быть помещено в основной хеш. Если вы делаете большую книгу со многими перекрёстными ссылками, этого может не хватить. И hugetex, и pdflatex требуют 15 000 дополнительных команд; (по умолчанию hash_extra равно нулю).

Разумеется, это не замена настоящих динамических массивов и распределения памяти, но поскольку эти черты исключительно сложно осуществить в текущем TeXе, эти параметры дают полезный компромисс и некоторую гибкость.