tl2017 luatex discretionaries
[latex2e.git] / latex2e-20170101 / doc / ltnews22.tex
blobc574f60568ecb0687b29acf8994d5ee630bdc309
1 % \iffalse meta-comment
3 % Copyright 2015
4 % The LaTeX3 Project and any individual authors listed elsewhere
5 % in this file.
7 % This file is part of the LaTeX base system.
8 % -------------------------------------------
10 % It may be distributed and/or modified under the
11 % conditions of the LaTeX Project Public License, either version 1.3c
12 % of this license or (at your option) any later version.
13 % The latest version of this license is in
14 % http://www.latex-project.org/lppl.txt
15 % and version 1.3c or later is part of all distributions of LaTeX
16 % version 2005/12/01 or later.
18 % This file has the LPPL maintenance status "maintained".
20 % The list of all files belonging to the LaTeX base distribution is
21 % given in the file `manifest.txt'. See also `legal.txt' for additional
22 % information.
24 % The list of derived (unpacked) files belonging to the distribution
25 % and covered by LPPL is defined by the unpacking scripts (with
26 % extension .ins) which are part of the distribution.
28 % \fi
29 % Filename: ltnews22.tex
31 % This is issue 22 of LaTeX News.
33 \documentclass{ltnews}
34 \usepackage[T1]{fontenc}
36 \usepackage{lmodern,url,hologo}
38 \publicationmonth{January}
39 \publicationyear{2015}
41 \publicationissue{22}
43 \begin{document}
45 \maketitle
47 \section{New \LaTeXe\ bug-fix policy}
49 \subsection{Introduction}
51 For some years we have supplied bug fixes to the \LaTeXe\ kernel via the
52 \textsf{fixltx2e} package. This
53 kept the kernel stable, but at the expense of meaning that most users did not
54 benefit from bug fixes, and that some compromises
55 which were made to save space in the
56 machines of the time are still affecting most users today.
58 In this release we have started a new update policy. All the fixes previously
59 available via \textsf{fixltx2e} are now enabled \emph{by default} in the
60 format, as are some further extensions for extended \TeX\ engines, \eTeX,
61 \hologo{XeTeX} and \hologo{LuaTeX}. Compatibility and stability are still
62 important considerations, and while most users will not notice these
63 improvements, or will want to benefit from them, a new \textsf{latexrelease}
64 package is provided that will revert all the changes and re-instate the
65 definitions from earlier releases. The package can also be used with older
66 releases to effectively \emph{update} the kernel to be equivalent to this 2015
67 release.
69 A new document, \textsf{latexchanges}, is distributed with the release
70 that documents all the changes to documented commands since the 2014
71 \LaTeX\ release, and will be updated in future releases if further
72 changes have been made.
74 \subsection{The \textsf{latexrelease} package}
76 As noted above a new package is available to manage differences between \LaTeX\
77 releases. If you wish to revert all changes back to the definitions as they
78 were in previous releases you may start your document requesting the \LaTeX{} release from May~2014:
79 \begin{verbatim}
80 \RequirePackage[2014/05/01]{latexrelease}
81 \documentclass{article}
82 \end{verbatim}
83 Conversely if you start a large project now and want to protect yourself
84 against possible future changes, you may start your document
85 \begin{verbatim}
86 \RequirePackage[2015/01/01]{latexrelease}
87 \documentclass{article}
88 \end{verbatim}
89 Then the version of \textsf{latexrelease} distributed with any future \LaTeX\
90 release will revert any changes made in that format, and revert to the
91 definitions as they where at the beginning of 2015.
93 If you wish to share a document using the latest features with a
94 user restricted to using an older
95 format, you may use the form above and make the \textsf{latexrelease} package
96 available on the older installation. The package will then update the format
97 definitions as needed to enable the older format to work as if dated on the date
98 specified in the package option.
100 \subsection{The \cs{IncludeInRelease} command}
102 The mechanism used in the \textsf{latexrelease} package is available for use in
103 package code. If in your \textsf{zzz} package you have
104 \begin{verbatim}
105 \RequirePackage{latexrelease}
106 \IncludeInRelease{2015/06/01}
107 {\zzz}{\zzz definition}
108 \def\zzz......new code
109 \EndIncludeInRelease
110 \IncludeInRelease{0000/00/00}
111 {\zzz}{\zzz definition}
112 \def\zzz....original
113 \EndIncludeInRelease
114 \end{verbatim}
115 then in a document using a format dated 2015/06/01 or later, the ``new code''
116 will be used, and for documents being processed with an older format, the
117 ``original'' code will be used. Note the format date here may be the original
118 format date as shown at the start of every \LaTeX\ run, or a format date
119 specified as a package option to the \textsf{latexrelease} package.
121 So if the document has
122 \begin{verbatim}
123 \RequirePackage[2014/05/01]{latexrelease}
124 \documentclass{article}
125 \usepackage{zzz}
126 \end{verbatim}
127 then it will use the \emph{original} definition of \verb|\zzz| even if
128 processed with the current format, as the format acts as if dated 2014/05/01.
131 \subsection{Limitations of the approach}
133 The new concept provides full backward and forward compatibility for
134 the \LaTeX{} format, i.e., with the help of a current
135 \textsf{latexrelease} package the kernel can emulate all released
136 formats (starting with 2014/06/01\footnote{Patching an older format
137 most likely works too, given that the changes in the past have been
138 minimal, though this isn't guaranteed and hasn't been tested.}).
141 However, this is not necessarily true for all packages.
142 Only if a package makes use of the \cs{IncludeInRelease}
143 functionality will it adjust to the
144 requested \LaTeX{} release date. Initially this will only be true for
145 a few selected packages and in general it may not even be advisable for packages
146 that have their own well-established release cycles and methods.
148 Thus, to regenerate a document with 100\,\% compatible behavior
149 it will still be necessary
150 to archive it together with all its inputs, for example, by archiving
151 the base distribution trees (and any modifications made). However, the
152 fact that a document requests a specific \LaTeX{} release date should
153 help identifying what release tree to use to achieve perfect accuracy.
156 \section{Updates to the kernel}
158 \subsection{Updates incorporated from \textsf{fixltx2e}}
160 The detailed list of changes incorporated from \textsf{fixltx2e} is
161 available in the new \textsf{latexchanges} document that is
162 distributed with this release. The main changes are that $2$-column
163 floats are kept in sequence with one column floats, corrections are
164 made to the \verb|\mark| system to ensure correct page headings in
165 $2$-column documents, several additional commands are made robust.
167 \subsection{\eTeX\ register allocation}
169 \LaTeX\ has traditionally used allocation routines inherited from plain \TeX\
170 that allocated registers in the range $0$--$255$. Almost all distributions have
171 for some years used \eTeX\ based formats (or \hologo{XeTeX} or \hologo{LuaTeX})
172 which have $2^{15}$ registers of each type ($2^{16}$ in the case of
173 \hologo{LuaTeX}). The \textsf{etex} package has been available to provided an
174 allocation mechanism for these extended registers but now the format will by
175 default allocate in a range suitable for the engine being used. The new
176 allocation mechanism is different than the \textsf{etex} package mechanism, and
177 supports \hologo{LuaTeX}'s full range and an allocation mechanism for \LaTeX\
178 floats as described below.
180 On \eTeX\ based engines, an additional command, \verb|\newmarks| is available
181 (as with the \textsf{etex} package) that allocates extended \eTeX\ marks, and
182 similarly if \hologo{XeTeX} is detected a new command
183 \verb|\newXeTeXintercharclass| is available, this is similar to the command
184 previously defined in the \texttt{xelatex.ini} file used to build the
185 \texttt{xelatex} format.
187 \subsection{Additional \LaTeX{} float storage}
189 \LaTeX's float placement algorithm needs to store floats (figures and tables)
190 until it finds a suitable page to output them. It allocates $18$ registers for
191 this storage, but this can often be insufficient.
192 The contributed \textsf{morefloats} package has
193 been available to extend this list; however, it also only allocates from the
194 standard range $0$--$255$ so cannot take advantage of the extended registers.
195 The new allocation mechanism in this release incorporates a new command
196 \verb|\extrafloats|. If you get the error:
197 \mbox{\texttt{Too many unprocessed floats.}}
198 then you can add (say) \verb|\extrafloats{500}| to the document preamble to
199 make many more boxes available to hold floats.
202 \subsection{Built-in support for Unicode engines}
204 The kernel sources now detect the engine being used and adjust definitions
205 accordingly, this reduces the need for the ``\texttt{.ini}'' files used to make
206 the formats to patch definitions defined in \texttt{latex.ltx}.
208 As noted above the format now includes extended allocation routines.
210 The distribution includes a file \textsf{unicode-letters.def} derived from the
211 Unicode Consortium's Unicode Character Data files that details the upper and
212 lower case transformation data for the full Unicode range. This is used to set
213 the \verb|lccode| and \verb|uccode| values if a Unicode engine is being used,
214 rather than the values derived from the T1 font encoding which are used with
215 8-bit engines.
217 Finally \verb|\typein| is modified if \hologo{LuaTeX} is detected
218 such that it works with this engine.
220 \section{l3build}
222 This release has been tested and built using a new build system implemented in
223 \textsf{Lua}, intended to be run on the \textsf{texlua} interpreter distributed
224 with modern \TeX\ distributions. It is already separately available
225 from CTAN. This replaces earlier build systems (based at various times on
226 \textsf{make}, \textsf{cons}, and Windows \textsf{bat} files). It allows the
227 sources to be tested and packaged on a range of platforms (within the team,
228 OS X, Windows, Linux and Cygwin platforms are used). It also allows the
229 format to be tested on \hologo{XeTeX} and \hologo{LuaTeX} as well as the
230 standard \hologo{pdfTeX}/\eTeX\ engines.
232 \section{Hyperlinked documentation and TDS zip files}
234 As well as updating the build system, the team have looked again at exactly
235 what gets released to \textsc{ctan}. Taking inspiration from Heiko Oberdiek's
236 \textsf{latex-tds} bundle, the PDF documentation provided now includes
237 hyperlinks where appropriate. This has been done without modifying the sources
238 such that users without \textsf{hyperref} available can still typeset the
239 documentation using only the core distribution. At the same time, the release
240 now includes ready-to-install TDS-style zip files. This will be of principal
241 interest to \TeX\ system maintainers, but end users with older machines who
242 wish to manually update \LaTeX\ will also benefit.
244 \end{document}