9

I'm using Lubuntu 11.10. I have TeXlive 2011 full insttaled.

I've just installed TeXlive 2013 running install-tl script. Everything was fine. I choose the small scheme. No problem.

So according to the guide we should do this:

After the installation finishes, you must add the directory of TeX Live binaries to your PATH—except on Windows, where the installer takes care of this. For example:

PATH=/usr/local/texlive/2013/bin/i386-linux:$PATH

Use the syntax for your shell, your installation directory, and your binary platform name instead of i386-linux.

No problem until here. I changed my $PATH and when executing pdflatex --version on the terminal I got

pdfTeX 3.1415926-2.5-1.40.14 (TeX Live 2013) kpathsea version 6.1.1

But I'd like to know how to take care of the last suggestion:

If you have multiple TeX installations on a given machine, you need to change the search path to switch between them.

How to do that?

  • 1
    If your TL 2011 binaries are in /usr/bin, then calling /usr/bin/pdflatex will run the TL 2011 binary and use the corresponding TeX tree. – egreg Dec 21 '13 at 16:08
  • Are you talking about other programs? for example, when I call texdoc or dvips or even tlmgr? How to fix it? Setting up the $PATH is not enough? – Sigur Dec 21 '13 at 16:13
  • 1
    I don't understand. Setting up $PATH is surely enough for using the most recent release. You can always change it in a shell to use the old release. – egreg Dec 21 '13 at 17:08
  • 3
    I typically install tls in /opt/texlive so the 2013 edition is in the 2013 subfolder. I also have a softlink in /opt/texlive pointing at the current tl edition. Then in the place where I have added the tl path, I refer by edition to the softlink. Thus if I have need to use another tl edition, I only have to change the softlink, I do not have to change the path. – daleif Dec 21 '13 at 17:20
  • 1
    I do something similar. I have 2011, 2012 and 2013 each installed in /usr/local/texlive. Then I have a symbolic link /usr/local/texlive/bin which points to e.g. 2013/bin/x86_64-linux/ and a symbolic link /usr/local/texlive/current which points to e.g. 2013/. I then add /usr/local/texlive/bin to my PATH and use this link and /usr/local/texlive/current in e.g. specifying paths etc. in my editor and other software. To switch, you then just need to change the two symbolic links. Basically, this copies the way MacTeX sets things up. – cfr Dec 21 '13 at 23:12
6

Suppose you have three installations of TeX on your machine, say vanilla TeX Live 2014 and 2015, along with the TeX Live provided by Ubuntu/Debian. The binaries for the three distributions will live in

/usr/local/texlive/2014/bin/<arch>
/usr/local/texlive/2015/bin/<arch>
/usr/bin

where <arch> might be i386-linux, x86_64-linux or another string relative to your machine's hardware architecture.

If you set your PATH variable with

export PATH=/usr/local/texlive/2015/bin/i386-linux:$PATH

in your .profile file or with the method of adding a file in /etc/profile.d (which I recommend), then calling

pdftex --version

from a shell will show

pdfTeX 3.14159265-2.6-1.40.16 (TeX Live 2015)
kpathsea version 6.2.1
[...]

and you're sure that any TeX program will use the tree located in

/usr/local/texlive/2015

This is because of how the kpathsea library, which all TeX Live programs are linked to, works: it sets a number of runtime environment variables based on the directory where the called binary lives in.

You can try seeing this by doing the following distinct calls from the shell (again, use the string for <arch> corresponding to your machine's architecture)

kpsewhich plain.tex
/usr/local/texlive/2014/bin/x86_64-linux/kpsewhich plain.tex
/usr/bin/kpsewhich plain.tex

and you'll receive three different answers:

/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

The program kpsewhich is the public interface to the kpathsea library.

You may get into big problems if your PATH is not set in such a way that the GUI applications see the vanilla TeX Live binary directory before /usr/bin. In my test virtual machines I place a file called texlive.sh in /etc/profile.d containing

export PATH=/opt/texbin:${PATH}

and I make a symbolic link /opt/texbin pointing to the most recent TeX Live I have on the machine, by doing

sudo rm /opt/texbin
sudo ln -s /usr/local/texlive/2015/bin/x86_64-linux /opt/texbin

In this way echo $PATH will show something like

/opt/texbin:...:/usr/bin:...

provided no later file in /etc/profile.d adds something in front of PATH. The important thing is that /opt/texbin is before /usr/bin.

At a new release of TeX Live you just have to reset the symbolic link and do nothing else: the GUI programs and the shell will find the correct binaries. But, as seen above, you can still run the programs in other TeX distributions.

Remember: when you install a vanilla TeX Live, never set the option “Create symlink in system directories” to “Yes”. Be sure it's set to “No”, particularly on GNU/Linux systems, where a distribution provided TeX Live would take over in case of upgrades.

  • This is not wise on all systems. My distro's package manager installs certain packages into /opt so installing stuff manually there is not a great idea. If I wanted to use this method, I'd need to make a package to install the symbolic link. On the other hand, my package manager doesn't manage /usr/local so creating symbolic links in /usr/local/texlive (or elsewhere in /usr/local) works fine. This is especially useful if you follow the recommendation not to install as root, which also means the installation script cannot write symbolic links into your system directories. – cfr Oct 19 '15 at 22:35
  • @cfr Keeping up with all GNU/Linux systems is a battle lost in advance, I'm afraid. – egreg Oct 19 '15 at 22:42
  • Especially where /opt is concerned, I think. That seems to be the place all distros consign things they'd rather not examine too closely. Since the reasons vary, so does what ends up in /opt ;). – cfr Sep 5 '17 at 15:24

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.