LuaTeX 0.95

This is a modified version of the LuaTeX NEWS file (which is a part of the LuaTeX source code). Original: click.

LuaTeX Release 0.95 was released 2016040415

This is a prerelease of the stable 1.0 version.

  • glues now have gluespec merged in (idem math and insert)
  • registers are still glue specs
  • the spec field in glues are gone
  • extra tex.setglue and tex.setmuglue
  • obsolete dvi related dir fields removed

LuaTeX Release 0.90.0 was released 2016032512

  • mostly small bug fixes
  • a few setters/getters added to the pdf namespace (were in the tex one before)
  • a few patches to the lua interface macros
  • a bit more control over protrusion edges
  • no fundamental changes

Luatex Release 0.89.4 was released 2016031100

Intermediary release. Several bugs fixed.

Luatex Release 0.89.2 was released 2016022700

Intermediary release. Several bugs fixed.

Luatex Release 0.89.0 was released 2016020500

No fundamental changes, just some fixes / improvements (and of course new bugglets).

  • New backend things:
    \pdfvariable pkfixeddpi = integer % > 0 : use only default dpi (so one can do with one high res instance) \pdfvariable ignoreunknownimages = integer % > 0 : ignore missing and inject something empty (to be used with care) and one can do this:
    \edef\foo{\pdfvariable foo}
    \def \oof{foo}
    \ifx\foo\oof don't fool me\fi
    (side effect of no longer aborting on missing, so one implement a catch)

Luatex Release 0.88.0 was released 2016011500

This is a next step upto 0.90 and it has the following changes:

  • mostly small bug fixes
  • a few setters/getters added to the pdf namespace (were in the tex one before)

Luatex beta-0.87.0 was released 2015121700

This is a next step upto 0.90 and it has the following changes:

  • image data is no longer stored in the format (it was fragile anyway)
  • pdf backend data generated when in ini mode is no longer stored in the format
  • (incomplete) \mag support removed from pdf backend (this functionality is kept in dvi mode)
  • there are a couple of improvements that should make luatex run a little bit faster (but of course that depends on the job at hand)
  • some further pending issues / cleanup has been done (but this is not reflected in the interface)
  • there is a new primitive \nospace:
    \nospace=1 do now not inject glue for spaces (not even zero glue)
    \nospace=2 inject zero glue for spaces
  • there are new primitives \hpack, \vpack and \tpack that are like \hbox, \vbox and \vtop but they don't trigger callbacks
  • we no longer keep track of older math character and delimiter definition states, but this should normally go unnoticed
  • from now on only ^^XX, ^^C, ^^^^XXXX and ^^^^^^XXXXXX are supported so no funny odd values (three and five)
  • texio.setescape(0) disables escaping to terminal (a matter of taste)
  • the (current) lc codes are now saved with the (current) language when patterns are loaded unless one hs used \hjcode instead of \lccode; overloading of \hjcodes is possible (but of course goes ahead of hyphenation which is delayed till parbuilding or packaging
  • active characters can now be set with: \letcharcode123=\foo (experimental)
  • there are some experimental new primitives but these will be described when they are stable (currently being tested)
  • there is more backend error reporting and all error messages adn warnings (the non-tex ones) have been normalized
  • of course there are the usual small fixes and additional setters and getters in libraries (see manual)

Luatex beta-0.85.0 was released 2015111400 (5550)

roadmap

The 0.85 release is has a lot of changes. The most important changes between 0.80 and 0.85 are mentioned below. For more information consult the manual.

the backend commands

There is a better separation between front- and backend code. Some of the generic \pdf* commands have been promoted to core primitives (with different names), some have been removes like ximagecolordepth and ximagebbox have been removed and all that are left have been organized differently. The backend is now more abstract and provides three primitives only

\pdfextension *{keyword}* *{optional spec}*
\pdfvariable  *{keyword}*
\pdffeedback  *{keyword}*

The first replaces \pdfannot and alike, the second replaces the variables that can be sused to control behaviour, and the third accesses the read only variables. See luatex-pdf.tex in the context distribution for a plain definition file.

nodes

The boundary, dir and localpar whatsits are now normal nodes. The xforms and ximage whatsits are now a special kind of rule nodes (subtypes 1 and 2) and known as box- and image resources (see manual). Also, empty rules are now a valid subtype (subtype 3) with related commands \nohrule and \novrule.

At the lua end one can now access the fields of a spec subnode directly in the parent, which has the benefit of more control and robust assignments (no need to check for writeability) while we keep the concept of shared glue specs (tex internals). By staying close to traditional TeX the Knuthian documentation still applies in most cases.

The pdf action nodes are now pdf_action whatsit nodes (so no longer a pseudo core node).

You can get the node subtypes with the node.subtypes function which adds a layer of abstraction (foo.subtype = "string" might be added in the future).

expansion

The hz optimization already only supported level 2 optimization, but now has a variant 3 that does only stretch glyphs and not kerns. Pending is a change where we go back to percentages instead of fractions of em.

math

The old/new codepath has been checked and italic correction which is fundamental different between the engines has been (partially) redone.

We now have \mathsurroundskip that replaces mathsurround when it's non zero.

The \mathtoptions (old 1) directive can be used for testing. This primitive is mostly for ourselves and used for development.

The \Umathcharclass, \Umathcharfam and \Umathcharslot primitives can be used to fetch properties of a math character.

The new \Uleft, \Uright and \Umiddle fence operators accept "height {dimen}", "depth {dimen}" and the "noaxis" keyword as well the "exact" keyword for non-fitting ones. There is also \Uvextension. Optionally one can specify a 'class'.

The \Udelimiter[under|over] and \U[under|over]delimiter primitives accept a width as well as left, middle and right keywords (for non fitting ones). There is also \Uhextension.

The \abovewithdelimiter command accepts 'exact' as keyword (before the dimension) which nils the excessive spacing. The normal vgaps still apply.

We have a new fraction primitive \Uskewed with a companion \Uskewedwithdelims. Optional keywords are 'noaxis' and 'exact'.

There is a new directive \mathdisplayskipmode (esp for controlling the greater than 0 below skip check).

With \mathscriptsmode you can fix anchoring of scripts (as needed for chemistry).

The \Umathaccent commands accept a width and fraction argument.

hyhenation

The discretionary command now accept an optional "penalty {number}" specification where the penalty will be stored with the node. Default is hyphenpenalty.

file io

texio.write/write_nl now writes to file if the first argument is a (valid) number reference to a file opened at the tex end; you can now open 128 files from the tex end (0..127) and the system command is no longer executed with 18

lua interface

The tex.{internal variable} is hopefully better now. The tex.get* also can handle the built in registers. Especially prevdepth access should work out ok now.

and ...

As usual there are lots of small fixes, improvements, overhauls, small additions, hopefully all mentioned in the manual.

warning

This version is probably not compatible with the macro package that you use as some engine specific initializations need to take place (\pdf commands) and some node types have been changed. We now have separated pdf backend commands and the only left primitive categories are: core, (tex), etex and luatex, so no more pdftex, omega and umath (where the distinction became to fuzzy). Of course you can still prefix.

Luatex beta-0.81.0 was released 2015100722 (5350)

A couple of primitives are removed, renamed and/or promoted to core (luatex) primitives. Here's a summary. It might demand some adaption in the way macro packages initialize so we will mention them here explicitly in advance. As shown below, a simple way to get backward compatibility is to \let old ones to new ones. So,

Updating to this version also might demand an update in the macro package that you use!

Here we go:

% removed, can be done with callbacks if needed, one can define dimen dummies, like

\newdimen\pdfeachlineheight
\newdimen\pdfeachlinedepth
\newdimen\pdflastlinedepth
\newdimen\pdffirstlineheight
\newdimen\pdfignoreddimen

% removed, were already obsolete, one can \let them

\let\pdftexversion \luatexversion
\let\pdftexrevision\luatexrevision
\let\pdftexbanner  \luatexbanner

% promoted (from pdftex), so pdf prefix gone, one can \let them

\let\pdfnormaldeviate \normaldeviate
\let\pdfuniformdeviate\uniformdeviate
\let\pdfsetrandomseed \setrandomseed
\let\pdfrandomseed    \randomseed

% promoted (from omega), so pdf prefix gone, one can \let them

\let\pdfpagewidth \pagewidth
\let\pdfpageheight\pageheight

% redundant (etex wins over omega), so \font-less ones gone, one can \let them

\let\chardp\fontchardp
\let\charht\fontcharht
\let\charit\fontcharit
\let\charwd\fontcharwd

% promoted (from aleph)

\pagerightoffset
\pagebottomoffset

% promoted (from pdftex)

\ifincsname
\expanded
\quitvmode

% removed (from pdftex), so pdf ones gone, one can \let them

\let\ifpdfabsnum   \ifabsnum
\let\ifpdfabsdim   \ifabsdim
\let\ifpdfprimitive\ifprimitive
\let\pdfprimitive  \primitive

% promoted (from omega)

\pagedir
\bodydir
\pardir
\textdir
\mathdir

% promoted (from aleph)

\boxdir

% promoted (from pdftex)

\lpcode
\rpcode
\efcode
\leftmarginkern
\rightmarginkern

\tagcode
\letterspacefont

% promoted (from pdftex), so pdf ones gone, one can \let them

\let\pdfprotrudechars\protrudechars

\let\pdfadjustspacing\adjustspacing

\let\pdfnoligatures  \ignoreligaturesinfont
\let\pdffontexpand   \expandglyphsinfont

% promoted (from pdftex), so pdf ones gone, one can \let them

\let\pdfsavepos \savepos
\let\pdflastxpos\lastxpos
\let\pdflastypos\lastypos

% on the todo list are:

\pdfoutput         : \outputmode
\pdfmatrix         : will get a normal syntax, no weird { } parsing

\pdfcolorstackinit : might become obsolete
\pdfcolorstack     : might become obsolete

So, apart from a few, the \pdf* primitives now relate to the backend only.

% There is also a new primitive:

\hyphenationmin

This one determines the minimum word length (per language). At the same time we moved the (ex)hyphenpenalties in the disc nodes so you can inject discretionaries with specific penalties.

There will also be an updated manual. Hans

  • new epdf.openMemStream(s,l,docid) to create a pdf from a lightuserdata or string. (experimental, do not use in production.)
  • uniform random generator in mplib is now specific for each numbersystem;
  • too_precise implemented for binary number system;
  • several bug fixes.