TeX Policy

Материал из ALT Linux Wiki
Перейти к: навигация, поиск

ALT TeX policy

Stamp90cw.png
Действующая политика Sisyphus

Политика действует, начиная со стабильного бранча 5.1 и выше.

Ответственный за проведение политики в жизнь — KirillMaslinsky.

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

Определения[править]

  • Дистрибутив ТеХ — пакет или коллекция пакетов, предоставляющих исполняемые файлы оригинальной программ tex и metafont Дональда Кнута, а также совместимых с ним программ, и прочие файлы, необходимые для их работы. В настоящий момент в Сизифе имеется два дистрибутива TeX — texlive и tetex. Дистрибутивы ТеХ конфликтуют между собой и на настоящий момент нет возможности одновременно установить пакеты, относящиеся к разным дистрибутивам ТеХ.
  • Дерево TEXMF — подкаталог файловой системы, организованный в соответствии с TDS. В контексте создания пакетов актуальны следующие деревья texmf:
    • TEXMFMAIN/usr/share/texmf
    • TEXMFDIST/usr/share/texmf-<tex_distro_name>
    • TEXMFSYSCONFIG/etc/texmf

См. также список других деревьев.

  • Модуль TEXMF — любые файлы, предназначенные для использования ТеХ’ом и совместимыми с ним программами (размещаемые в одном из деревьев TEXMF и доступные средствами библиотеки libkpathsea). Модуль TEXMF может быть оформлен в качестве отдельного пакета, независимого от конкретного дистрибутива ТеХ, что позволяет использовать такие пакеты с любым из дистрибутивов ТеХ.
  • Пакет, использующий подсистему ТеХ — любой пакет, который нуждается в сборочных либо установочных зависимостях на любые программы, входящие в дистрибутив ТеХ.

Упаковка пакетов, использующих подсистему ТеХ[править]

Установочные зависимости[править]

В общем случае (пакет не специфичен для конкретного дистрибутива ТеХ), зависимости на необходимые программы из состава дистрибутива ТеХ не следует указывать явно — они будут обнаружены автоматически. Выполнение этого правила позволит использовать такой пакет с любым из дистрибутивов ТеХ, не привязывая его без необходимости к одному из них.

В случае, если необходимая зависимость не была по каким-то причинам обнаружена автоматически, допускается явное указание зависимости на конкретный исполняемый файл, необходимый пакету, например:

Requires: /usr/bin/latex
Requires: /usr/bin/dvips

Обо всех случаях, когда необходимые зависимости не были обнаружены автоматически, следует сообщать как об ошибке.

Возможны ситуации, когда пакет специфичен для конкретного дистрибутива ТеХ и либо не работает с другим дистрибутивом ТеХ, либо не имеет для него смысла. В этом случае допускается указание зависимости на имена пакетов конкретного дистрибутива TeX, например, tetex-latex.

Во всех остальных случаях указание в пакете зависимости на имена пакетов одного из дистрибутивов ТеХ считается ошибкой.

Сборочные зависимости[править]

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

Ниже в таблице приведены имена пакетов дистрибутивов ТеХ, соответствующих основным функциональностям, необходимым другим пакетам при сборке:

Функциональность tetex old texlive 2008 texlive
tex(LaTeX) -> dvi tetex-latex texlive-latex-base texlive-collection-latex
tex(LaTeX) -> pdf tetex-latex texlive-latex-base texlive-collection-latex
dvi -> ps tetex-dvips texlive-base-bin texlive-collection-basic
kpathsea (для линковки) tetex-devel libkpathsea-devel libkpathsea-devel

В настоящее время дистрибутивы ТеХ неравноценны в отношении поддержки: tetex не поддерживается, texlive поддерживается и развивается. Поэтому мейнтейнерам рекомендуется по возможности использовать при сборке пакеты texlive.

Дистрибутивы ТеХ должны быть эквивалентны в своей основной функциональности, поэтому замена в сборочной среде пакетов одного дистрибутива ТеХ на эквивалентный набор пакетов другого не должна влиять на успешность и результат сборки. Если такое влияние обнаруживается, об этом следует сообщать как о возможной ошибке.

Нельзя одновременно указывать в сборочных зависимостях пакеты, относящиеся к разным дистрибутивам ТеХ, т.к. это приведёт к невозможности сформировать сборочную среду (дистрибутивы ТеХ конфликтуют между собой).

TeX input files[править]

Если в пакете присутствуют файлы, предназначенные для использования ТеХом и совместимыми с ним программами (чаще всего *.sty, *.tex), к ним применяются правила раздела 3 настоящего документа.

Упаковка модулей TEXMF[править]

Все файлы, предназначенные для использования ТеХом и совместимыми с ним программами, должны быть установлены в одном из деревьев TEXMF (подрбонее см. ниже). Не допускается размещение таких файлов вне деревьев TEXMF, за исключением %docdir.

Например, если в Вашем пакете присутствуют стилевые файлы для LaTeX (.sty, .cls), они предствляют собой модуль TEXMF и к ним применяются описанные в данном разделе правила. Во многих случаях будет оправданной упаковка содержащегося в Вашем пакете модуля TEXMF в отдельный подпакет.

Общие правила[править]

Упаковка модулей TEXMF в отдельные пакеты руководствуется двумя основными идеями:

  • Файлы отдельно упакованного модуля TEXMF имеют приоритет перед аналогичными файлами дистрибутивов ТеХ, «затеняют» их. Это позволяет как дополнять дистрибутивы ТеХ отсутствующими в нём пакетами, так и предоставлять более новые версии модулей, чем те, которые имеются в относительно стабильных и редко обновляющихся дистрибутивах ТеХ.
  • Отдельно упакованные модули TEXMF должны быть «универсальными», доступными для использования с любым дистрибутивом ТеХ.

Отдельный пакет с модулем TEXMF имеет смысл только в том случае, если соответствующий модуль отсутствует в дистрибутиве ТеХ, либо в пакете предоставляется более новая версия модуля, чем та, которая присутствует в одном или во всех дистрибутивах ТеХ.

Мейнтейнеру отдельного пакета с модулем необходимо следить за тем, чтобы версия предоставляемого модуля была не ниже, чем хотя бы в одном из дистрибутивов ТеХ. В противном случае пакет следует удалить из репозитория.

В деревьях TEXMF не должны присутствовать архитектурно-зависимые файлы. (Под)пакет, содержащий только модуль TEXMF, должен иметь сборочную архитектуру noarch:

BuildArch: noarch

Именование пакетов[править]

Модули TEXMF должны именоваться по следующей схеме:

texmf-<format>-<package>

где <format> — один из форматов TeX (в TDS каталоги TEXMF/tex/<format>/), например latex, plain, xetex, lambda и т.д; <package> — имя пакета (в TDS каталоги TEXMF/tex/<format>/<package>/ либо TEXMF/tex/<format>/{base,misc}/<package>.{sty,cls}).


Если пакет несёт в себе файлы для нескольких разных форматов ТеХ и/или одновременно специфичные и неспецифичные для форматов файлы (generic), допускается упаковка их в единый пакет с именем:

texmf-<package>

Необходимость разбиения такого пакета на подпакеты по отдельным форматам ТеХ остаётся на усмотрение мейнтейнера.

Примечание: generic может также рассматриваться в качестве особого случая формата, т.е. допустимо разбиение на подпакеты texmf-{generic,latex...}-<package>.

Модули TEXMF, содержащие файлы, предназначенные для использования конкретной программой (в TDS каталоги TEXMF/<program>/), именуются по схеме

texmf-<program>

Модули TEXMF, специфичные для конкретного дистрибутива TeX (см. выше), именуются по тем же правилам с заменой префикса texmf- на префикс соответствующего дистрибутива ТеХ. Например,

tetex-<format>-<package>

Зависимости[править]

  • Сборочные
BuildRequires(pre): rpm-build-tex

Все модули TEXMF должны иметь сборочную зависимость на rpm-build-tex. Наличие этого пакета в сборочной среде обеспечивает:

  • наличие необходимых RPM-макросов
Использование некоторых макросов (например, %add_texmf_req_skip) требует установки rpm-build-tex в hasher ещё до начала сборки пакета, поэтому зависимость от него следует указывать в виде BuildRequires(pre).
  • пакет, установивший файлы в TEXMFMAIN автоматически получит зависимость на каталог /usr/share/texmf (её предоставляет пакет

tex-common), что гарантирует наличие необходимой инфраструктуры (каталоги TEXMF-деревьев, файлтриггеры) при установке пакета в систему.

  • Установочные

Применяются правила пункта 2.1 настоящего документа.

Размещение файлов[править]

  • TeX input files

Модули TEXMF размещают файлы, предназначенные для использования ТеХом и сопутствующими программами (TeX input files), в дереве TEXMFMAIN в соответствии со стандартом TDS.

  • Документация

Файлы документации размещаются в подкаталогах TEXMFMAIN/doc в соответствии с TDS — это позволяет утилитам поиска ТеХ-документации (texdoc и пр.) обнаруживать эти файлы.

Допускается размещение файлов документации в каталоге /usr/share/doc/%name-%version, но в этом случае должны быть созданы необходимые символьные ссылки на файлы документации в иерархии TEXMFMAIN/doc, чтобы сделать их доступными для texdoc.

Файлы документации должны иметь содержательные названия, соответствующие тому пакету, который они документируют (не следует называть файлы общими именами manual, index и пр., так как это делает их недоступными для поиска средствами texdoc, использующими только имена файлов, но не каталогов, в которых эти файлы находятся).

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

Конфигурационные файлы пакеты размещают в дереве — TEXMFSYSCONFIG. Конкретные пути для размещения файлов (по типам):

  • конфигурационные файлы для updmapTEXMFSYSCONFIG/updmap.d
  • конфигурационные файлы для настройки переносов — (фрагменты language.def и language.dat) TEXMFSYSCONFIG/language.d
  • конфигурационные файлы для fmtutilTEXMFSYSCONFIG/fmt.d, TEXMFSYSCONFIG/fmtutil
  • прочие конфигурационные файлы — в соответствии с TDS.
  • Владение каталогами

Пакет с модулем TEXMF не должен владеть каталогами, закреплёнными за пакетом tex-common.

# tex-common dirlist for /usr/lib/rpm/files.req
/etc/tex-fonts.d        tex-common
/etc/texmf      tex-common
/etc/texmf/fmt.d        tex-common
/etc/texmf/language.d   tex-common
/etc/texmf/updmap.d     tex-common
/usr/share/texmf        tex-common
/usr/share/texmf/doc    tex-common
/var/cache/texmf        tex-common

Все подкаталоги перечисленных каталогов, устанавливаемые пакетом, должны принадлежать этому пакету.

Регистрация установленного модуля TEXMF[править]

После установки/удаления модуля TEXMF в системе выполняется ряд операций по (де)регистрации файлов в дереве TEXMF (texhash,updmap,fmtutil). Необходимость в этих операциях определяется автоматически в момент установки пакета при помощи файлтриггеров.

В %post и %postun-скриптах пакетов, содержащих модули TEXMF, не должно быть явных вызовов texhash, updmap, fmtutil.

Примеры[править]

Схема именования пакетов: fonts-<тип>-<имя_коллекции>-tex. См. также FontsPolicy

FIXME: сделать шаблон спека

Упаковка дистрибутивов ТеХ[править]

Общие правила[править]

Дистрибутив ТеХ должен предоставлять:

  • /usr/bin/tex и /usr/bin/mf — полностью совместимые с оригнальными программами ТеХ и METAFONT Дональда Кнута
  • /usr/bin/latex
  • /usr/bin/texhash — утилиту для обновления баз ls-R в деревьях TEXMF
  • средства автоматического запуска обновления базы данных доступных векторных шрифтов при удалении/установке сторонними пакетами конфигурационных файлов в каталог TEXMFSYSCONFIG/updmap.d/ (реализуется при помощи rpm-файлтриггера).

Примечание: файлтриггер, обеспечивающий выполнение texhash при установке/удалении файлов в системных деревьях TEXMF FIXME: перечислить, каких именно предоставляется пакетом tex-common. Пакетам дистрибутива TeX не следует вызывать texhash явно в %post(un)-скриптах.

Именование пакетов[править]

Пакеты дистрибутивов ТеХ именуются по схеме:

<distro_name>-<subpackage>

Сборочные зависимости[править]

Дистрибутивы ТеХ должны иметь сборочную зависимость на rpm-build-texmf.

Размещение файлов[править]

  • TeX input files

Файлы, предназначенные для использования ТеХом и сопуствующими программами, дистрибутивы ТеХ размещают в дереве TEXMFDIST.

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

  • Документация

Файлы документации дистрибутивы ТеХ размещают в поддереве TEXMFDIST/doc. Допускается размещение документации в %docdir, в этом случае TEXMFDIST/doc должен быть символьной ссылкой на %docdir.

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

Конфигурационные файлы дистрибутивы ТеХ размещают в дереве TEXMFSYSCONFIG. Применяются правила пункта «Конфигурационные файлы» раздела 3.4 настоящего документа.

Ссылки[править]