tl-스위치

tl-스위치

저는 루분투 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

Ubuntu/Debian에서 제공하는 TeX Live와 함께 바닐라 TeX Live 2014 및 2015와 같이 컴퓨터에 TeX가 세 개 설치되어 있다고 가정합니다. 세 가지 배포판에 대한 바이너리는 다음 위치에 있습니다.

/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

이는 모든 TeX Live 프로그램이 연결된 라이브러리가 작동하는 방식 때문입니다 kpathsea. 이는 호출된 바이너리가 있는 디렉터리를 기반으로 여러 런타임 환경 변수를 설정합니다.

쉘에서 다음과 같은 개별 호출을 수행하여 이를 확인할 수 있습니다(다시 말하지만, <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.

PATHGUI 응용 프로그램이 바닐라 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를 설치할 때,절대"시스템 디렉터리에 심볼릭 링크 생성" 옵션을 "예"로 설정합니다. 특히 업그레이드 시 TeX Live가 제공하는 배포판이 대신하게 되는 GNU/Linux 시스템에서는 "No"로 설정되어 있는지 확인하십시오.

답변2

@egreg의 답변에 감사드리며 TL 2017을 사용하는 책을 썼지만 TL 2019를 사용하여 패키지 유지 관리를 원했기 때문에 이를 기반으로 자체 솔루션을 기반으로 했습니다.

그러나 Debian 기반 시스템은 컴파일 방식으로 인해 이 솔루션에서 제대로 작동하지 않으므로 다음 sudo위치에서 솔루션과 BASH 스크립트를 만들었습니다.https://github.com/ServusCarolus/tl-switch

아래에는 이 게시물 현재 저장소에 있는 README.md 파일이 있습니다. 주요 내용은 다음과 같습니다.

  1. TexLive 2019용 넷 설치 프로그램을 다운로드하고 기본값 아래에 루트로 설치했습니다./usr/local/texlive/2019

  2. 나는 루트와 일반 사용자 계정에 대해 이 작업을 수행했습니다.

    sudo mkdir -p /opt/tex/root
    sudo mkdir /opt/tex/charles
    sudo chown charles:charles /opt/tex/charles
    
  3. 나는 루트 .bashrc와 내 사용자를 .profile다음과 같이 수정했습니다.

    if [ -d "/opt/tex/$USER/bin" ] ; then
        PATH="/opt/tex/$USER/bin:$PATH"
    fi
    
  4. 32비트 컴퓨터와 64비트 컴퓨터에 아래 README에 표시된 대로 스크립트를 설치했습니다. 스크립트는 두 바이너리 디렉토리 유형을 모두 찾는 방법을 알고 있습니다.

일반 사용자로서 간단히 tl-switch yes및 를 입력하여 루트가 되지 않고도 TL 배포판을 전환할 수 있습니다 tl-switch no. 새 릴리스가 나타나면 tl-switch yes 2020다음을 통해 전환할 수 있습니다.

위의 답변과 유사하게 스크립트는 사용자의 쓰기 가능한 디렉터리에 있는 바닐라 TL 배포판에 대한 심볼릭 링크를 생성하거나 파괴합니다. /opt/tex그러나 프로세스에서 일부 오류 검사를 수행하여 시간을 절약합니다.

나는 루트를 통해 sudo su동일한 방식으로 배포판을 전환하고 tlmgr일반 사용자의 컨텍스트를 변경하지 않고 업데이트하고 유지 관리를 수행할 수 있습니다. 또한 이 접근 방식은 내가 원하는 만큼의 사용자 및 TL 배포로 확장됩니다.

아래에서는 사람들마다 요구 사항이 다르기 때문에 가능한 다른 솔루션에 대해 설명합니다. 그러나 적어도 이 접근 방식은 sudosecure_path. 좋은 기반과 프레임워크를 제공해 주신 @egreg에게 다시 한 번 감사드립니다.

tl-스위치

/usr/local/texlive에 설치된 바닐라 TeXLive와 Debian, Ubuntu, Mint 등과 같은 시스템에 설치된 TeXLive의 Linux 배포판 버전 간에 컨텍스트를 전환합니다.

스크립트와 설치는 다음 답변을 기반으로 합니다. 다중 TeXlive 설치

주의 사항: 에 대한 한마디sudo

명령 검색 경로 /etc/profile.d이전에 바닐라 TL 경로에 대한 심볼릭 링크를 넣기 위해 쉘 스크립트를 생성하더라도 명령은 기본적으로 링크를 따르지 않습니다./usr/binsudo

문제는 데비안과 친구들 sudosecure_path. 사용자의 선호도에 따라 이 문제에 대한 다양한 해결 방법이 있습니다. 보다: https://stackoverflow.com/questions/257616/why-does-sudo-change-the-path

바닐라 TL을 루트로 설치하고 이 스크립트를 사용할 때, 예를 들어 sudo su실행하기 전에 컨텍스트를 수퍼유저로 전환하려면 다음을 입력해야 합니다 tlmgr. 대안은 다음과 같습니다:

  1. 최소 침습적 경로, 예:

    sudo env PATH=$PATH tlmgr -gui
    
  2. 아래의 공통 그룹 경로를 사용하고 를 사용하지 마십시오 . 그러나 를 통해 설치한 경우와 마찬가지로 sudo디렉토리가 아래에 존재하도록 설정하십시오 ./usr/local/texlive/sudo

  3. sudo위의 링크에서 설명한 것처럼 다양한 방법으로 재정의하세요 . YMMV.

위의 문제에 관계없이 일반적인 사용은 예상대로 작동합니다.

파일을 편집할 때 주의하십시오. 예를 들어 sudo echo "$USER"루트가 아닌 일반 사용자를 가리켜야 합니다. 이는 ~./파일 경로 와 같은 바로가기를 피해야 함을 의미합니다 . 명확한 전체 경로를 사용해야 합니다.

의 GUI 인터페이스는 tlmgr를 통해 실행될 때 루트가 소유한 파일을 생성하지 않지만 를 sudo실행하는 동안 많은 데스크톱 통합 GUI 프로그램을 사용하지 않아야 합니다 sudo. 그렇게 하면 홈 디렉토리 트리에 루트가 소유한 파일이 생성될 수 있습니다. 이는 사용자 프로그램이 정보를 제대로 저장하지 못하게 할 수 있습니다.

전체 컨텍스트 전환을 수행하려면 배포에 따라 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-isms입니다. 다른 배포판(그리고 Debian 기반 배포판도 마찬가지)에는 useraddgroupadd. 해당 명령에 대해서는 매뉴얼 페이지를 참조하십시오. 따라서 대신 다음을 사용합니다.

sudo groupadd texusers
sudo usermod -a -G texusers "$USER"

그런 다음 texusers 그룹의 일부로 TL을 설치할 수 있습니다. 또한보십시오:https://www.tecmint.com/create-a-shared-directory-in-linux/

1단계: 바닐라 TL 설치

바닐라 TL을 설치하려면 다음을 참조하세요.https://www.tug.org/texlive/acquire.html

참고: 바닐라 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와 루트에 넣습니다 .bashrc.

if [ -d "/opt/tex/$USER/bin" ] ; then
    PATH="/opt/tex/$USER/bin:$PATH"
fi

또 다른 접근 방식은 스니펫을 모든 사람의 에 넣은 .bashrc다음 source .bashrc모든 사람의 에 추가하는 것입니다 .profile. 그러면 터미널을 열 때마다 경로 환경이 갱신됩니다. 또는 로그인 셸을 열도록 터미널을 설정할 수도 있습니다.

루트의 를 편집할 때 파일로 .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를 사용하기 전에 컴퓨터를 다시 시작하여 루트 및 사용자 경로가 제대로 업데이트될 수 있도록 하는 것이 좋습니다.

6단계: Vanilla TeXLive로 전환 및 전환

사용자(또는 루트)가 바닐라 TL 2019에 대한 액세스를 활성화하려면 다음을 입력하기만 하면 됩니다.

tl-switch yes

아래에 다른 설치를 지정하려면 /usr/local/texlive다음을 사용하십시오.

tl-switch yes 2018

바닐라 TL을 비활성화하고 배포판 버전을 사용하려면 다음을 입력하면 됩니다.

tl-switch no

세션 도중에 컨텍스트를 변경해도 검색 경로는 변경되지 않습니다. 이 문제를 해결하는 한 가지 방법은 위의 3단계에서 언급되었습니다.

마지막 생각들

sudo su이 방법의 즉각적인 단점은 예를 들어 실행하기 전에 컨텍스트를 수퍼유저로 전환 해야 한다는 것입니다 tlmgr. 그 이점에는 사용자를 서로 격리하고 광범위한 시스템 수정 없이 컨텍스트를 변경할 수 있다는 점이 포함됩니다. 그러나 문제를 방지하려면 로그아웃하고 다시 로그인하기 전에 컨텍스트만 변경해야 합니다.

관련 정보