
Я использую Lubuntu 11.10. У меня полностью установлен TeXlive 2011.
Я только что установил TeXlive 2013, работающий install-tl
скрипт. Все было хорошо. Я выбрал маленькую схему. Никаких проблем.
Итак, согласногиднам следует сделать это:
После завершения установки необходимо добавить каталог бинарных файлов TeX Live в PATH — за исключением Windows, где об этом позаботится установщик. Например:
PATH=/usr/local/texlive/2013/bin/i386-linux:$PATH
Вместо i386-linux используйте синтаксис вашей оболочки, каталога установки и имени вашей двоичной платформы.
Никаких проблем до сих пор. Я изменил свой $PATH
и при выполнении pdflatex --version
на терминале я получил
pdfTeX 3.1415926-2.5-1.40.14 (TeX Live 2013) kpathsea версия 6.1.1
Но я хотел бы узнать, как поступить с последним предложением:
Если на одном компьютере установлено несколько TeX, вам необходимо изменить путь поиска, чтобы переключаться между ними.
Как это сделать?
решение1
Предположим, у вас на машине есть три установки TeX, скажем, vanilla TeX Live 2014 и 2015, а также TeX Live, предоставляемый Ubuntu/Debian. Бинарники для трех дистрибутивов будут находиться в
/usr/local/texlive/2014/bin/<arch>
/usr/local/texlive/2015/bin/<arch>
/usr/bin
где <arch>
может быть i386-linux
, x86_64-linux
или другая строка, относящаяся к аппаратной архитектуре вашего компьютера.
Если вы зададите PATH
переменную с помощью
export PATH=/usr/local/texlive/2015/bin/i386-linux:$PATH
в вашем .profile
файле или с помощью метода добавления файла /etc/profile.d
(который я рекомендую), а затем вызова
pdftex --version
из оболочки покажет
pdfTeX 3.14159265-2.6-1.40.16 (TeX Live 2015)
kpathsea version 6.2.1
[...]
и вы уверены, что любая программа TeX будет использовать дерево, расположенное в
/usr/local/texlive/2015
Это связано с тем, как kpathsea
работает библиотека, с которой связаны все программы TeX Live: она устанавливает ряд переменных среды выполнения на основе каталога, в котором находится вызываемый двоичный файл.
Вы можете попробовать увидеть это, выполнив следующие отдельные вызовы из оболочки (опять же, используйте строку, <arch>
соответствующую архитектуре вашей машины):
kpsewhich plain.tex
/usr/local/texlive/2014/bin/x86_64-linux/kpsewhich plain.tex
/usr/bin/kpsewhich plain.tex
и вы получите три разных ответа:
/usr/local/texlive/2015/texmf-dist/tex/plain/base/plain.tex
/usr/local/texlive/2014/texmf-dist/tex/plain/base/plain.tex
/usr/share/texlive/texmf-dist/tex/plain/base/plain.tex
Программа kpsewhich
представляет собой публичный интерфейс к kpathsea
библиотеке.
У вас могут возникнуть большие проблемы, если вы PATH
не настроите систему таким образом, чтобы приложения с графическим интерфейсом видели бинарный каталог TeX Live.до /usr/bin
. В моих тестовых виртуальных машинах я размещаю файл с именем , texlive.sh
содержащий/etc/profile.d
export PATH=/opt/texbin:${PATH}
и я создаю символическую ссылку, /opt/texbin
указывающую на самую последнюю версию TeX Live, которая есть у меня на машине, выполнив команду
sudo rm /opt/texbin
sudo ln -s /usr/local/texlive/2015/bin/x86_64-linux /opt/texbin
Таким образом, echo $PATH
будет показано что-то вроде
/opt/texbin:...:/usr/bin:...
при условии, что нет более позднего файла в /etc/profile.d
добавляет что-то перед PATH
. Важно то, что /opt/texbin
это перед /usr/bin
.
В новом выпуске TeX Live вам просто нужно сбросить символическую ссылку и больше ничего не делать: программы GUI и оболочка найдут правильные двоичные файлы. Но, как показано выше, вы по-прежнему можете запускать программы в других дистрибутивах TeX.
Помните: когда вы устанавливаете ванильный TeX Live,никогдаустановите опцию «Создать символическую ссылку в системных каталогах» на «Да». Убедитесь, что она установлена на «Нет», особенно в системах GNU/Linux, где дистрибутив, предоставляемый TeX Live, будет вступать в силу в случае обновлений.
решение2
Я ценю ответ @egreg и основываю свое решение на нем, поскольку я написал книгу, в которой используется TL 2017, но мне хотелось выполнять обслуживание пакетов с использованием TL 2019.
Однако, поскольку системы на базе Debian не будут хорошо работать с этим решением из-за особенностей их компиляции sudo
, я создал решение и скрипт BASH по адресу:https://github.com/ServusCarolus/tl-switch
Ниже приведен файл README.md из репозитория на момент публикации этого поста. Вот TL;DR:
Я загрузил сетевой установщик для TexLive 2019 и установил его как root под настройками по умолчанию:
/usr/local/texlive/2019
Я сделал это для учетной записи root и для моей обычной учетной записи:
sudo mkdir -p /opt/tex/root sudo mkdir /opt/tex/charles sudo chown charles:charles /opt/tex/charles
Я модифицировал root
.bashrc
и своего пользователя.profile
следующим образом:if [ -d "/opt/tex/$USER/bin" ] ; then PATH="/opt/tex/$USER/bin:$PATH" fi
Я установил скрипт, как показано в README ниже, на моей 32-битной машине и моей 64-битной машине. Скрипт знает, как найти оба типа бинарных каталогов.
Как обычный пользователь, я могу переключать дистрибутивы TL, не становясь пользователем root, просто набрав tl-switch yes
и tl-switch no
. Когда появляются новые релизы, я могу переключаться через tl-switch yes 2020
и так далее.
Подобно ответу выше, скрипт либо создает, либо уничтожает символическую ссылку на дистрибутив(ы) vanilla TL в доступном для записи каталоге пользователя в /opt/tex
Но он выполняет некоторую проверку ошибок в процессе и экономит время.
Я становлюсь root через sudo su
и могу переключать дистрибутивы таким же образом, обновлять и проводить обслуживание tlmgr
и делать это без изменения контекста моего обычного пользователя. Более того, этот подход масштабируется до стольких пользователей и дистрибутивов TL, сколько мне может понадобиться.
Ниже я расскажу о других возможных решениях, поскольку у разных людей разные потребности. Но по крайней мере этот подход может помочь избежать автоматического отката к дистрибутивным пакетам из-за sudo
и secure_path
. Еще раз спасибо @egreg за предоставление хорошей основы и фреймворка.
tl-переключатель
Переключение контекста между обычной версией TeXLive, установленной в /usr/local/texlive, и версией TeXLive для дистрибутивов Linux, установленной в таких системах, как Debian, Ubuntu, Mint и т. д.
Скрипт и установка основаны на этих ответах: Несколько установок TeXlive
Предостережение: Несколько слов оsudo
Даже если создать скрипт оболочки, чтобы /etc/profile.d
поместить символическую ссылку на путь vanilla TL перед /usr/bin
путем поиска команд, sudo
команда по умолчанию не будет следовать по ссылке.
Проблема в том, что Debian и его друзья строят sudo
для использования secure_path
. Существуют различные обходные пути для этой проблемы, в зависимости от предпочтений пользователя. Смотрите:
https://stackoverflow.com/questions/257616/why-does-sudo-change-the-path
При установке vanilla TL как root и использовании этого скрипта необходимо ввести, например, sudo su
для переключения контекста на суперпользователя перед запуском tlmgr
. Альтернативы включают:
Наименее инвазивный путь, например:
sudo env PATH=$PATH tlmgr -gui
Используйте общий групповой маршрут ниже и не используйте
sudo
, но задайте каталоги, которые будут существовать/usr/local/texlive/
так же, как если бы вы устанавливали черезsudo
.Переопределить
sudo
различными способами, как обсуждается по ссылке выше. YMMV.
Несмотря на вышеперечисленные проблемы, при обычном использовании устройство работает так, как и ожидалось.
Соблюдайте осторожность при редактировании файлов. Например, sudo echo "$USER"
должно указывать на обычного пользователя, а не на root. Это значит, что следует избегать сокращений, как ~./
в путях к файлам. Следует использовать однозначные, полные пути.
Хотя графический интерфейс пользователя tlmgr
не создает файлы, принадлежащие пользователю root при запуске через sudo
, следует избегать использования многих интегрированных в рабочий стол программ с графическим интерфейсом пользователя во время работы sudo
. Это может привести к созданию файлов, принадлежащих пользователю root, в дереве домашнего каталога. Это может помешать пользовательским программам правильно сохранять информацию.
Чтобы выполнить полное переключение контекста, выполните команду su
или sudo su
, в зависимости от дистрибутива.
Экскурс: Создайте группу
Другой способ избежать проблем sudo
— сделать установку TeXLive доступной для записи всем пользователям TeX. Проблема здесь в том, что может возникнуть хаос, если несколько пользователей вмешаются в установку. Мы включаем это для полноты:
sudo addgroup texusers
sudo addgroup "$USER" texusers
sudo mkdir -p /usr/local/texlive
sudo chgrp -R texusers /usr/local/texlive
sudo chmod -R 2775 /usr/local/texlive
Обратите внимание, что adduser и addgroup являются Debian-измами; в других дистрибутивах (и в дистрибутивах на основе Debian) есть команды useradd
и groupadd
. Смотрите man-страницы для этих команд. Таким образом, вместо этого вы должны использовать:
sudo groupadd texusers
sudo usermod -a -G texusers "$USER"
Затем можно установить TL как часть группы texusers. Смотрите также:https://www.tecmint.com/create-a-shared-directory-in-linux/
Шаг 1: Установка Vanilla TL
Для установки vanilla TL см.:https://www.tug.org/texlive/acquire.html
Примечание: никогда не устанавливайте символические ссылки при установке vanilla TL.
Шаг 2: Создание каталогов
Мы создаем пути для каждого пользователя для создания ссылок каталогов:
sudo mkdir -p /opt/tex/root
sudo mkdir "/opt/tex/$USER"
sudo chown "$USER":$USER" "/opt/tex/$USER"
Мы повторяем последние две строки для каждого пользователя, скорее всего, заменяя каждое имя пользователя на $USER, например:
sudo mkdir /opt/tex/bob
sudo chown bob:bob /opt/tex/bob
Шаг 3: Изменение профилей
Мы помещаем этот фрагмент в папку каждого пользователя .profile
и в папку root .bashrc
:
if [ -d "/opt/tex/$USER/bin" ] ; then
PATH="/opt/tex/$USER/bin:$PATH"
fi
Другой подход заключается в том, чтобы поместить фрагмент в everyone's .bashrc
, а затем добавить source .bashrc
в everyone's .profile
. Это будет обновлять среду path каждый раз, когда кто-то открывает терминал. Или можно настроить терминалы на открытие оболочки входа.
При редактировании root's .bashrc
не забудьте использовать sudo su
или указать /root/.bashrc
в качестве файла. В противном случае sudo nano ~/.bashrc
ссылается на файл пользователя .bashrc
.
Шаг 4: Установка скрипта
Переходим в каталог, куда скачали или клонировали репозиторий, и находим скрипт tl-switch
. Затем вводим:
sudo cp ./tl-switch /usr/local/bin
chmod +x /usr/local/bin/tl-switch
Теперь все пользователи будут иметь доступ к запуску скрипта.
Шаг 5: Перезагрузка
После завершения процедуры установки рекомендуется перезагрузить компьютер перед использованием TeXLive, чтобы пути для root и пользователей могли быть обновлены должным образом.
Шаг 6: Переход на Vanilla TeXLive и обратно
Когда пользователь (или root) хочет разрешить доступ к vanilla TL 2019, ему нужно всего лишь ввести:
tl-switch yes
Чтобы указать другую установку в разделе /usr/local/texlive
, используйте, например:
tl-switch yes 2018
Чтобы отключить vanilla TL и использовать версию дистрибутива, нужно всего лишь ввести:
tl-switch no
Если изменить контекст в середине сеанса, пути поиска не изменятся. Один из способов решения этой проблемы (в некоторой степени) упомянут в шаге 3 выше.
Последние мысли
Непосредственным недостатком этого метода является необходимость, например, sudo su
переключения контекстов на суперпользователя перед запуском tlmgr
. Его преимущества включают изоляцию пользователей друг от друга и возможность менять контексты без значительных изменений системы. Однако контексты следует менять только перед выходом из системы и повторным входом, чтобы избежать проблем.