Herbert Voß translated

I recently stumbled across the fact that UIT have published English translations of several of Herbert Voß’s (La)TeX books. Herbert is a prolific author of TeX support material, perhaps most notable the Math Mode guide. He’s also the current maintainer of PStricks. As you’d therefore expect, the titles available include Typesetting Mathematics with LaTeX and PS Tricks, along with a LaTeX Quick Reference and Typesetting Tables with LaTeX. That’s right: there is a whole book just for setting tables correctly! The translations all seem to have appeared over the last year or so, and I think would be great additions to the bookshelf.

Sorting beamer bugs

The beamer class is rightly regarded as the leading way to produce presentations with LaTeX. A while ago now, there was a need to find a new maintainer, and Vedran Miletić volunteered to take over. At the same time, I’d said I would be willing to at least take on some formal connection, if only to get available patches integrated into the code.

Vedran has fixed a number of bugs in beamer, but the list has been building up. I’ve spoken with Vedran about this, and as I suspected he’s rather busy! There’s also the fact that beamer works for most people most of the time. So for the moment I’m going to be dealing with keeping on top of the bug list.

As a first stage, I’m going through the list, removing anything that is not really a beamer issue (such as passing issues with hyperref) or which I can’t reproduce. I’m also picking up on bugs where there is a patch available: those can go into the code pretty much straight away. The next phase will be to sort bugs that seem to have some obvious fix. This is not so easy as beamer is rather complex internally, and I want to avoid breaking anything.

I’d expect to update CTAN once I’ve had a look through all of the bugs. Probably by the end of this week this first phase should be done, so I’d expect there to be a run of new beamer versions over the coming weeks.

I can’t promise to sort out all of the bugs, but I’d like to at least try to get the list down. If anyone wants to help out (or indeed to take over!) then they are, as usual, welcome to make contact.

ConTeXt in MacTeX 2011

I recently stumbled across an issue with my ConTeXt set up, while looking at a question about Tikz and ConTeXt. While ConTeXt Mark II was fine, I got the rather cryptic error:

mtxrun          | forcing cache reload
resolvers       | resolving | configuration files already identified
resolvers       | resolving | skipping configuration file
'selfautoparent:/texmfcnf.lua' (no content)
resolvers       | resolving | no texmf paths are defined (using TEXMF)
resolvers       | resolving |
mtxrun          | the resolver databases are not present or outdated
resolvers       | resolving | using suffix based filetype 'lua'
resolvers       | resolving | using suffix based filetype 'lua'
resolvers       | resolving | remembered file 'mtx-context.lua'
resolvers       | resolving | using suffix based filetype 'lua'
mtxrun          | unknown script 'context.lua' or 'mtx-context.lua'

when trying to run ConTeXt Mark IV. It seems that this because I installed MacTeX 2011 during pre-testing. A quick e-mail to the ConTeXt mailing list pointed to the file /usr/local/texlive/2011/texmfcnf.lua, which for me read

-- (Public domain.)
-- This texmfcnf.lua file should exist only if you have personal changes
-- from the distributed file; for example, if TEXMFVAR was changed in
-- the installer.
--
return { TEXMFCACHE = '~/Library/texlive/2011/texmf-var' }

It seems that this is defective, as replacing the content with

return {
  content = {
    variables = {
      TEXMFHOME = "~/Library/texmf",
      TEXMFVAR = "~/Library/texlive/2011/texmf-var",
      TEXMFCONFIG = "~/Library/texlive/2011/texmf-config",
    },
  },
}

(as suggested by Mojca Miklavec) sorted the issue straight away.

LaTeX3 Roadmap

One of the questions that comes up from time to time is what the ‘roadmap’ is for LaTeX3 development. While there is not an official plan, I certainly have some ideas on what I’d like to see addressed in a concrete way. This is all rather flexible, but I’ll try to outline some areas for attention.

Short term

The short term is about things which LaTeX3 does not critically depend on, and for which a lot of work is already done. This is very much an ongoing area:  small improvements spread across a range of topics. These items all fit into the concept of ‘LaTeX3 in LaTeX2e’, where this material can be loaded without affecting existing documents.

Floating point expressions

The current floating point implementation in LaTeX3 is based on carrying out assignments, and is pretty simple-minded in the way values are stored. Bruno Le Floch is working on an improved approach, which will allow floating point expressions to be parsed in an expandable way. This will be very handy for doing things like box rotations, but also in the future for Tikz-like drawing capabilities.

Extending key–value concepts

The current l3keys module is based loosely on pgfkeys. One area that is not implemented is the idea of a ‘key path’. Using a path model for setting keys has some advantages, so I’d like to add something like the ability to do

\keys_set:n
  {
    /module .cd ,
    key-a = value ,
    key-b .meta = { key-a = setting , /other-module/key = value }
  }

LaTeX3 niggles

There are a number of issues that have come up as LaTeX3 has seen more use. Fixing these is an ongoing problem, and we should probably look to deal with a few over the coming weeks. The supply is not going to run out!

Documentation improvements

A key aim for LaTeX3 is to document all of the material which is intended for others to use. Getting documentation right is hard, and so another ongoing area is to improve the documentation. We’ve already done a bit of work on this, but it’s certainly not complete.

Medium term

The medium term is about bigger ideas, but ones where there is some code written and we can see that results will appear within the next few months. These areas need discussion as much as writing code. Here, we move away from ‘LaTeX3 in LaTeX2e’ to code which will break existing documents unless they are adapted.

The galley

The galley is the vertical area into which text and other content is places. Galley management in LaTeX2e is basic, and this leads to odd effects with vertical spacing. For example, try

\end{itemize}
\vspace{3 pt}
\begin{itemize}

and see that you get 12 pt of space! We’ve already got three galley implementations, and are now working on a fourth! So the issue here is deciding what is the best approach: the different versions all have different levels of complexity. Hopefully we can resolve these ideas into a single working module within the next couple of months.

Font selection

The ‘New Font Selection Scheme’ in LaTeX2e is a pretty good approach to selecting fonts. So the first task here is more-or-less to convert the code to LaTeX3 syntax. There are then a few items to address, such as how to deal with small caps. Loading fonts also needs to be fitted in here: some combination of fontspec (for XeTeX and LuaTeX) with the existing pdfTeX mechanisms is going to be needed, and it’s a question of how to do this.

Long term

The long-term is again about big ideas, but here ones where the code is not yet written. Some of the concepts are sorted, but beyond that there is work to do.

The output routine

The biggest single challenge for LaTeX3 at an implementation level is getting the output routine right. Here, we have xor, an approach written by Frank Mittelbach. This works, but it’s in need of a serious overhaul as the code has developed over many years. So at the moment it’s rather a mix of LaTeX2e and LaTeX3 stuff. We’ve also got to discuss how the output routine should work, addressing things like flowing text across frames, grid typesetting and so on. This is all hard work.

Beyond the output routine

Once we have all of the above addressed, then we need to look at getting a format created that can actually typeset material. That means building the code level, galley, fonts and output routine into a stand-alone format. The result won’t be impressive, as it won’t have much in the way of mark-up abilities. However, it will allow testing without LaTeX2e. That’s the stage where we’ll need to add things like sectioning, float management, and all of the other stuff that can be done by LaTeX at the moment.

LaTeX3: More use, more work

In the latest LaTeX3 News, the Project announced that a mirror of the development code is available on GitHub. Since then, there has been a definite increase in using expl3 (the LaTeX3 programming language), and we’ve had a number of very good questions on the LaTeX3 mailing list.

The programming layer of LaTeX3 works well in the main, and so it’s very pleasing to see other people starting to pick up on using it. Of course, there are some rough edges, and one result of the questions is that these have to be addressed. At the same time, wider use means that there is a greater need to make sure that the code is stable enough. Getting the balance right between making desirable changes and ensuring that other peoples code does not break is not easy! So there is more work to do with greater use.

At the same time, there is the question of a wider ‘road map’. For the programming layer, there are a few outstanding issues, for example a broader string module and an expandable floating point unit (both under way). However, most of the ‘big issues’ are outside of the base layer: we need support for a new format. There’s quite a lot to talk about there, and I’ll come back to it in another post in a day or so.