TeX on Windows: TeX Live versus MiKTeX revisited

On Windows, users have two main choices of TeX system to install: TeX Live or MiKTeX. I’ve looked at this before a couple of times: first in 2009 then again in 2011. Over the past few years both systems have developed, so it seems like a good time to revisit this. (I know from my logs that this is one of the most popular topics I’ve covered!)

The first thing to say is that for almost all ‘end users’ (with a TeX system on their own PC just for them to use), both options are fine: they’ll probably notice no difference between the two in use. It’s also worth noting that there is a third option: W32TeX. I’ve mentioned this before: it’s popular in the far East and is where the Windows binaries for TeX Live come from. (There’s a close relationship between W32TeX and TeX Live, with W32TeX more ‘focussed’ and expecting more user decisions in installing.)

Assuming you are going for one of the ‘big two’, what is there to think about? For most people, it’s simply:

  • Both MiKTeX and TeX Live include a ‘full’ set of TeX-related binaries, including the engines pdfTeX, XeTeX, LuaTeX and support programs such as BibTeX, Biber, MakeIndex and Xindy.
  • The standard installer for MiKTeX installs ‘just the basics’ and uses on-the-fly installation for anything else you need; the standard install for TeX Live is ‘everything’ (about 4.5 Gb!). Which is right for you will depend on how much space you have: you can of course customise the installation of either system to include more or less of the ‘complete’ set up.
  • MiKTeX has a slightly more flexibly approach to licensing than TeX Live does: there are a small number of LaTeX packages that MiKTeX includes that TeX Live does not. (Probably the most odious example is thesis.)
  • TeX Live has a Unix background so the management GUI looks slightly less ‘standard’ than the MiKTeX one.
  • TeX Live has a strict once-a-year freeze,which means that to update you have to do a fresh install once a year. On the other hand, MiKTeX versions change only when there is a significant change and otherwise ‘roll onward’.

So the decision is likely to come down to whether you want auto-installation of packages. (If you do go for MiKTeX on a one-user PC, choose the ‘Just for me’ installation option: it makes life a lot simpler!)

For more advanced users there are a few more factors you probably want to consider

  • TeX Live was originally developed on Unix and so is available for Linux and on the Mac (and other systems) as well as Windows; MiKTeX is a Windows system so is (more-or-less) Windows-only. So if you want exactly the same set up on Windows and other operating systems, this of course means you need to use TeX Live.
  • Both systems have graphical management tools as well as command line interfaces. They have a lot in common, but they are not identical (in particular, MiKTeX tends to emulate TeX Live command line interfaces, but the reverse is not true).
  • The engine binaries in TeX Live are (almost) never updated other than in the yearly freeze period, meaning that for a given release you know which version of pdfTeX, etc., you’ll have: MiKTeX is more flexible with such updates. (At different times, one or other of the systems can be more ‘up to date’: this is not necessarily predictable! The W32TeX system often has very up-to-date testing binaries.)
  • The two systems differ slightly in handling how local trees are managed (places to add TeX files that are not controlled by the TeX system itself). TeX Live automatically expects <installation root>/texmf-local to hold system-wide ‘local’ additions and <user root>/texmf to hold per-user additions, whereas MiKTeX has no out-of-the box locations, but does make it easier to add and remove them from the command line. MiKTeX also makes it easy to add multiple per-user trees, whereas for TeX Live there’s more of an assumption that all user additions will be added in one place. (This makes it easier in MiKTeX to add/remove local additions by altering a setting in the TeX system rather than deleting files.)
  • TeX Live has a team doing the work; MiKTeX is a one-man project. This cuts both ways: you know exactly who is doing everything in MiKTeX (Christian Schenk), and he’s very fast, but there is more ‘spread’ in TeX Live for the work.
  • For people wanting to step quickly between different versions of TeX system, the fact that TeX Live freezes once a year makes life convenient (I have TeX Live 2009,2010, 2011, 2012, 2013, 2014, 2015 and 2016 installed at present, plus MiKTeX 2.9 of course!) You can switch installations by adjusting the PATH or by choosing the appropriate version from your editor, so have a ‘fall back’ if there is an issue when you update.
  • TeX Live has build-in package backup during maintenance updates.

TeX Live 2013 released

Browsing the TeX Live site today, I see that TeX Live 2013 has been released. There are as usual a few changes to note. My highlights:

  • XeTeX now uses the HarfBuzz shaper rather than the older ICU engine (which is no longer being developed): see my earlier post about this change
  • LuaTeX is updated to Lua 5.2 (the latest Lua release)
  • Microtype now supports protrusion in XeTeX and LuaTeX

I’ve been using the pretest version of TeX Live for a while, and am very happy that all seems to be working just fine. Of course, many people will want the DVD version, which will be a while, but for the downloaders you can grab it now.

TeX Live 2012

The TeX Users Group today released TeX Live 2012, the TeX distribution used by many Unix and Windows users and the basis for MacTeX. This year’s new features are very much evolutionary, with perhaps the highlight being support for multiple repositories (thus making using TLContrib easier to use). As always, TeX Live 2012 has been in pretest for some time, and works very nicely. (If you’ve been using the pretest, there is no need to reinstall.)

TeX Live 2012 pretesting

Pretesting of the next TeX Live is well under way. This is very much evolutionary: no major changes from TL2011. So far I’ve had no surprises, but that does not mean a bit of caution is not needed (I will keep TL2011 installed too!).  Of course, pretesting works best if lots of people get involved, so if you are not doing something critical with documents, or you are comfortable switching between TeX Live installations, then grab a copy and help out.

The TeX Live inclusion policy

TeX Live takes almost all of the material it includes from CTAN, but not everything that goes to CTAN gets into TeX Live. That’s because CTAN will take anything TeX-related, but TeX Live is ‘free as in speech’ and that means that some things are not suitable for inclusion.

Packages are removed from time to time license reasons: they are not actually free, so can’t stay. However,  a few packages have been removed from TeX Live they did not fit in with the policy for inclusion in TeX Live for other reasons. That has caused a bit more surprise, and some questions have come up about it.So I thought it would be useful to summarise the TeX Live situation as I understand it.

The clearest case is material where the license is not ‘free’ (as defined by Debian): anything without a free license cannot go into TeX Live. Perhaps the next clearest case is support for commercial fonts. To use a font with pdfLaTeX, it’s necessary to have the correct support files. Quite often, these are sent to CTAN with a free license, but don’t go into TeX Live. Without the fonts themselves you can’t use the support material, so it’s only practically useful if you are happy to buy the non-free fonts.

Life is more complicated in the cases that have come up recently, where things are less clear cut. AS many readers will know, the PDF specification is nowadays an ISO standard, and there are several PDF viewer implementations with free licenses. However, there are two caveats to this. First, Adobe have published extensions to the ISO version of the PDF specification. Secondly, creating a PDF viewer does not mean that every possible PDF feature is implemented. Why is this relevant to TeX Live? Well, there are several packages on CTAN, for example media9, which use PDF features which are either not part of the ISO standard PDF specification or which are only available in Adobe Reader. These have been removed from TeX Live as the conclusion is that they only have real functionality along with a non-free product. (There seems to be some confusion as to whether any of the free viewers may support at least some of the necessary PDF features: I can’t find a definite answer.)

That judgement is complicated: this case is not the same as the font situation. The PDFs produced by for example media9 are still viewable with free readers, they just don’t have all of the bells and whistles available. It’s also the case that if we look back in time a little, PDFs were only viewable using Adobe Reader, but that did not stop the development of  pdfTeX, hyperref and so on. On the other hand, the TeX Live developers already do a great deal of hard work, and it’s not unreasonable for them to set a policy that they are comfortable with: after all, it’s a labour of love. I think that the policy is reasonably clear, although tracking what is practically implemented, as opposed to what is legally allowed, is rather likely to change over time.


TeX on Windows: MiKTeX or TeX Live

Around two years ago, I wrote a short post comparing MiKTeX and TeX Live for Windows-based TeX users. Looking at my log files, this topic is perhaps the most common search term that brings people here. As such, I think it’s time to revisit the question and bring what I said before up to date.

On Windows, there are two actively-developed TeX systems with similar coverage: MiKTeX and TeX Live. Before I look at the comparison, a reminder that they are not the only choices. W32TeX is popular in the far east, and as well as being a TeX system in its own right is the source of the Windows binaries for TeX Live. There are also the commercial BaKoMa and VTeX systems (although whether anyone can get hold of the supplier of the latter is another question). However, for most users it comes down to a choice between the ‘big two’.

The good news is that there is a lot of similarity between the two systems, so for most users both systems are equally usable. However, there are differences and depending on what you need these might be important.

  • The standard settings install everything for TeX Live, but only a minimal set of packages for MiKTeX. MiKTeX will then install extra packages ‘on the fly’, while TeX Live does not (there is a package to do that in TeX Live, but it’s aimed at Linux). Install-on-the-fly is useful if space is limited, but is more problematic on server set ups. So this is very much a feature who’s usefulness depends on your circumstances. Of course, there is nothing to stop you using MiKTeX and installing everything.
  • The xindy program is only available in TeX Live. For those of you not familiar with it, xindy is an index-processor, and is much more capable of dealing with multi-lingual situations than MakeIndex. If you need xindy, TeX Live really is the way to go.
  • MiKTeX is very much a Windows tool set, while TeX Live comes from a Unix background. This shows up from time to time in the way TeX Live is administered, and the fact that the TeX Live GUI is written based on Perl rather than as a ‘native’ Windows application.
  • As TeX Live is the basis of MacTeX, and is the TeX system for Unix, if you work cross-platform and want an identical system on all of your machines, then TeX Live is the way to go.

TeX Live in Linux distributions

A subject which comes up quite a bit is the age of TeX Live systems shipped with common Linux distributions. While the current ‘vanilla’ release is TeX Live 2011, many Linux distributions use TeX Live 2009, or even TeX Live 2007. This leaves many people wondering why. Now, I’m no expert in this area, but reading the various mailing lists gives me some ideas about the ‘time lag’. Some of this is technical, and some is more conceptual.

The first thing to say is that for many Linux users with a personal system, where they can install vanilla TeX Live each year directly from TUG, it’s probably easiest to simply not worry about this entire area and simply install TeX Live themselves. However, a lot of Linux systems are either multi-user or server set ups, and it’s there that a lot of the following is more important.

The technical reason for the delay seems to be the way binaries are ‘linked’ to standard support libraries. To understand this, you first need to know that most programs use third-party code for standard tasks. So for example pdfTeX uses libraries for both .png and PDF support. In the vanilla TeX Live system (on Linux and other systems) these links are ‘static’, and the appropriate support material is supplied as part of the entire bundle. However, Linux distributions link ‘dynamically’. The advantage of the latter approach is that you only have one version of each library installed, and it is easy to update (for example for security fixes).  So re-bundling TeX Live for Linux means building the binaries using dynamic linking. That of course means doing some work, and this is not trivial.

Size is the second stumbling block. TeX Live is big, as it includes a lot of (La)TeX packages and more importantly all of the documentation, mainly in PDF format. On a modern system, the hit in terms of hard disk space is not usually an issue, but at the same time there’s pressure in the Linux world to keep systems small and only install what is needed. So there is work to do in dividing TeX Live up into the constituent parts, a task that seems pretty difficult to me.

Finally, there is a conceptual point. TeX Live is not a single ‘product’, but is instead a bundle of different items from hundreds of different contributors. So while there is an overall TeX Live version, this does not reflect the status of each constituent part. The Linux packaging approach works best when each package has a small development team and a single version. It’s not really so well adapted to the much more diffuse status of items in TeX Live. So you often see discussions about stability, that probably make sense for a single software package but fits much less well for TeX systems.

As I said above, for single-user systems where the user can update TeX Live each year it’s probably easiest to simply bypass all of this. It’s also worth noting that having TeX Live available is a lot better than the alternative.

TeX Live 2011 released

Today sees the release of TeX Live 2011. As most readers will know, TeX Live is a cross-platform TeX system, and is the basis of the MacTeX distribution for Mac OS X. TeX Live 2011 is very much evolutionary, with only a small list of changes from earlier releases. Perhaps the most notable is that the Biber program is now available for major platforms: it was added to the on-line updates for TeX Live 2010, but this will be the first appearance on the DVD version. I guess that Karl Berrry will now be busy catching up on CTAN updates, so that on-line updating of TeX Live can resume.

Spaces in file names

Spaces in file names are a constant issue for LaTeX users. As many people will know, TeX is not really very happy with spaces, as they are used to delimit the end of input in a lot of low-level macros. This shows up particularly in two areas: graphics and shell escape. For graphics, the excellent grffile package will deal with many of the issues. When using shell escape, the issue is usually that \jobname may be slightly odd. For TeX Live users, that is not so much of a problem as the name is automatically quoted to protect the space. However, MiKTeX does things a bit differently, and uses a star in place of a space. So you end up with

> \example=macro:
l.2 \show\example

which is not exactly helpful. However, it is possible to deal with this, as recently mentioned on TeX.SX. As * cannot normally appear in file names, and \jobname makes all characters have category code 12, a simple approach is to do a quick replacement

\def*{ }
\catcode`\*=12 %

If you want to deal with both TeX Live and MiKTeX, you’d of course need first to test which system is in use (for example using \pdftexbanner).