[luatex] detailed 'diagnostic' of MikTeX/Lua*/fontspec issues

Evan Cooch evan.cooch at gmail.com
Sat Jun 29 20:24:38 CEST 2013

Cross-posting to both the LuaTeX discussion (since the problems I and a 
few others have had *may* be lua* related), and the MikTeX list (or they 
may be unique to MikTeX installs), or perhaps an interesting/unfortunate 
interaction of the two.  Apologies for the breach of cross-post 
etiquette, but I have my (stated) reasons. Long post, but wanted to 
document everything -- basic motivation is that recent updates to MikTeX 
install cause no shortage of problems for compiles with lua*, at least 
for some folks (regular LaTeX compilation fine).  If you want to save 
time, jump down to 'step 12'. This is where the problem lies -- and it 
is directly related to 'fontspec'.

Step 1\ take one of my laptops - Windows 7 Pro, fully patched.  Has 
Adobe Pro 10 instaqlled (the full package, not simply the reader). Do a 
complete uninstall of MikTeX 2.9. Clean out *everything* -- all traces, 
from c:\program files (x86), registry, c:\users appdata - the whole 
works.  Run CCleaner to even clobber any temp files that might be 
lingering. Heck, even defragged the drive while I was at it. ;-)

Step 2\ Reboot machine. Download fresh copy of MikTeX installer 
(downloaded 6-29-2013) - although the machine is running 64-bit Windows, 
I use the 32-bit installer (never had a reason not to). Now, on this 
machine, I am a user and admin -- meaning, I have full administrative 

Step 3\ start the installer. Accept the MikTeX copying conditions. Now, 
the step which seems to generate a far bit of 'debate' amongst MikTeX 
users - install for anyone who uses the computer, or only for egc. In 
all the other times I've installed MikTeX, over *many* years, I've never 
done other than selecty install for 'anyone' - even though on ~90% of 
the machines I am the only user.  Install to default C:\Program Files 
(x86)\MikTeX 2.9.  Install proceeds entirely without incident.

Step 4\   Now for a MWE, use the following:


         \setmathfont{XITS Math}


      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent 
in tincidunt nulla. Donec quis laoreet est. Aenean vitae est felis, a 
venenatis magna. Mauris semper bibendum vulputate. Etiam bibendum quam 
ut erat rutrum consequat.



To test compile with *regular* LaTeX, (or, to text LuaLaTeX without 
fontspec) I simply comment out the following:

\setmathfont{XITS Math}

Step 5\ After the basic MikTeX install, I install the following packages 
(needed by the MWE, above):  XITS fonts, unicode-math

Otherwise, nothing more than the basic MikTeX install (i.e., for now, I 
don't add any other packages).  Now, one nuance is that XITS gets 
installed in

C:\Program Files (x86)\MiKTeX 2.9\fonts\opentype\public\xits

For a variety of reasons, luaotfload doesn't 'find' fonts in TEXMF, so 
you need to hack lualibs-dir.lua, as per


Basically, you add

P("(")  / "%%(" +
P(")")  / "%%)" +

to the file, around line 95. The brackets will be escaped and therefore 
the fonts in the "program files (x86)/miktex" folder can be found.I've 
had to do this on *all* my other machines with MikTeX (6 different 
machines). Has worked perfectly on all of them.

Step 6\ now, ready for first compile of MWE.  I have found in the past 
that for a first compile of anything with LuaLaTeX, I need to do the 
compile from the command line. My normal editor is WinEdt, and for some 
reason, some of the things (other packages) the LuaLaTeX needs don't 
install 'on the fly' from within WinEdt. This isn't an issue. The MWE is 
trivial, and doing everything from the CLI eliminates weird editor 
things from the larger mix of things. So, CLI it is.

Start with simple LaTeX compile of the MW, after commenting out the 
'fontspec stuff' (see step 4, above). Works fine. DVI is created. Looks 
just like expected - cmr fonts, equation rendere3d properly etc.

Now, do a LuaLaTex compile on the MWE, again after commenting out the 
'fontspec stuff'.  Again, no problems. The PDF is created, and looks 
exactly like it should.

Now, for the big test -- uncomment the 'fontspec stuff' -- in other 
words, try to pull in XITS fonts for text and maths.  Run

lualatex mwe.tex from CLI

MikTeX asks to install expl3.sty   -- done.

Next, MikteX asks for xparse.sty  -- done

Finally, MikTeX asks for t3enc.def  -- done

(Note for MikTeX users: it only asks for these installs once, obviously, 
but if you try this through WinEdt, it fails -- hence CLI compile first 

Now --- luaotfload starts grinding away -- first says Font names 
database not found (of course, since not run before), so it proceeds to 
create a new one -- scanning TEXMF and OS fonts.

Grinds along a bit, then MikTeX asks to install  filehook.sty -- done.  
Then it asks for lualatex-math.sty -- done.  Next, etoolbox.sty -- 
done.  And finally, supp-pdf.sty -- done.

Finally, complete -- PDF created, and looks perfect -- XITS fonts, text 
and equation perfect.

So -- CONCLUSION (1) -- at this point, the current MikTeX installer, and 
files contained within, work perfectly.

Now, for the 'problematic' updates.

step 7\  fire up the update utility for MikTeX (I'll use the GUI-based 
version, rather than mpm from CLI).  Because I installed for 'everyone', 
I have 2 choices: update/Admin, or update/user. I use the Admin flavour. 
After a few moments, it responds telling me that there are *lots* of 
updates, but some are 'hard-wired' (i.e., must be done before you can do 
any other updates). These include


(and, importantly for this 'story')

miktex-lua51-bin-2.9 (which is marked for removal)
miktex-lua52-bin-2.9 (which will be installed in its place)

I go ahead and accept these updates.

step 8\ now, from what I've read, there have been issues/concerns for 
some folks for having to rebuild lua* .fmt files. I can either do that 
using the GUI settings tool - if I select the 'formats' tab, and 
re-build lualatex and luatex formats (which are 'excluded' by default 
from the one-click rebuild formats), or I can jump to the CLI and run 
initexmf --dump=lualatex (or initexmf --dump=luatex). Since there should 
be no harm at any point in rebuilding .fmt files, I'll do it now, using 
the CLI.  No error messages reported.

step 9\ now, try the same MWE compile sequence -- first, lualatex 
compile of MWE after commenting out the 'fontspec stuff'.  Works 
perfectly (yes!)

Now...the big fish. lualatex compile of the MWE *with* the 'fontspec 
stuff'.  MikTeX starts off, then asks to install etex.sty -- ty to, but 
it complains that etex.sty is not found. I've seen this before, so I 
jump out to the MikteX GUI-based package manager.  For MikTeX users, you 
need to look for MikTeX-etex-base. There are two packages showing -- one 
labelled miktex-etex=base-2.9 (which is a newer build), so I select that 
one to install.  Then, back out to cmd window to re-try lualatex compile 
of MWE

lualatex mwe.tex

and....perfect! (yes!) And, it works if I try the compile from within 
WinEdt, too (yes x 10!)

So -- CONCLUSION (2) -- at this point, the current MikTeX installer, and 
files contained within, work perfectly, even after the updates to basic 
lmiktex-lua52-bin-2.9  files

step 10\ now, consider the rest of the 'updates'. This might be where 
things get interesting. Loking at the list of updates, there are a bunch 
which are related to 'the compile proces using lua*':


Since the updates all are likely to interact with each other, I'll 
simply install all of them. Now, I anticipate that I'll need to 
re-implement the escape tweak noted in step 5 (above), but that is 
trivial. So, install the updates, and then because in inherent anal 
compulsiveness, reboot the machine.

step 11\ the big moment. Start with lualatex compile of MWE *without* 
the 'fontspec stuff'.

Uh-oh.   (Fatal format file error; I'm stymied).

OK -- so I need to recreate the lualatex .fmt file (I think...).  I 
re-run initexmf --dump=lualatex.  Takes a lot longer to run this time, 
but no reported errors.

Try the lualatex compile again -- success! PDF created. Looks exactly as 
it should (cmr fonts, text and equation fine).

step 12\ Now, before I try the compile of the MWE *with* the 'fontspc 
stuff', I jump out to have a look at lualibs-dir.lua, which I suspect 
has been over-written by a 'new' version.  Suspicion confirmed -- and, 
the lines that need to be tweaked/patched are now further down in the 
file (around line 153).  So, make the tweak...and try the lualatex 
compile of MWE with 'fontspec stuff' included.

And, here is where it all fails -- get the following error message:

luaotfload | db: Font names database no found, generating a new one.
   Ths can take sseveral minutes; please be patient.
lualatex: Unexpected condition.

So, to pursue further, I try running
luaotfload-tool --update --force --verbose=5

But, this fails too. Terminates with 'unexpected condition'. But, I 
think this is spurious since it bombs when it gets to my working 
directory. It seems to grind through TEXMF and OS just fine.

But, if I try luaotfload-tool -vv, it doesn't actually print out any 
loaded fonts.  luaotfload-tool -f doesn't do anything either.

Thinking my 'tweak' to lualibs-dir.lua might be the culprit, I revert to 
the original file.

Alas, no happiness.  I even tried some fonts that are in the OS font 
subdirectory -- makes no difference.

After 3-4 other 'experiments', I conclude...

So -- final CONCLUSION (3) -- everything works, updates and all, so long 
as you don't use fontspec.  Further, luaotfload-tool is either not 
working, or isn't playing nice with something.  Regardless, something 
broken, somewhere.

Which is a shame, since quite frankly, the only reason I and a lot of 
folks use lualatex at all is...fontspec. ;-)

Again, thanks for indulging a *very* long post. If there are particular 
folks who should see this who aren't on either the luatex.org or MikteX 
lists, please forward their way.

Thanks again, and I'm happy to be told of a single CLI command that will 
fix everything, even if it make me looks foolish (as I get older, I'm 
increasingly comfortable with public acknowledgement of what things I 
don't know...).

More information about the luatex mailing list