summaryrefslogtreecommitdiff
path: root/macros/latex/doc/latexchanges.txt
blob: 0b57c802865e5bb67db4604fd80f91fb2d5d15b7 (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
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
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
A
Changes to the L TEX 2ε format
A
c Copyright 2015–2018, L TEX3 Project Team.
All rights reserved.

2018-04-01

Contents
1 Introduction

3

2 Changes introduced in 2018-12-01

3

3 Changes introduced in 2018-04-01 patch 5

3

4 Changes introduced in 2018-04-01 patch 4

3

5 Changes introduced in 2018-04-01 patch 3

3

6 Changes introduced in 2018-04-01 patch 2

4

7 Changes introduced in 2018-04-01 patch 1

4

8 Changes introduced in 2018-04-01

4

9 Changes introduced in 2017-04-15

4

10 Changes introduced in 2017/01/01 patch 3

5

11 Changes introduced in 2017/01/01 patch 2

5

12 Changes introduced in 2017/01/01 patch 1

5

13 Changes introduced in 2017/01/01

5

14 Changes introduced in 2016/03/31 patch 3

5

15 Changes introduced in 2016/03/31 patch 2

5

16 Changes introduced in 2016/03/31 patch 1

5

17 Changes introduced in 2016/03/31

6

18 Changes introduced in 2016/02/01

6

1

19 Changes introduced in 2015/10/01 patch 2

6

20 Changes introduced in 2015/10/01 patch 1

6

A
21 Changes introduced in L TEX 2015/10/01
21.1 LuaTeX allocation . . . . . . . . . . . . .
21.2 Increased number of floats . . . . . . . . .
21.3 Improved \newinsert . . . . . . . . . . .
21.4 New accent, \textcommabelow (pr/4414)
21.5 Unicode 8 . . . . . . . . . . . . . . . . . .

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

6
6
6
7
7
7

22 Changes introduced in 2015/01/01 patch 2

7

23 Changes introduced in 2015/01/01 patch 1

7

A
24 Changes between L TEX releases 2014/05/01 and 2015/01/01
A X version changes . . . . . . . . . . . . . . . . .
24.1 Support for L TE
24.2 New Allocation Code . . . . . . . . . . . . . . . . . . . . . . . . .
24.3 e-TEX tracing if available . . . . . . . . . . . . . . . . . . . . . .
24.4 \textsubscript not defined in latex.ltx (pr/3492) . . . . . . . .
24.5 \@ discards spaces when moving (pr/3039) . . . . . . . . . . . . .
24.6 1-col fig can come before earlier 2-col fig (pr/2346) . . . . . . . .
24.7 Infinite glue found (pr/4023 and pr/2346) . . . . . . . . . . . . .
24.8 Wrong header for twocolumn (pr/2613) . . . . . . . . . . . . . .
24.9 \setlength produces error if used with registers like \dimen0
(pr/3066) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24.10Fewer fragile commands . . . . . . . . . . . . . . . . . . . . . . .
24.11\addpenalty ruins flush-bottom (pr/3073) . . . . . . . . . . . .
24.12Within counters only reset next level down (pr4393) . . . . . . .
24.13Check the optional arguments of floats . . . . . . . . . . . . . . .
24.14\DeclareMathSizes only take pts. (pr/3693) . . . . . . . . . . .
24.15No hyphenation in first word after float environment (pr/3498) .
24.16\fnsymbol should use text symbols (pr/3400) . . . . . . . . . . .
24.17\footnotemark[x] crashes with fixltx2e.sty (pr/3752) . . . . . . .

2

8
8
8
9
9
9
9
11
11
12
12
13
13
13
13
14
14
14

1

Introduction

A
This document describes changes that have been made to the L TEX format
A
since the 2014/05/01 L TEX release.
A
A
As announced in L TEX News 22, the 2015 L TEX release adopts a new policy. Improvements and bug fixes will be made to the format sources, with the
latexrelease package being available to revert changes to use definitions from an
earlier format.

2

Changes introduced in 2018-12-01

Further additions to the characters supported by default in UTF-8. \guillemetleft
and \guillemetright provided as alias for the names based on the Adobe font
names (65).
The use of potrusion in tables of contents is suppressed by default, see https:
//tex.stackexchange.com/q/172785.
The handling of visible space in verbation was adjusted for 69 and 70.
Spaces are removed from the argument passed to BiBTeX, 88.
New commands 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. 94.

3

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.

4

Changes introduced in 2018-04-01 patch 4

No changes to the format, but docstrip adjusted so that non-ASCII .ins files
work with the new UTF-8 defaults.

5

Changes introduced in 2018-04-01 patch 3

Additional adjustments for GitHub issues 34 and 38, adjustment to the location of some documentation files, such as source2e.tex to be installed in the
documentation sources not the default TEX input tree.
3

6

Changes introduced in 2018-04-01 patch 2

Additional adjustments for GitHub issues 32 and 33.

7

Changes introduced in 2018-04-01 patch 1

Make \UseRawInputEncoding and latexrelease reset \inputencodingname when
disabling the UTF-8 input handling.

8

Changes introduced in 2018-04-01

A
Further details of changes at this release are given in L TEX News 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 remreset and chngcntr packages for controlling counters have been added.
The definition of \@ifundefined has been refined to use the e-TEX\ifcsname
primitive when available, and to avoid defining the command being tested to be
\relax in the case that it was previously undefined.

9

Changes introduced in 2017-04-15

A
Optionally, L TEX format and package dates may use ISO style dates with rather than /.

For Unicode TEXs, made further adjustments to the composite accent code in
tuenc.def, and further updates tracking changes in LuaTEX, now at 1.04.
Previously defining an encoding-specific composite with an undeclared accent
A
(or an accent declared later) gave no error, but did nothing useful. L TEX 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 \- is adjusted to match the comments in 3855 to accomodate
non standard settings of \hyphenchar.
In parboxes and similar settings, \lineskiplimit is now reset (to the existing default value, \normallineskiplimit). See https://tex.stackexchange.
com/a/359934.
The code for verb\newpage has been adjusted to add a test on the value of
\prevdepth so that the depth of the last line is preserved in forced page breaks.

4

10

Changes introduced in 2017/01/01 patch 3

Emergency patch to correct a typo in a change introduced in patch 2.

11

Changes introduced in 2017/01/01 patch 2

More adjustments for TU encoding, allowing for characters missing in common
system fonts. Additional fd files for Latin Modern variants are included in the
documented sources.

12

Changes introduced in 2017/01/01 patch 1

Fixes to TU encoding definitions for LuaTEX and XeTEX.

13

Changes introduced in 2017/01/01

A new test is added during format making that eTEX extensions are available.
A
A
As noted in L TEX news, eTEX will now be required to build L TEX.
Further updates tracking changes for LuaTEX 1.0.
The definition of \showhyphens is changed in formats built with XeTEX, as the
original version, inherited from plain TEX does not work with Xe-TEX.
Changes to the default encoding used by LuaTEX and XeTEX formats to be TU
(Unicode) rather than OT1 (7 bit legacy TEX encoding).

14

Changes introduced in 2016/03/31 patch 3

Fixes to \newinsert and \extrafloats.

15

Changes introduced in 2016/03/31 patch 2

Adjustments to \c{g} in OT1 encoding.

16

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.

5

17

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 \DeclareMathSymbol and related commands so that they
do not give errors with new LuaTEX releases.

18

Changes introduced in 2016/02/01

Adjustments to LuaTEX support to match changes to the LuaTEX engine, and
to the character class allocation in XeTEX.
Load Unicode data from new generic unicode-data distribution.

19

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.

20

Changes introduced in 2015/10/01 patch 1

This release allows latexrelease to revert the LuaTEX-specific changes, in particular fixing an incorrect date in part of the mechanism and adding a method to
disable callback management entirely.

21
21.1

A
Changes introduced in L TEX 2015/10/01

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
A
ltluatex.dtx or L TEX News 22. ltluatex.dtx now forms a new chapter (N)
in the documented sources, source2e.tex.

21.2

Increased number of floats

The default float list has been increased from 18 to 52 registers if eTEX 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.

6

21.3

Improved \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.

21.4

New accent, \textcommabelow (pr/4414)

The command \textcommabelow has been added. This is mainly intended for
Romanian letters S s T t.
, , , ,

21.5

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.

22

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 latexrelease package
was used.

23

Changes introduced in 2015/01/01 patch 1

This release re-introduces the “Patch Level” scheme for identifying releases beA
tween main “dated” releases. Early L TEX 2ε releases included a mechanism
whereby updates could be provided by a 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
A
having the patch level identified in the banner allows the L TEX 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 latexrelease and 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 24.2. The old definition is now only in the
latexrelease package, for use when emulating old formats.

7

24

24.1

A
Changes between L TEX releases 2014/05/01
and 2015/01/011
A
Support for L TEX version changes

\includeInRelease{ date }[ date ]{ label }{ message }{ code }
The \includeInRelease command has been added to support backward and
A
forward compatibility for the L TEX format. It supports the declaration of conditional code that can be loaded based on options given to the latexrelease package.
Its use is described in detail in the latexrelease package documentation.

24.2

New Allocation Code

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 eTEX 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 ( 215 − 1 for etex
and xelatex, 216 − 1 for lualatex. In addition a new command \extrafloats is
provided.
\extrafloats{ number }
A
This allocates additional registers for the L TEX float system to hold figures and
tables etc. Similar functionality has been available via the 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.

\newmarks{ command }
e-TEX only, previously available via the etex package. Allocates commands to
use the extended e-TEX mark mechanism.
\newXeTeXintercharclass{ command }
A
Xe-TEX only, previously in the Xe-L TEX format, but added via xelatex.ini
not part of the core release. Allocates commands to use the Xe-TEX character
class mechanism.
1 Much of this text is taken from fixltx2e package which was formerly used to make such
changes available separately.

8

24.3

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.

24.4

\textsubscript not defined in latex.ltx (pr/3492)

>Number:
>Category:
>Synopsis:
>Arrival-Date:
>Originator:

3492
latex
\textsubscript not defined in latex.ltx
Tue Jan 14 23:01:00 CET 2003
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.

24.5

\@ discards spaces when moving (pr/3039)

>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.

24.6

1-col fig can come before earlier 2-col fig (pr/2346)

>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."

9

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...

Originally fixed in package fix2col which was merged into this package. Documentation and code from this package have been merged into this file.
24.6.1

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
A
list). This mechanism means that L TEX ‘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
A
column floats stay in the same sequence, but as L TEX 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
A
two column floats. L TEX 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
A
positions, one bit each allocated for h t b p. In the L TEX2.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 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.
A
Unfortunately the bit ‘16’ is not available in L TEX 2ε . 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’,. . . 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

10

fixfloats package, to defer any floats that are not of the correct column spanning
type.

24.7

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.

24.8

Wrong header for twocolumn (pr/2613)

>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.

Originally fixed in package fix2col which was merged into this package. Documentation and code from this package have been merged into this file.
24.8.1

Notes on the Implementation Strategy

A
The standard L TEX twocolumn system works internally by making each column
a separate ‘page’ that is passed independently to TEX’s page breaker. (Unlike
say the 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
A
column. By default L TEX does nothing about this. A good solution is provided
by Piet van Oostrum (building on earlier work of Joe Pallas) in his 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 pagelevel 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 fixmarks package goes to
some trouble to save and restore these values so that the output routine does not
change the values. This part of fixmarks is not copied here as it is quite costly
11

(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.

24.9

\setlength produces error if used with registers like
\dimen0 (pr/3066)

>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}

24.10

Fewer fragile commands

>Number:
>Category:
>Synopsis:
>Arrival-Date:
>Originator:

3816
latex
Argument of \@sect has an extra }.
Sat Oct 22 23:11:01 +0200 2005
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.

While not technically a bug, in this day and age there are few reasons why
commands taking optional arguments should not be robust.
24.10.1

Notes on the implementation strategy

Rather than changing the kernel macros to be robust, we have decided to add the
macro \MakeRobust\MakeRobust in fixltx2e so that users can easily turn fragile
macros into robust ones. A macro \foo is made robust by doing the simple
\MakeRobust{\foo}. fixltx2e makes the following kernel macros robust: \(, \),
\[, \], \makebox, \savebox, \framebox, \parbox, \rule and \raisebox.
. . . TODO . . . fleqn vesion of \[\]
12

24.11

\addpenalty ruins flush-bottom (pr/3073)

>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.)

24.12

Within counters only reset next level down (pr4393)

A
This is actually implicitly documented behavior in the L TEX 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.

24.13

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 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 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.

24.14

\DeclareMathSizes only take pts. (pr/3693)

>Number:
>Category:
>Synopsis:
>Arrival-Date:
>Originator:

3693
latex
\DeclareMathSizes only take pts.
Fri Jun 11 16:21:00 CEST 2004
Morten Hoegholm

The last three arguments of \@DeclareMathSizes cannot take a dimension

13

as argument, making it inconsistent with the rest of the font changing
commands and itself, as the second argument can take a dimension
specification.

24.15

No hyphenation in first word after float environment (pr/3498)

>Number:
>Category:
>Synopsis:
>Arrival-Date:
>Originator:

3498
latex
No hyphenation in first word after float environment
Thu Jan 30 13:21:00 CET 2003
Harald Harders

If a float environment (figure, table) is written within a paragraph,
the first word after the environment is not hyphenated.

24.16

\fnsymbol should use text symbols (pr/3400)

>Number:
>Category:
>Synopsis:
>Arrival-Date:
>Originator:

3400
latex
\fnsymbol should use text symbols if possible
Fri Jan 04 20:41:00 CET 2002
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.

24.17

\footnotemark[x] crashes with fixltx2e.sty (pr/3752)

>Number:
>Category:
>Synopsis:
>Arrival-Date:
>Originator:

3752
tools
feature \footnotemark[x] crashes with fixltx2e.sty
Fri Dec 17 10:11:00 +0100 2004
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}.

This bug was related to pr/3400, where \@fnsymbol was made robust.

14

24.17.1

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
\def\fnsymbol#1{\expandafter\@fnsymbol
\expandafter{\the\csname c@#1\endcsname}}

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 \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
A
can be solved when using eTEX so if you use this as engine for your L TEX forA
mat, as recommended by the L TEX3 Project, you will get a fully functioning
\TextOrMath command with no side effects. If you use regular TEX as enA
gine for your L TEX 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
A
commands in L TEX.

15