summaryrefslogtreecommitdiff
path: root/macros/latex-dev/base/ltnews28.tex
blob: 71bdfc471119708f8f48f46b0bd3f371ad1ee9bd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
% \iffalse meta-comment
%
% Copyright (C) 2017-2020
% The LaTeX3 Project and any individual authors listed elsewhere
% in this file.
%
% This file is part of the LaTeX base system.
% -------------------------------------------
%
% It may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
% of this license or (at your option) any later version.
% The latest version of this license is in
%    http://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions of LaTeX
% version 2008 or later.
%
% This file has the LPPL maintenance status "maintained".
%
% The list of all files belonging to the LaTeX base distribution is
% given in the file `manifest.txt'. See also `legal.txt' for additional
% information.
%
% The list of derived (unpacked) files belonging to the distribution
% and covered by LPPL is defined by the unpacking scripts (with
% extension .ins) which are part of the distribution.
%
% \fi
% Filename: ltnews28.tex
%
% This is issue 28 of LaTeX News.

\documentclass{ltnews}
\usepackage[T1]{fontenc}

\usepackage{lmodern,url,hologo}

\providecommand\acro[1]{\textsc{#1}}
\providecommand\meta[1]{$\langle$\textit{#1}$\rangle$}


\publicationmonth{April}
\publicationyear{2018}

\publicationissue{28}

\begin{document}

\maketitle
\tableofcontents

\setlength\rightskip{0pt plus 3em}

\section{A new home for \LaTeXe{} sources}

In the past the development version of the \LaTeXe{} source files has
been managed in a Subversion source control system with read access
for the public. This way it was possible to download in an emergency
the latest version even before it was released to CTAN and made its
way into the various distributions.

We have recently changed this setup and now manage the sources using
Git and placed the master sources on GitHub at
\begin{quote}
\url{https://github.com/latex3/latex2e}
\end{quote}
where we already store the sources
for \pkg{expl3} and other work. As before, direct write access is restricted
to \LaTeX{} Project Team members, but everything is publicly accessible
including the ability to download, clone (using Git) or checkout
(using SVN). More details are given in~\cite{Mittelbach:TB39-1}.

\section{Bug reports for core \LaTeXe{}}

For more than two decades we used GNATS, an open source bug tracking
system developed by the FSF. While that has served us well in the past
it started to show its age more and more. So as part of this move we
also decided to finally retire the old \LaTeX{} bug database and replace
it with the standard ``Issue Tracker'' available at Github.

The requirements and the workflow for reporting a bug in the core
\LaTeX{} software is documented at
\begin{quote}
\url{https://www.latex-project.org/bugs/}
\end{quote}
and with further details also discussed in~\cite{Mittelbach:TB39-1}.


\section{UTF-8: the new default input encoding}

The first \TeX{} implementations only supported reading 7-bit
\acro{ascii} files---any accented or otherwise ``special'' character
had to be entered using commands, if it could be represented at
all. For example to obtain an ``\"a'' one would enter \verb=\"a=, and to
typeset a ``\ss'' the command \verb=\ss=. Furthermore fonts at that
time had 128 glyphs inside, holding the \acro{ascii} characters, some
accents to build composite glyphs from a letter and an accent, and a
few special symbols such as parentheses, etc.

With 8-bit \TeX{} engines such as \hologo{pdfTeX} this situation changed
somewhat: it was now possible to process 8-bit files, i.e., files that
could encode 256 different characters. However, 256 is still a fairly
small number and with this limitation it is only possible to encode a
few languages and for other languages one would need to change the
encoding (i.e., interpret the character positions 0--255 in a
different way). The first code points 0--127 were essentially normed
(corresponding to \acro{ascii}) while the second half 128--255 would
vary by holding different accented characters to support a certain set
of languages.

Each computer used one of these encodings when storing or interpreting
files and as long as two computers used the same encoding it was
(easily) possible to exchange files between them and have them
interpreted and processed correctly.

But different computers may have used different encodings and given
that a computer file is simply a sequence of bytes with no indication for
which encoding is intended, chaos could easily happen and has
happened. For example, the German word ``Gr\"o\ss e'' (height) entered on a
German keyboard could show up as ``Gr\v T\`ae'' on a different
computer using a different encoding by default.

So in summmary the situation wasn't at all good and it was clear in
the early nineties that \LaTeXe{} (that was being developed to provide
a \LaTeX{} version usable across the world) had to provide a solution
to this issue.

The \LaTeXe{} answer was the introduction of the \package{inputenc}
package~\cite{Mittelbach:Brno95} through which it is possible to
provide support for multiple encodings. It also allows to correctly
process a file written in one encoding on a computer using a different
encoding and even supports documents where the encoding changes
midway.

Since the first release of \LaTeXe{} in 1994, \LaTeX{} documents that
used any characters outside \acro{ascii} in the source (i.e. any
characters in the range of 128--255) were supposed to load
\package{inputenc} and specify in which file encoding they were
written and stored.
%
If the \package{inputenc} package was not loaded then \LaTeX{} used a
``raw'' encoding which essentially took each byte from the input file
and typeset the glyph that happened to be in that position in the
current font---something that sometimes produces the right result but
often enough will not.

In 1992 Ken Thompson and Rob Pike developed the UTF-8 encoding scheme
which enables the encoding of all Unicode characters within 8-bit sequences.
Over time this encoding has gradually taken over the world,
replacing the legacy 8-bit encodings used before. These days all major
computer operating systems use UTF-8 to store their files and it
requires some effort to explicitly store files in one of the legacy
encodings.

As a result, whenever \LaTeX{} users want to use any accented
characters from their keyboard (instead of resorting to \verb=\"a= and
the like) they always have to use
\begin{verbatim}
  \usepackage[utf8]{inputenc}
\end{verbatim}
in the preamble of their documents as otherwise \LaTeX{} will produce
gibberish.

\subsection{The new default}

With this release, the default encoding for \LaTeX\ files has been
changed from the ``fall through raw'' encoding to UTF-8 if used with
classic \TeX\ or \hologo{pdfTeX}. The implementation is essentially
the same as the existing UTF-8 support from
\verb|\usepackage[utf8]{inputenc}|.

The \hologo{LuaTeX} and \hologo{XeTeX} engines always supported the
UTF-8 encoding as their native (and only) input encoding, so with
these engines \package{inputenc} was always a no-op.

This means that with new documents one can assume UTF-8 input and it
is no longer required to always specify
\verb|\usepackage[utf8]{inputenc}|. But if this line is present it
will not hurt either.


\subsection{Compatibility}

For most existing documents this change will be transparent:
\begin{itemize}
\item documents using only \acro{ascii} in the input file and
  accessing accented characters via commands;
\item documents that specified the encoding of their file via an
  option to the \package{inputenc} package and then used 8-bit
  characters in that encoding;
\item documents that already had been stored in UTF-8 (whether or not
  specifying this via \package{inputenc}).
\end{itemize}
Only documents that have been stored in a legacy encoding and used
accented letters from the keyboard \emph{without} loading
\package{inputenc} (relying on the similarities between the input used
and the T1 font encoding) are affected.

These documents will now generate an error that they contain invalid
UTF-8 sequences.  However, such documents may be easily processed by
adding the new command \verb|\UseRawInputEncoding| as the first line
of the file. This will re-instate the previous ``raw'' encoding
default.

\verb|\UseRawInputEncoding| may also be used on the command line to
process existing files without requiring the file to be edited
\begin{verbatim}
  pdflatex '\UseRawInputEncoding \input'  file
\end{verbatim}
will process the file using the previous default encoding.

Possible alternatives are reencoding the file to UTF-8 using a tool
(such as recode or iconv or an editor) or adding the line
\begin{flushleft}
\verb=  \usepackage[=\meta{encoding}\verb=]{inputenc}=
\end{flushleft}
to the preamble specifying the \meta{encoding} that fits the file
encoding.  In many cases this will be \texttt{latin1} or
\texttt{cp1252}. For other encoding names and their meaning see the
\package{inputenc} documentation.

As usual, this change may also be reverted via the more general
\package{latexrelease} package mechanism, by speciying a release date
earlier than this release.


\subsection{BOM: byte order mark handling}

When using Unicode the first bytes of a file may be a, so called, BOM
character (byte order mark) to indicate the byte oder used in the
file. While this is not required with UTF-8 encoded files (where the
byte order is known) it is nevertheless allowed by the standard and
some editors add that byte sequence to the beginning of a file. In the
past such files would have generated a ``Missing begin document''
error or displayed strange characters when loaded at a later stage.

With the addition of UTF-8 support to the kernel it is now possible to
identify and ignore such BOMs characters even before
\verb=\documentclass= so that these issues will no longer be showing
up.



\section[A general rollback concept]
        {A general rollback concept for packages and classes}

  In 2015 a rollback concept for the \LaTeX{} kernel was introduced.
  Providing this feature allowed us to make corrections to the
  software (which more or less didn't happen for nearly two decades)
  while continuing to maintain backward compatibility to the highest
  degree.

  In this release we have now extended this concept to
  the world of packages and classes which was not covered
  initially. As the classes and the extension packages have different
  requirements compared to the kernel, the approach is different (and
  simplified). This should make it easy for package developers to
  apply it to their packages and authors to use when necessary.

  The documentation of this new feature is given in an article
  submitted to TUGboat and also available from our
  website~\cite{Mittelbach:TB39-2}.


\section[Integration of \pkg{remreset} and \pkg{chngcntr} packages]
         {Integration of \pkg{remreset} and \pkg{chngcntr} packages
         into the kernel}

With the optional argument to \cs{newcounter} \LaTeX{} offers to
automatically reset counters when some counter is stepped, e.g.,
stepping a \texttt{chapter} counter resets the \texttt{section}
counter (and recursively all other heading counters). However, what
was until now missing was a way to undo such a link between counters
or to link two counters after they have been defined.

This can be now be done with \cs{counterwithin} and \cs{counterwithout},
respectively. In the past one had to load the \pkg{chngcntr} package
for this. For the programming level we also added
\cs{@removefromreset} as the counterpart of the already existing
\cs{@addtoreset} command. Up to now this was offered by the
\pkg{remreset} package.

\section{Testing for undefined commands}
\LaTeX\ packages often use a test \verb|\@ifundefined| to test if a command
is defined. Unfortunately this had the side effect of \emph{defining}
the command to \verb|\relax| in the case that it had no definition.
 The new release uses a modified definition
(using extra testing possibilities available in \hologo{eTeX}. The new definition
is more natural, however code that was relying on the side effect of the
command being tested being defined if it was previously undefined may have to add
\verb|\let\|\meta{command}\verb|\relax|.


\section{Changes to packages in the tools category}

\subsection{\LaTeX{} table columns with fixed widths}

Frank published a short paper in
TUGboat~\cite{Mittelbach:TB38-2-213} on producing tables that have
columns with fixed widths. The outlined approach using column
specifiers ``\texttt{w}'' and ``\texttt{W}'' has now been integrated
into the \pkg{array} package.

\subsection{Obscure overprinting with \pkg{multicol} fixed}

A rather peculiar bug was reported on StackExchange for
\pkg{multicol}. If the column/page breaking was fully controlled by
the user (through \cs{columnbreak}) instead of letting the environment
do its job and if then more \cs{columnbreak} commands showed up on the
last page then the balancing algorithm was thrown off track.
As a result some parts of the columns did overprint each other.

The fix required a redesign of the output routines used by
\pkg{multicol} and while it ``should'' be transparent in other cases
(and all tests in the regession test suite came out fine) there is the
off-chance that code that hooked into internals of \pkg{multicol}
needs adjustment.


\section{Changes to packages in the amsmath category}

With this release of \LaTeX{} a few minor issues with \pkg{amsmath}
have been corrected.

\subsection{Updated user's guide}

Furthermore, \texttt{amsldoc.pdf}, the AMS user's
guide for the \pkg{amsmath} package~\cite{amsldoc}, has been updated
from version~2.0 to~2.1 to incorporate changes and corrections made
between 2016 and 2018.


\begin{thebibliography}{9}

\bibitem{Mittelbach:TB39-1} Frank Mittelbach:
  \emph{New rules for reporting bugs in the \LaTeX{} core software}.
  In: TUGboat, 39\#1, 2018.
  \url{https://www.latex-project.org/publications/}

\bibitem{Mittelbach:Brno95} Frank Mittelbach:
  \emph{\LaTeXe{} Encoding Interface --- Purpose, concepts, and
   Open Problems}.
  Talk given in Brno June 1995.
  \url{https://www.latex-project.org/publications/}

\bibitem{Mittelbach:TB39-2} Frank Mittelbach:
  \emph{A rollback concept for packages and classes}.
  Submitted to TUGboat.
  \url{https://www.latex-project.org/publications/}

\bibitem{Mittelbach:TB38-2-213} Frank Mittelbach:
  \emph{\LaTeX{} table columns with fixed widths}.
  In: TUGboat, 38\#2, 2017.
  \url{https://www.latex-project.org/publications/}

\bibitem{amsldoc} American Mathematical Society and The \LaTeX3 Project:
  \emph{User's Guide for the \texttt{amsmath} package} (Version 2.1).
  April 2018.
  Available from
  \url{https://www.ctan.org}
  and distributed as part of every \LaTeX{} distribution.

\end{thebibliography}

\end{document}