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
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
|
% \iffalse meta-comment
%
% Copyright (C) 2015-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: latexchanges.tex
\NeedsTeXFormat{LaTeX2e}
\documentclass{ltxguide}
\usepackage[T1]{fontenc}
\usepackage{url}
\title{Changes to the \LaTeXe{} format}
\author{\copyright~Copyright 2015--2020, \LaTeX3 Project Team.\\
All rights reserved.}
\date{2020-02-02}
% a few commands from doc
\newcommand\Lpack[1]{\mbox{\textsf{#1}}}
\newcommand\DescribeMacro[1]{\texttt{\string#1}}
\makeatletter % -- provide command introduced in new release
% so this typesets with an old format
\DeclareTextCommandDefault\textcommabelow[1]
{\hmode@bgroup\ooalign{\null#1\crcr\hidewidth\raise-.31ex
\hbox{\check@mathfonts\fontsize\ssf@size\z@
\math@fontsfalse\selectfont,}\hidewidth}\egroup}
\makeatother
\ifx\href\undefined
\newcommand\ghissue[1]{github #1}
\newcommand\gnatsissue[1]{gnats #1}
\newcommand\ltnewsissue[1]{\LaTeX\ News~#1}
\newcommand\sxanswer[1]{\url{https://tex.stackexchange.com\slash a\slash #1}}
\newcommand\sxquestion[1]{\url{https://tex.stackexchange.com\slash q\slash #1}}
\else
\newcommand\ghissue[1]{%
\href{https://github.com/latex3/latex2e/issues/#1}{github #1}}
\newcommand\gnatsissue[1]{%
\href{https://www.latex-project.org/cgi-bin/ltxbugs2html?pr=latex/#1}{gnats #1}}
\newcommand\ltnewsissue[1]{%
\href{https://www.latex-project.org/news/latex2e-news/ltnews#1.pdf}{\LaTeX\ News~#1}}
\newcommand\sxanswer[1]{%
\url{https://tex.stackexchange.com/a/#1}}
\newcommand\sxquestion[1]{%
\url{https://tex.stackexchange.com/q/#1}}
\fi
\begin{document}
\maketitle
\tableofcontents
\newpage
\section{Introduction}
This document describes changes that were made to the
\LaTeX\ format since the 2014-05-01 \LaTeX\ releases.
As announced in \ltnewsissue{22}, the 2015 \LaTeX{} release adopts a new
policy. Improvements and bug fixes will be made to the format sources,
with the \Lpack{latexrelease} package being available to revert
changes to use definitions from an earlier format.
As a summary of changes for a main release will always be available in
\LaTeX\ News, detailed changes are not repeated in this document,
but changes in any patch releases will be listed in more
detail here.
More detailed change logs are available as
\texttt{changes.txt} in the base distribution, and full code
differences may be browsed via the code repository on GitHub
see for example
\url{https://github.com/latex3/latex2e/commits/master}.
\section{Changes introduced in 2020-02-02}
Major enhancements in this release include pre-loading \Lpack{expl3}
to improve startup times, especially with Lua\TeX\ and Xe\TeX, and
extra features in the font selection mechanism. Please see
\ltnewsissue{31} for an overview of the new features and the change
log in \texttt{changelog.txt} for a more detailed list of individual
changes.
\section{Changes introduced in 2019-10-01 patch~3}
Further fixes to the handling of filenames, expand macros (and
\verb|\jobname| \emph{before} removing \verb|"|, not after.
\section{Changes introduced in 2019-10-01 patch~2}
Further fixes to the handling of filenames, \ghissue{204}: non-ascii
filenames and filenames with spaces and multiple dots should now work
in \verb|\includegraphics|.
Reclassify some luatex callbacks. Other fixes for Issues raised:
\ghissue{198}, \ghissue{201}, \ghissue{202}, \ghissue{205}.
\section{Changes introduced in 2019-10-01 patch~1}
Adjustments to \verb|\set@curr@file|, and \verb|\@extracolsep|.
Added missing \verb=\else= branch in \texttt{nfssfont} so that
\verb=\action= is executed if provided.
\section{Changes introduced in 2019-10-01}
Introduced \LaTeX\texttt{-dev} formats for pre testing future \LaTeX{}
releases. Now there's a \texttt{latex-base-dev} package on CTAN which
contains a pre-release of the \LaTeXe{} kernel and both \TeX Live and
MiK\TeX{} include the standard \LaTeX{} executables (\texttt{pdflatex},
\texttt{lualatex}, etc.) with \texttt{-dev} appended, which use the
pre-release format.
The handling of Unicode characters was improved by making them safe
inside \verb|\ref|s and \verb|\label|s, by using \verb|\ifincsname|
to make these characters safe in these contexts (\ghissue{95}).
In line with the better handling of Unicode characters, file names
can now contain any Unicode character plus spaces, as these cases
are now correctly handled by the kernel.
An optional argument was added to the \texttt{filecontents} environment,
to which a comma-separated list of options can be given. The options
include \texttt{overwrite} (or \texttt{force}), \texttt{nosearch}, and
\texttt{noheader} (which has the same effect as the starred form of the
environment). The environment is now allowed anywhere in the document.
A plethora of \LaTeX{} commands was made robust so that fewer
\verb|\protect| are needed when using some commands in moving arguments.
There are a few border cases where it's tricker to make the command
robust or where it's not worth it to do so, but most reasonable use
cases are covered. The most notable change was \verb|\begin| and
\verb|\end|, which are now robust and won't break when used in moving
arguments.
An extra \verb|\hskip 1sp| was added to \verb|c|-column table cells to
protect against the presence of an \verb|\unskip| in the table cell
(\ghissue{102}).
\texttt{U+012F} which is ``i with ogonek'' should produce an
``i'' and not a ``dotless i''. This has been corrected
(\ghissue{122}).
The Unicode slots \texttt{27E8} and \texttt{27E9} have been mapped to
\verb|textlangle| and \verb|textrangle| which is the recommended mapping
(\ghissue{110}).
Basic ligatures (ff, fi, fl, ffi, ffl, ft, st) can now be input as a
single unicode character in pdf\TeX, which is useful when copy-pasting
(\ghissue{154}).
\verb|\InputIfFileExists{foo}{\input{bar}}{}|
did not load the files \texttt{foo.tex} and \texttt{bar.tex} but
would load \texttt{bar.tex} twice. This has been corrected (\ghissue{109}).
The \textsf{fncylab} and \textsf{varioref} packages changed \LaTeX's internal
counter prefix commands \verb|p@...| so that they would take the counter
value as an argument instead of just acting as a prefix to them. These
packages also provided the \verb|\labelformat| macro to change the prefix
macro and \verb|\Ref| so that using counters defined that way in the
beginning of sentences would have the proper capitalisation. These features
were added to the \LaTeXe{} kernel.
The kernel now says ``Trying to load\ldots''
instead of ``Try loading \ldots'' in one of its informal
messages to match style of similar messages (\ghissue{107}).
\verb|\DeclareErrorFont| would change the font size to 10\,pt which, when
used in the wrong place, would make incorrect font settings in the document.
This has now been fixed (\gnatsissue{4399}).
The default action of the file \texttt{nfssfont.tex} was set to produce a
font table, so that one can simply hit enter instead of having to write
\verb=\table\bye=.
The \LaTeX{} kernel now provides dummy (empty) definitions for the two
commands \verb|\conditionally@traceoff| and
\verb|\conditionally@traceon| from the \texttt{trace} package so they
can be used by package developers without worrying about them being
defined or not (\ghissue{164}).
\section{Changes introduced in 2018-12-01}
Further additions to the characters supported by default in UTF-8.
The commands \verb|\guillemetleft| and \verb|\guillemetright| are
provided as alias for the names based on the Adobe font names
(\ghissue{65}).
The use of potrusion in tables of contents is suppressed by default,
see \sxquestion{172785}.
The handling of visible space in verbation was adjusted for
\ghissue{69} and \ghissue{70}.
Spaces are removed from the argument passed to BiBTeX, \ghissue{88}.
New commands \verb|\Hwithstroke| and \verb|\hwithstroke| added to T1 encoding support.
The internal box structure for floats is adjusted to preserve box
levels of split hyperlinks, avoiding a fatal pdftex error. \ghissue{94}.
\section{Changes introduced in 2018-04-01 patch~5}
Improved support for non ASCII filenames on the commandline on
filesystems using legacy encodings.
Adjusted the new package rollback code so that some edge cases where rollback
can not be guaranteed become a warning not an error.
\section{Changes introduced in 2018-04-01 patch~4}
No changes to the format, but \texttt{docstrip} adjusted so that non-ASCII
\texttt{.ins} files work with the new UTF-8 defaults.
\section{Changes introduced in 2018-04-01 patch~3}
Additional adjustments for GitHub issues \ghissue{34} and \ghissue{38}, adjustment to the
location of some documentation files, such as \texttt{source2e.tex} to
be installed in the documentation sources not the default \TeX\ input
tree.
\section{Changes introduced in 2018-04-01 patch~2}
Additional adjustments for GitHub issues \ghissue{32} and \ghissue{33}.
\section{Changes introduced in 2018-04-01 patch~1}
Make \verb|\UseRawInputEncoding| and \Lpack{latexrelease} reset \verb|\inputencodingname|
when disabling the UTF-8 input handling.
\section{Changes introduced in 2018-04-01}
Further details of changes at this release are given in \ltnewsissue{28}, but in brief
the main changes are as listed below.
The default encoding for files has been changed to UTF-8.
A new possibility to refer to older versions of packages has been added.
New commands previously available in \Lpack{remreset} and
\Lpack{chngcntr} packages for controlling counters have been added.
The definition of \verb|\@ifundefined| has been refined to use the e-\TeX \verb|\ifcsname|
primitive when available, and to avoid defining the command being tested to be \verb|\relax|
in the case that it was previously undefined.
\section{Changes introduced in 2017-04-15}
Optionally, \LaTeX{} format and package dates may use ISO style dates with
\texttt{-} rather than \texttt{/}.
For Unicode \TeX{}s, made further adjustments to the composite accent
code in \texttt{tuenc.def}, and further updates tracking changes in
Lua\TeX, now at 1.04.
Previously defining an encoding-specific composite with an undeclared
accent (or an accent declared later) gave no error, but did nothing useful.
\LaTeX\ will now detect this and give the accent comamnd a default definition
as an error, allowing the declared composite to work as intended.
The definition of \verb|\-| is adjusted to match the comments in
\gnatsissue{3855} to accomodate non standard settings of \verb|\hyphenchar|.
In parboxes and similar settings, \verb|\lineskiplimit| is now
reset (to the existing default value, \verb|\normallineskiplimit|).
See \sxanswer{359934}.
The code for \verb|\newpage| has been adjusted to add a test on the value of
\verb|\prevdepth| so that the depth of the last line is preserved in
forced page breaks.
\section{Changes introduced in 2017/01/01 patch~3}
Emergency patch to correct a typo in a change introduced in patch~2.
\section{Changes introduced in 2017/01/01 patch~2}
More adjustments for TU encoding, allowing for characters missing in
common system fonts. Additional \texttt{fd} files
for Latin Modern variants are included in the documented sources.
\section{Changes introduced in 2017/01/01 patch~1}
Fixes to TU encoding definitions for Lua\TeX\ and Xe\TeX.
\section{Changes introduced in 2017/01/01}
A new test is added during format making that e\TeX\ extensions are
available. As noted in \LaTeX\ news, e\TeX\ will now be required to
build \LaTeX.
Further updates tracking changes for Lua\TeX~1.0.
The definition of \verb|\showhyphens| is changed in formats built
with Xe\TeX, as the original version, inherited from plain \TeX\ does
not work with Xe-\TeX.
Changes to the default encoding used by Lua\TeX\ and Xe\TeX\ formats to
be TU (Unicode) rather than OT1 (7 bit legacy \TeX\ encoding).
\section{Changes introduced in 2016/03/31 patch~3}
Fixes to \verb|\newinsert| and \verb|\extrafloats|.
\section{Changes introduced in 2016/03/31 patch~2}
Adjustments to \verb|\c{g}| in OT1 encoding.
\section{Changes introduced in 2016/03/31 patch~1}
Adjust the upper limit for Character Class allocation in Xe-\TeX\ to
4096 to match a change in Xe-\TeX.
\section{Changes introduced in 2016/03/31}
Modify picture mode as suggested in latex/4452 to avoid leaders of
almost zero length.
Modify the checks in \verb|\DeclareMathSymbol| and related commands
so that they do not give errors with new Lua\TeX\ releases.
\section{Changes introduced in 2016/02/01}
Adjustments to Lua\TeX\ support to match changes to the Lua\TeX\ engine,
and to the character class allocation in Xe\TeX.
Load Unicode data from new generic \texttt{unicode-data} distribution.
\section{Changes introduced in 2015/10/01 patch~2}
This release fixes the behaviour of the allocation mechanism if the switch
from the standard to extended pool takes place within a group.
\section{Changes introduced in 2015/10/01 patch~1}
This release allows \Lpack{latexrelease} to revert the
Lua\TeX{}-specific
changes, in particular fixing an incorrect date in part of the mechanism and
adding a method to disable callback management entirely.
\section{Changes introduced in \LaTeX\ 2015/10/01}
\subsection{LuaTeX allocation}
Almost all changes at this release relate to incorporating allocation macros for luatex into the format
as done for etex and xetex in 2015/01/01. For details see |ltluatex.dtx| or \ltnewsissue{22}.
|ltluatex.dtx| now forms a new chapter (N) in the documented sources, |source2e.tex|.
\subsection{Increased number of floats}
The default float list has been increased from 18 to 52 registers if
e\TeX\ is available.
The list can be increased further using |\extrafloats| however this
default allocation uses classic registers below 256 so the registers are
also available for |\newinsert| as described below.
\subsection{Improved \texttt{\textbackslash newinsert}}
The command |\newinsert| has been extended to take registers from the lists of free float
registers once the classic register allocation is used up. This should make it highly unlikely
to get ``no room'' errors on register allocation assuming the format is used with
an e-\TeX\ based \TeX\ engine.
\subsection{New accent, \texttt{\textbackslash textcommabelow} (pr/4414)}
The command |\textcommabelow| has been added. This is mainly intended for Romanian letters
\textcommabelow{S}\,\textcommabelow{s}\,\textcommabelow{T}\,\textcommabelow{t}.
\subsection{Unicode 8}
The file |unicode-letters.def| used to initialise character data in
Unicode \TeX\ variants has been regenerated from data files updated
to Unicode~8.
\section{Changes introduced in 2015/01/01 patch~2}
There were no changes to the format at this release, but the sources were fixed to fix bug latex/4434
affecting bottom float positioning if the \Lpack{latexrelease} package was used.
\section{Changes introduced in 2015/01/01 patch~1}
This release re-introduces the ``Patch Level'' scheme for identifying
releases between main ``dated'' releases. Early \LaTeXe\ releases
included a mechanism whereby updates could be provided by a
\emph{patch
file}. This was mainly intended to allow updates to be made without
downloading the full sources again, which was an important
consideration with download speeds and costs at the time.
The new mechanism incorporates any changes directly into the sources,
but having the patch level identified in the banner allows the
\LaTeX\ release to be identified, even if (as in this case) most of the
changes do not affect the format but affect other base packages such
as \Lpack{latexrelease} and \Lpack{inputenc}. The patch level is shown
in the banner at the start of the job, but does not affect the date
handling of the |\IncludeInRelease| mechanism.
Apart from re-arranging the version banner, the only change in the
format is that |\newtoks| was accidentally defined twice, using the
old and new allocation scheme described in Section \ref{e@alloc}.
The old definition is now only in the \Lpack{latexrelease} package,
for use when emulating old formats.
\section
[Changes between \LaTeX\ releases 2014/05/01 and 2015/01/01]
{Changes between \LaTeX\ releases 2014/05/01 and 2015/01/01\footnote{Much of this text
is taken from \Lpack{fixltx2e} package which was formerly used to make such changes available separately.}}
\subsection{Support for \LaTeX\ version changes}
\DescribeMacro{\includeInRelease}\arg{date}\oarg{date}\arg{label}\arg{message}\arg{code}
\smallskip
The |\includeInRelease| command has been added to support backward and
forward compatibility for the \LaTeX\ format. It supports the
declaration of conditional code that can be loaded based on options
given to the \Lpack{latexrelease} package. Its use is described in
detail in the \Lpack{latexrelease} package documentation.
\subsection{New Allocation Code\label{e@alloc}}
Previously |\newcount| and related commands were based on classic TeX
and only allocated in the range 0--255. This was extended (in
different ways) for e-\TeX\ in the |etex| package and in the
|xelatex.ini| and |lualatex.ini| files used in those formats. Related
to this the number of boxes allocated to store floats was
limited. This was extended to a certain extent in the |morefloats|
package (by Don Hosek and H.-Martin Muench) but the new allocation
incorporates float allocation directly and supports much larger float
lists using the extended registers.
The new code allocates registers in the full extended range (
$2^{15}-1$ for etex and xelatex, $2^{16}-1$ for lualatex.
In addition a new command |\extrafloats| is provided.
\DescribeMacro{\extrafloats}\arg{number}
\smallskip
This allocates additional registers for the \LaTeX\ float system to
hold figures and tables etc. Similar functionality has been
available via the \Lpack{morefloats} package but this is a different
implementation using extended e-\TeX\ registers when available so
allows many more registers to be reserved for floats as they are
allocated from a pool of 32 or 64 thousand rather than 256 registers,
depending on the engine in use.
\DescribeMacro{\newmarks}\arg{command}
\smallskip
e-\TeX\ only, previously available via the \Lpack{etex} package.
Allocates commands to use the extended e-\TeX\ mark mechanism.
\DescribeMacro{\newXeTeXintercharclass}\arg{command}
\smallskip
Xe-\TeX\ only, previously in the Xe-\LaTeX\ format, but added via
|xelatex.ini| not part of the core release.
Allocates commands to use the Xe-\TeX\ character class mechanism.
\subsection{e-\TeX\ tracing if available}
|\loggingall| (Usually used via |\tracingall|) is extended to enable
additional e-\TeX\ tracing if e-\TeX\ is available. (|\tracingall|
extension has been available as part of the |etex| package previously).
Also based on code from the |etex| package, a command |\tracingnone|
is added to reverse the effects of |\tracingall| and turn off all primitive
\TeX\ tracing. A new command |\hideoutput| has been added which resets the
tracing parameters set by |\showoutput|.
\subsection{\texttt{\textbackslash textsubscript} not defined in
latex.ltx (pr/3492)}
\begin{verbatim}
>>Number: 3492
>>Category: latex
>>Synopsis: \textsubscript not defined in latex.ltx
>>Arrival-Date: Tue Jan 14 23:01:00 CET 2003
>>Originator: Ionel Mugurel Ciobica
I use \textsubscript much more often than \textsuperscript, and
\textsubscript it is not defined in latex.ltx. Could you please
consider including the definition of \textsubscript in the latex.ltx
for the next versions of LaTeX. Thank you.
\end{verbatim}
\subsection{\texttt{\textbackslash @} discards spaces when moving
(pr/3039)}
\begin{verbatim}
>>Number: 3039
>>Category: latex
>>Synopsis: \@ discards spaces when moving
>>Arrival-Date: Sat May 22 09:01:06 1999
>>Originator: Donald Arseneau
>>Description:
The \@ command expands to \spacefactor\@m in auxiliary files,
which then ignores following spaces when it is reprocessed.
\end{verbatim}
\subsection{1-col fig can come before earlier 2-col fig
(pr/2346)}
\begin{verbatim}
>>Number: 2346
>>Category: latex
>>Synopsis: 2-col: 1-col fig can come before earlier 2-col fig
>>Arrival-Date: Wed Dec 18 15:41:07 1996
>>Originator: bil kleb
>>Description:
as documented in Lamport's book, p. 198, concerning figure
placement, "a figure will not be printed before an earlier
figure, and a table will not be printed before an earlier
table." however, there is a footnote stating, "However,
in two-column page style, a single-column figure can come before
an earlier double-column figure, and vice versa."
This twocolumn behavior is undesirable---at least by me and
most professional organizations i publish in. ed snyzter developed
a hack fix for 2.09 several years ago which links the two
counters, but i have not run across a similar "fix" for 2e...
\end{verbatim}
Originally fixed in package \Lpack{fix2col} which was merged into
this package. Documentation and code from this package have been
merged into this file.
\subsubsection{Notes on the Implementation Strategy}
The standard output routine maintains two lists of floats that have
been `deferred' for later consideration. One list for single column
floats, and one for double column floats (which are always
immediately put onto their deferred list). This mechanism means
that \LaTeX\ `knows' which type of float is contained in each box
by the list that it is processing, but having two lists means
that there is no mechanism for preserving the order between the
floats in each list.
The solution to this problem consists of two small changes to
the output routine.
Firstly, abandon the `double column float list' |\@dbldeferlist|
and change every command where it is used so that instead the
same |\@deferlist| is used as for single column floats.
That one change ensures that double and single column floats
stay in the same sequence, but as \LaTeX\ no longer `knows'
whether a float is double or single column, it will happily
insert a double float into a single column, overprinting the
other column, or the margin.
The second change is to provide an alternative mechanism for
recording the two column floats. \LaTeX\ already has a compact
mechanism for recording float information, an integer count register
assigned to each float records information about the `type' of float
`figure', `table' and the position information `htp' etc.
The type information is stored in the `high' bits, one bit position
(above `32') allocated to each float type. The `low' bits store
information about the allowed positions, one bit each allocated for
|h t b p|. In the \LaTeX2.09 system, the bit corresponding to `16'
formed a `boundary' between these two sets of information, and it
was never actually used by the system. Ed Sznyter's
\Lpack{fixfloats} package not unreasonably used this position to
store the double column information, setting the bit for double
column floats. Then at each point in the output routine at which a
float is committed to a certain region, an additional check must be
made to check that the float is (or is not) double column. If it
spans the wrong number of columns it is deferred rather than being
added.
Unfortunately the bit `16' is not available in \LaTeXe. It is used
to encode the extra float position possibility `|!|' that was added
in that system. It would be possible to use position `32' and to
move the flags for `table', `figure',\ldots\ up one position, to
start at 64, but this would mean that in principle one less float
type would be supported, and more importantly is likely to break
any other packages that assume anything about the output routine
internals. So here I instead use another mechanism for flagging
double column floats: By default all floats have depth 0pt.
This package arranges that double column ones have depth 1sp.
This information may then be used in the same manner as in
the \Lpack{fixfloats} package, to defer any floats that are not of
the correct column spanning type.
\subsection{Infinite glue found (pr/4023 and pr/2346)}
The fix for pr/2346 did not work as intended when used in conjunction
with |\enlargethispage| as the latter introduced an infinite negative
glue at the bottom of the page. That in turn make a |\vsplit|
operation to get at the column marks invalid.
\subsection{Wrong header for twocolumn (pr/2613)}
\begin{verbatim}
>>Number: 2613
>>Category: latex
>>Synopsis: wrong headline for twocolumn
>>Arrival-Date: Mon Sep 22 16:41:09 1997
>>Originator: Daniel Reischert
>>Description:
When setting the document in two columns
the headline shows the top mark of the second column,
but it should show the top mark of the first column.
\end{verbatim}
Originally fixed in package \Lpack{fix2col} which was merged into
this package. Documentation and code from this package have been
merged into this file.
\subsubsection{Notes on the Implementation Strategy}
The standard \LaTeX\ twocolumn system works internally by making
each column a separate `page' that is passed independently to \TeX's
page breaker. (Unlike say the \Lpack{multicol} package, where all
columns are gathered together and then split into columns later,
using |\vsplit|.) This means that the primitive \TeX\ marks that are
normally used for header information, are globally reset after the
first column. By default \LaTeX\ does nothing about this.
A good solution is provided by Piet van Oostrum (building on earlier
work of Joe Pallas) in his \Lpack{fixmarks} package.
After the first column box has been collected the mark information
for that box is saved, so that any |\firstmark| can be
`artificially' used to set the page-level marks after the second
column has been collected. (The second column |\firstmark| is not
normally required.) Unfortunately \TeX\ does not provide a direct
way of knowing if any marks are in the page, |\firstmark| always has a
value from previous pages, even if there is no mark in this page.
The solution is to make a copy of the box and then |\vsplit| it
so that any marks show up as |\splitfirstmark|.
The use of |\vsplit| does mean that the output routine will globally
change the value of |\splitfirstmark| and
|\splitbotmark|. The \Lpack{fixmarks} package goes to some trouble
to save and restore these values so that the output routine does
\emph{not} change the values. This part of \Lpack{fixmarks} is not
copied here as it is quite costly (having to be run on every page) and
there is no reason why anyone writing code using |\vsplit| should
allow the output routine to be triggered before the split marks have
been accessed.
\subsection{\texttt{\textbackslash setlength} produces error if
used with registers like \texttt{\textbackslash dimen0} (pr/3066)}
\begin{verbatim}
>>Number: 3066
>>Category: latex
>>Synopsis: \setlength{\dimen0}{10pt}
>>Arrival-Date: Tue Jul 6 15:01:06 1999
>>Originator: Heiko Oberdiek
>>Description:
The current implementation of \setlength causes an error,
because the length specification isn't terminated properly.
More safe:
\def\setlength#1#2{#1=#2\relax}
\end{verbatim}
\subsection{Fewer fragile commands}
\begin{verbatim}
>>Number: 3816
>>Category: latex
>>Synopsis: Argument of \@sect has an extra }.
>>Arrival-Date: Sat Oct 22 23:11:01 +0200 2005
>>Originator: Susanne Wunsch
Use of a \raisebox in \section{} produces the error message
mentioned in the subject.
PR latex/1738 described a similar problem, which has been solved
10 years ago. Protecting the \raisebox with \protect solved my
problem as well, but wouldn't it make sense to have a similar fix
as in the PR?
It is particularly confusing, that an unprotected \raisebox in a
\section*-environment works fine, while in a \section-environment
produces error.
\end{verbatim}
While not technically a bug, in this day and age there are few
reasons why commands taking optional arguments should not be robust.
\subsubsection{Notes on the implementation strategy}
Rather than changing the kernel macros to be robust, we have decided
to add the macro \DescribeMacro{\MakeRobust}|\MakeRobust| in
\Lpack{fixltx2e} so that users can easily turn fragile macros into
robust ones. A macro |\foo| is made robust by doing the simple
|\MakeRobust{\foo}|. \Lpack{fixltx2e} makes the following kernel
macros robust: |\(|, |\)|, |\[|, |\]|,
|\makebox|, |\savebox|,
|\framebox|, |\parbox|, |\rule| and |\raisebox|.
\ldots TODO \ldots fleqn vesion of |\[\]|
\subsection{\texttt{\textbackslash addpenalty} ruins flush-bottom (pr/3073)}
\begin{verbatim}
>>Number: 3073
>>Category: latex
>>Synopsis: \addpenalty ruins flush-bottom
>>Arrival-Date: Sat Jul 17 05:11:05 1999
>>Originator: Donald Arseneau
>>Description:
Just to keep in mind for further development eh?
A page break at an \addpenalty after \vspace does *not*
give a flush-bottom page. (The intent of \addpenalty is
apparently just to preserve the flush bottom by putting
the breakpoint `above' the skip.)
\end{verbatim}
\subsection{Within counters only reset next level down (pr4393)}
This is actually implicitly documented behavior in the \LaTeX{}
Manual that states that |\stepcounter| resets all counters marked
``within''. However it means that if, for example, theorems are
numbered within sections and you start a new chapter in a book, the
section counter is reset to zero but the theorem counter is not
until the first section appears. Thus a theorem directly within the
chapter body (without a new section) would show an incremented
number relative to the last theorem of the previous chapter.
For this reason we are now resetting all levels of within in one go
even if that means that some of these resets may happen several times
unnecessarily.
\subsection{Check the optional arguments of floats}
By default LaTeX silently ignores unknown letters in the optional
arguments of floats. |\begin{figure}[tB]| the |B| is ignored so it
acts like |\begin{figure}[t]| However |\begin{figure}[B]| does
\emph{not} act like |\begin{figure}[]| as the check for an empty
argument, or unsupplied argument, is earlier. |[]| causes the
default float placement to be used, but |[B]| means that \emph{no}
float area is allowed and so the float will not be placed until the
next |\clearpage| or end of document, no warning is given.
This package adds a check on each letter, and if it not one of
|!tbhp| then an error is given and the code acts as if |p| had been
used, so that the float may be placed somewhere.
\subsection{\texttt{\textbackslash DeclareMathSizes} only take pts.
(pr/3693)}
\begin{verbatim}
>>Number: 3693
>>Category: latex
>>Synopsis: \DeclareMathSizes only take pts.
>>Arrival-Date: Fri Jun 11 16:21:00 CEST 2004
>>Originator: Morten Hoegholm
The last three arguments of \@DeclareMathSizes cannot take a dimension
as argument, making it inconsistent with the rest of the font changing
commands and itself, as the second argument can take a dimension
specification.
\end{verbatim}
\subsection{No hyphenation in first word after float environment (pr/3498)}
\begin{verbatim}
>>Number: 3498
>>Category: latex
>>Synopsis: No hyphenation in first word after float environment
>>Arrival-Date: Thu Jan 30 13:21:00 CET 2003
>>Originator: Harald Harders
If a float environment (figure, table) is written within a paragraph,
the first word after the environment is not hyphenated.
\end{verbatim}
\subsection{\texttt{\textbackslash fnsymbol} should use text symbols
(pr/3400)}
\begin{verbatim}
>>Number: 3400
>>Category: latex
>>Synopsis: \fnsymbol should use text symbols if possible
>>Arrival-Date: Fri Jan 04 20:41:00 CET 2002
>>Originator: Walter Schmidt
The \fnsymbol command can be used in both text and math
mode. The symbols produced are, however, always taken from
the math fonts. As a result, they may not match the text
fonts, even if the symbols are actually available, for
instance from the TS1 encoding. Since \fnsymbol is
primarily used for footnotes in text, this should be fixed,
IMO.
\end{verbatim}
\subsection{\texttt{\textbackslash footnotemark}[x] crashes with fixltx2e.sty
(pr/3752)}
\begin{verbatim}
>>Number: 3752
>>Category: tools
>>Synopsis: feature \footnotemark[x] crashes with fixltx2e.sty
>>Arrival-Date: Fri Dec 17 10:11:00 +0100 2004
>>Originator: Stefan Pofahl
If I use /fnsymbol together with fixltx2e.sty I can not use
optional parameter [num]
\footnotemark[1] is not showing the mark number 1 but
the mark \value{footnote}.
\end{verbatim}
This bug was related to pr/3400, where |\@fnsymbol| was made robust.
\subsubsection{Notes on the implementation strategy}
Pr/3400 made |\@fnsymbol| decide between text-mode and math-mode,
which requires a certain level of robustness somewhere as the
decision between text and math must be made at typesetting time and
not when inside |\protected@edef| or similar commands. One way of
dealing with this is to make sure the value seen by |\@fnsymbol| is
a fully expanded number, which could be handled by code such as
\begin{verbatim}
\def\fnsymbol#1{\expandafter\@fnsymbol
\expandafter{\the\csname c@#1\endcsname}}
\end{verbatim}
This would be a good solution if everybody used the high level
commands only by writing code like |\fnsymbol{footnote}|. Unfortunately
many classes (including the standard classes) and packages use the
internal forms directly as in |\@fnsymbol\c@footnote| so the easy
solution of changing |\fnsymbol| would break code that had worked for
the past 20~years.
Therefore the implementation here makes |\@fnsymbol| itself a
non-robust command again and instead uses a new robust command
\DescribeMacro{\TextOrMath}|\TextOrMath|, which will take care of
typesetting either the math or the text symbol. In order to do so,
we face an age old problem and unsolvable problem in \TeX: A
reliable test for math mode that doesn't destroy
kerning. Fortunately this problem can be solved when using e\TeX\ so
if you use this as engine for your \LaTeX\ format, as recommended by
the \LaTeX3 Project, you will get a fully functioning |\TextOrMath|
command with no side effects. If you use regular \TeX\ as engine for
your \LaTeX\ format then we have to choose between the lesser of two
evils: 1)~breaking ligatures and preventing kerning or 2)~face the
risk of choosing text-mode at the beginning of an alignment cell,
which was supposed to be math-mode. We have decided upon 1) as is
customary for regular robust commands in \LaTeX.
\end{document}
|