summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/endfloat/endfloat.dtx
blob: 04b4a31765dd84ff6b7717f8a8dac1f002031bfa (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
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
\def\filename{endfloat}
\def\fileversion{v2.7}
\def\filedate{2019/04/15}
\def\docdate{2019/04/15}
%
% \CheckSum{872}
%% \CharacterTable
%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%%   Digits        \0\1\2\3\4\5\6\7\8\9
%%   Exclamation   \!     Double quote  \"     Hash (number) \#
%%   Dollar        \$     Percent       \%     Ampersand     \&
%%   Acute accent  \'     Left paren    \(     Right paren   \)
%%   Asterisk      \*     Plus          \+     Comma         \,
%%   Minus         \-     Point         \.     Solidus       \/
%%   Colon         \:     Semicolon     \;     Less than     \<
%%   Equals        \=     Greater than  \>     Question mark \?
%%   Commercial at \@     Left bracket  \[     Backslash     \\
%%   Right bracket \]     Circumflex    \^     Underscore    \_
%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%%   Right brace   \}     Tilde         \~}
%%
%
% \iffalse
%% Description: LaTeX style to put figures and tables at end of article
%% Keywords: LaTeX, style-option, float, figure, table
%% Authors: James Darrell McCauley <jdm5548@diamond.tamu.edu>,
%%          Jeff Goldberg <jeffrey@goldmark.org>,
%%          Axel Sommerfeldt <axel.sommerfeldt@f-m.fm>
%% Maintainer: -none-
%% Latest Version: Version 2.7 <April 2019>
% \fi
%
% \DoNotIndex{\documentclass,\usepackage,\hfuzz,\small,\tt,\begin,\end}
% \DoNotIndex{\NeedsTeXFormat,\filedate,\fileversion,\DoNotIndex}
% \DoNotIndex{\def,\edeg,\xdef,\gdef,\let,\divide,\advance,\multiply}
% \DoNotIndex{\",\-,\H,\',\\,\{,\},\^,\ }
% \DoNotIndex{\begingroup,\endgroup,\catcode,\global,\relax,\space}
% \DoNotIndex{\string,\immediate}
% \DoNotIndex{\normalsize,\large,\Large,\small,\tiny,\bf}
% \DoNotIndex{\@z}
% \DoNotIndex{\ifthenelse,\and,\equal,\whiledo,\if,\fi,\else}
% \DoNotIndex{\CodelineIndex,\EnableCrossrefs,\DisableCrossrefs}
% \DoNotIndex{\DocInput,\AltMacroFont}
% \DoNotIndex{\RecordChanges,\OnlyDescription}
% \DoNotIndex{\@input,\@namedef,\@whilesw,\clearpage,\ifnum,\ifx}
% \DoNotIndex{\jobname,\message,\MessageBreak,\newcommand}
% \DoNotIndex{\protect,\providecommand,\ProvidesPackage,\renewcommand}
% \DoNotIndex{\section,\setlength}
%
% \changes{v0.1}{1992/02/25}{created by Darrell McCauley (jdm)}
% \changes{v1.0}{1992/03/01}{cleaned up and released jdm}
% \changes{v2.0}{1992/06/02}{incorporated changes made by bj (see v1.99). jdm}
% \changes{v2.1}{1994/06/25}{Use LaTeX2e documentation form. jpg}
% \changes{v2.1b}{1994/07/03}{Modify documentation -jpg}
% \changes{v2.1c}{1994/07/20}{Modify documentation -jpg}
% \changes{v2.3}{1995/03/05}{Fix figure* bug and docs -jpg}
%
% \newcommand*{\pkg}[1]{\textsf{#1}}
% \newcommand*{\file}[1]{\texttt{#1}}
% \newcommand*{\cls}[1]{\textsl{#1}}
% \newcommand{\bs}{\texttt{\char'134}}
% \newcommand*\x{\discretionary{-}{}{}}
%
% \title{The \texttt{\filename} package\thanks{This file
%        has version number \fileversion, last
%        revised \filedate, documentation dated \docdate.}}
% \author{James Darrell McCauley
%  \and Jeff Goldberg\thanks{JPG (jeffrey@goldmark.org)
%    is responsible for all modifications
%    from version 2.1 upwards.  Since there is almost no original code
%    left, he has claimed co-authorship from version 2.4.}
%  \and Axel Sommerfeldt\thanks{Axel Sommerfeldt (axel.sommerfeldt@f-m.fm)
%    is responsible for all modifications from version 2.5 to 2.7.}
% }
% 
% \date{\docdate}
%
% \maketitle
%
% \begin{abstract}
% The purpose of this package is to put all figures on pages by themselves
% at the end of an article in a section named Figures. Likewise for tables.
% Markers, like ``[Figure 3 about here]'' appear in the text (by default)
% near where the figure (or table) would normally have occurred.
% This is usually required when preparing submissions to journals.
%
% A number of package options and other mechanisms are provided to
% give the user control over various aspects of the package's behavior.
%
% Loading this package will change the output of \LaTeX.
% \end{abstract}
% 
% \tableofcontents
% \section{In many voices}
%
% \changes{v2.1}{1994/06/25}{Use LaTeX2e documentation form. jpg}
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% This documentation was put in its current form by Jeff Goldberg,
% who has tried to indicate when he is (when
% I am) speaking.   See \autoref{sec:history} for more detail.
% However, both the original author, Darrell McCauley, and
% a major contributor, Brian Junker, use the first person
% singular.  In this version I no longer work to keep it clear
% who wrote what portions of the documentation and the code, but
% have allowed things to blend together a little more, since the
% constant interpolations were hindering readability.  Generally
% the user documentation was written by Darrell MaCauley (jdm),
% but anything that refers to \LaTeXe\ features was added
% by me (jpg).  Also, where you find spelling and typographical
% errors, you are likely to be reading my text.
%
% Axel Sommerfeldt has added a section about dealing with
% other floating environments than |figure| and |table|, and
% made adaptions to other sections affected by the
% changes of version 2.5, 2.6, and 2.7.
% Furthermore he has added paragraphs about his \pkg{caption}
% package in section \ref{sec:removingcaptions} ``Removing captions''.
%
% This documentation is long.  Most users won't need to read beyond
% the first few pages, but there are a number of ways to customize
% the behavior of \pkg{endfloat} and these are detailed as the
% documentation progresses.  The package is unusual in the way
% it does its job, so it can interact with other packages and
% other aspects of \LaTeX\ in ways that may be surprising.
% Although the package is flexible in some respects, it is
% highly limited in others.
% Tools and hints are provided to help you control these interactions,
% but these do require some reading.  But you only need to take
% a look at these sections when the need arises.
%
% \changes{v2.1}{1994/06/25}{Use LaTeX2e documentation form. jpg}
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
%
% \section{Why write this package?}
% 
% Many journals require tables and figures to be separated from the text
% when you submit those ugly double spaced copies.  They also usually want
% a list of figures/tables before these sections (capability added in v2.0,
% control through package options added in v2.2).
%
% I (jdm) am writing a set of styles that look exactly like a journal, but just
% by adding one style option, I wanted the user to meet the requirements
% for formatting submissions. I encourage others to do the
% same.\footnote{Note that jdm, working in old \LaTeX209
% did not have the distinction between class, package and package
% options available to him at the time he made his comment.
% The most coherent way to do what is needed is to use a class,
% let's say \cls{submit}, which would load \pkg{endfloat} and
% presumably some double spacing packages among other things.  Once
% that class is defined, then other classes which are specific
% to particular journals can be defined.} 
%
% \section{Usage}
% \subsection{Loading}
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% Just include the package in your preamble
% \begin{quote}
%   |\usepackage[|\ldots|]{endfloat}|
% \end{quote}
% 
% Note that versions 2.1 and beyond will no longer work with
% \LaTeX209.  Get your administrator to upgrade your site
% to the new standard, \LaTeXe.  Although version~2.0 (a \LaTeX209 version)
% will usually work with \LaTeXe, it will not do so in combination
% with certain other packages.
%
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% \changes{v2.1b}{1994/07/03}{Modify documentation -jpg}
%
% \subsection{What it does}
%
% Merely loading the package will get it working.  Loading it will
% have \LaTeX\ produce two extra files with
% \texttt{.ttt} and \texttt{.fff} extensions
% (for tables and figures, respectively).
%
% This puts all figures and tables at the end of your document
% each on a page by itself\footnote{This
%    is the default.  See \autoref{sec:separator} to see how
%    to have multiple floats per page.}
% and creates a List of Figures and/or List of Tables section
% at the end (when appropriate and controllable by options).
% The floats are processed using |\baselinestretch{1}| irrespective
% of what is used in the document as a whole.  This can be
% reset to, say 1.4, by using
% \begin{quote}
%   |\AtBeginDelayedFloats{%|\\
%   |  \renewcommand{\baselinestretch}{1.4}}|
% \end{quote}
% which is available from version 2.4.  See \autoref{sec:hooks}
% for more discussion.
%
% It also leaves notes in the text (i.e., ``[Figure 4 about here.]'').
% If you would rather not have these, this can be turned off by
% using the |nomarkers| options.  If you
% do not like the look of this marker, you can change
% their text and appearance
% (see \autoref{sec:language}).
%
% \subsection{Starred floats}
% The |figure*| and |table*| versions are supported by the current
% version.\footnote{I (jpg) very stupidly introduced a bug in version 2.2
% which wrecked |figure*|.  It has been brought to my attention and
% fixed.  I offer my thanks and my apologies.}
%
% \subsection{Options} \label{sec:options}
% 
% Under version 2.2 and higher,
% the \pkg{endfloat} package uses package options.  The options
% are summarized in table~\ref{tab:options}.  In addition to these
% options, see sections~\ref{sec:extra} and~\ref{sec:hooks} for more
% advanced ways of controlling output.
%
% \begin{table}
% \caption{Options and defaults} \label{tab:options}
% \smallskip
% \begin{tabular}{lcll}
% \hline
% \multicolumn{1}{c}{Option} &
% \multicolumn{1}{c}{Default}&
% \multicolumn{1}{c}{Default implication} &
% \multicolumn{1}{c}{Descriptions} \\
% \hline
% |nofiglist|    & off  &                          & no list of figures          \\
% |notablist|    & off  &                          & no list of tables           \\
% |nolists|      &      & |nofiglist|, |notablist| & neither list                \\
% |figlist|      & on   &                          & list of figures             \\
% |tablist|      & on   &                          & list of tables              \\
% |lists|        &      & |figlist|, |tablist|     & list of tables and figures  \\
% |nofighead|    & on   &                          & no `Figures' section header \\
% |notabhead|    & on   &                          & no `Tables' section header  \\
% |noheads|      &      & |nofighead|, |notabhead| & neither of the headers      \\
% |fighead|      & off  &                          & `Figures' section header    \\
% |tabhead|      & off  &                          & `Tables' section header     \\
% |heads|        &      & |fighead|, |tabhead|     & Both section headers        \\
% |markers|      & on   &                          & Place markers in the text   \\
% |nomarkers|    & off  &                          & no markers in text          \\
% |tablesfirst|  & off  &                          & Put tables before figures   \\
% |figuresfirst| & on   &                          & Put figures before tables   \\
% |tablesonly|   & off  &                          & Handle tables only          \\
% |figuresonly|  & off  &                          & Handle figures only         \\
% |notables|     & off  &                          & Disregard tables            \\
% |nofigures|    & off  &                          & Disregard figures           \\
% |disable|      &      &                          & Disables the package        \\
% \hline
% \end{tabular}
% \end{table}
%
% The list of tables and figures can be suppressed by using the
% \texttt{nofiglist} and \texttt{notablist} options.  Both
% can be suppressed with the \texttt{nolists} option.\footnote{In
% versions prior to 2.2 the command for turning off the lists turned
% on the headers (the equivalent of the |heads| option).  That is
% not the case with these options.  The |lists| and the |heads|
% options are entirely orthogonal.}
% The default is \texttt{lists}.
%
% A section header for `Tables' and `Figures' can be produced by using
% the option |tabhead|, |fighead|, respectively, and |heads| for both.
% The defaults are |notabhead| and |nofighead|.
%
% If you want the headers instead of the lists you would need to 
% use both the |nolists| and the |heads| options.
%
% If you want to suppress the markers in the text, use the
% option \texttt{nomarkers}.  The default is
% \texttt{markers}.
%
% Normally the figures at the end appear before the tables.
% This can be changed by using the option \texttt{tablesfirst}.
% The default is \texttt{figuresfirst}.
%
% If nothing else if specified, both figures and tables will be handled
% by the \pkg{endfloat} package.
% This can be altered by usage of the options |tables|\x|only|
% resp. |figures|\x|only|.
% 
% \medskip
%
% A typical usage might be something like
% \begin{quote}
%   |\documentclass[a4paper,12pt]{article}|\\
%   |\usepackage[nolists,tablesfirst]{endfloat}|\\
%   \ldots\\
%   |\begin{document}|
% \end{quote}
% which would suppress the list of tables and figures as well as
% the corresponding section headers, and would have the tables
% precede the figures.
%
% \subsubsection{Contradictions and dilemmas}
%
% It is not recommended that one specify conflicting options, but
% if you insist, here are the rules.  In table~\ref{tab:options} the third
% column indicates what other options are implied by default.  That
% is |heads| turns on |fighead| by default, but that implication
% can be overruled by explicitly stating the |nofighead| option.
%
% \begin{enumerate}
% \item \label{rule:elsewhere}
%   When one option is more specific than the other the more specific
%   one holds true, and the more general will only partially hold.
%   So specifying \texttt{fighead} and \texttt{noheads} will be the
%   same as saying \texttt{fighead} and \texttt{notabhead}.
% \item
%   The order in which the options appear is relevant.
% \item
%   If some of the obsolete commands for these options are used
%   all bets are off on these interactions.
% \end{enumerate}
%
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% 
% \section{Modifying marker text}\label{sec:language}
%
% \changes{v1.0b}{1992/03/10}{adaptation for LaTeX 2.09 and
%                      international namegiving by Ronald Kappert
%                      R.Kappert@urc.kun.nl}
% \DescribeMacro{\tableplace}
% \DescribeMacro{\figureplace}
% \DescribeMacro{\floatplace}
%  Announcements in any language can be generated by 
%   using |\re|\x|new|\x|command| to redefine |\table|\x|place| and
%   |\figure|\x|place|, or by redefining |\float|\x|place|.
%
%  The defaults are
% \changes{v2.1}{1994/06/25}{Use LaTeX2e documentation form. jpg}
% \begin{quote}
%   |\newcommand\figureplace{\floatplace{figure}}|\\
%   |\newcommand\tableplace{\floatplace{table}}|\\
%   \\
%   |\newcommand\floatplace[1]{%|\\
%   |  \begin{center}|\\
%   |    [\csname #1name\endcsname~%|\\
%   |     \csname thepost#1\endcsname\ about here.]|\\
%   |  \end{center}}|
% \end{quote}
%
% These redefinitions may be placed in the \file{endfloat.cfg}
% file (see \autoref{sec:extra} for more information).
%
% WARNING! The name of the counters |post|\x|tbl| and |post|\x|fig|
% have been changed to |post|\x|table| and |post|\x|figure| in version 2.5.
% However, |\the|\x|post|\x|tbl| and |\the|\x|post|\x|fig| are still available for
% usage inside redefined versions of |\table|\x|place| and |\figure|\x|place|
% so old documents (hopefully) will still work.
%
% Hooks for the \texttt{babel} package are not (yet) provided, so
% you will have to do things by hand:
% \begin{quote}
%   |\renewcommand{\figurename}{Abra} % if no babel|\\
%   |\renewcommand{\figureplace}{%|\\
%   |  \begin{center}|\\
%   |    [A(z) \thepostfigure.~\figurename itt legyen.]|\\
%   |  \end{center}}|
% \end{quote}
% 
% If you wish to change the name of the figure or table section
% heading, you can do that in the usual way (via the \texttt{babel}
% package, or by redefining |\figure|\x|section| and |\table|\x|section|
% directly).
%
% \DescribeMacro{\efloatheading}
% Endfloat uses |\efloat|\x|heading| for applying this heading.
% By default it is defined to use |\mark|\x|both| for that purpose:
% \begin{quote}
%   |\newcommand\efloatheading[1]{%|\\
%   |  \markboth{\uppercase{#1}}{\uppercase{#1}}}|
% \end{quote}
% forcing the headings applied in uppercase.  You may change this by using
% |\re|\x|new|\x|command| to redefine |\efloat|\x|heading| as you wish:
% \begin{quote}
%   |\renewcommand\efloatheading[1]{|\meta{code that applies \#1 as heading}|}|
% \end{quote}
% It makes most sense to place such a redefinition in the configuration
% file (see \autoref{sec:extra}).
%
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% \changes{v1.0b}{1992/03/10}{adaptation for LaTeX 2.09 and
%                      international namegiving by Ronald Kappert
%                      R.Kappert@urc.kun.nl}
% \changes{v1.99}{1992/05/27}{extensive changes by bj}
%
% \section{Commands before processing delayed material} \label{sec:hooks}
%
% \DescribeMacro{\AtBeginFigures}
% \DescribeMacro{\AtBeginTables}
% \DescribeMacro{\AtBeginDelayedFloats}
% If you wish to have some more control over how the tables and figures
% are processed, you can make use of the commands |\At|\x|Begin|\x|Delayed|\x|Floats|,
% |\At|\x|Begin|\x|Figures|, and |\At|\x|Begin|\x|Tables|.
% If you wanted to ensure that the tables begin
% on a recto page, you could for example say something like
% |\At|\x|Begin|\x|Tables{\clear|\x|double|\x|page}| in the preamble  of your
% document.\footnote{It is difficult for me to imagine a situation where
% one would be using \pkg{endfloat} and the class option \texttt{twoside},
% without which \texttt{\bslash cleardoublepage}
% is the same as \texttt{\bslash clearpage}, together.
% Another, more realistic example would be to adjust the
% \texttt{\bslash baselinestretch} for table and figure processing.}
% Material in |\At|\x|Begin|\x|Tables| and |\At|\x|Begin|\x|Figures| is processed after
% the list of tables or list of figures (if those options are set) and
% just before the files with the delayed material in input.  These are
% also processed after the original definitions of the table and figure
% environments are restored.
%
% These commands can be used either in the preamble of your document,
% or in the \file{endfloat.cfg} file (see \autoref{sec:extra}).
% 
% \section{Insert own code into the delayed material} \label{sec:addto}
%
% \DescribeMacro{\addtodelayedfloat}
% |\addtodelayedfloat| will add own code to delayed floats.
% For example
% \begin{quote}
%   |\addtodelayedfloat{figure}{\clearpage}|
% \end{quote}
% will add |\clear|\x|page| to the delayed figures.
%
% Note: The argument will be stored detokenized to the intermediate
% file.
% If this is not what you want, use the starred variant
% |\add|\x|to|\x|delayed|\x|float*| instead, for example
% \begin{quote}
%   |\addtodelayedfloat{figure}{\sometext}|
% \end{quote}
% will add |\some|\x|text| to the delayed figures while
% \begin{quote}
%   |\addtodelayedfloat*{figure}{\sometext}|
% \end{quote}
% will add the current content of |\some|\x|text| to the delayed
% figures.
%
% \section{Processing delayed floats before the end}
%
% \DescribeMacro{\processdelayedfloats}
% If you wish to process
% the floats prior to the end of the document, you may do so with the
% |\processdelayedfloats| command, which has been made available from
% version~2.4 onward.  This will process all of the
% unprocessed tables and figures up to that point.  You may wish
% to use this command at the end of every chapter for example.
%
% If you do use this, there are several points which should be noted.
% \begin{enumerate}
% \item All outstanding floats will be processed at the
%   end of the document.
% \item If you use the |lists| option you will get a list of all
%   tables and figures in the document.  Not just the ones for
%   the current chapter.  Using lists may have other odd consequences.
% \item It is your responsibility to set |\table|\x|place| and
%   |\figure|\x|place| correctly, as well as to possibly reset
%   the counters |\the|\x|post|\x|table| and |\the|\x|post|\x|figure| (\autoref{sec:language})
%   as you wish.  If you do not reset them, they will continue to
%   increase throughout the document.
% \end{enumerate}
% 
% \section{Several floats per page}\label{sec:separator}
%
% \DescribeMacro{\efloatpreamble}
% Endfloat applies |\efloat|\x|preamble| before typesetting the very first
% (delayed) float in their respective files.
% By default it is defined to do nothing.
% You may change this by using
% |\re|\x|new|\x|command| to redefine |\efloat|\x|preamble| as you wish.
%
% \medskip
%
% \DescribeMacro{\efloatseparator}
% Endfloat places |\efloat|\x|separator| between the floats in their
% respective files.  By default it is defined to be |\clear|\x|page|
% forcing one float per page.  You may change this by using
% |\re|\x|new|\x|command| to redefine |\efloat|\x|separator| as you wish.
% One possibility, suggested by a user, is
% \begin{quote}
%   |\renewcommand{\efloatseparator}{\mbox{}}|
% \end{quote}
%
% \DescribeMacro{\efloatpostamble}
% Endfloat applies |\efloat|\x|postamble| after typesetting the very last
% (delayed) float in their respective files.
% By default it is defined to be |\efloat|\x|separator|.
% You may change this by using
% |\re|\x|new|\x|command| to redefine |\efloat|\x|postamble| as you wish.
%
% \iffalse
% \medskip
% It makes most sense to place such redefinitions in the configuration
% file (see \autoref{sec:extra}).
% \fi
%
% \medskip
%
% \DescribeMacro{\efloattype}
% If you need to know what floats are actually processed, you could draw on
% |\efloat|\x|type| which is set to the environment type currently processed,
% for example |figure| or |table|.
%
% \section{Other customizations}\label{sec:customizations}
%
% \DescribeMacro{\efloatbegin}
% \DescribeMacro{\efloatend}
% |\efloat|\x|begin| will be typeset before the processing of each delayed
% float while |\efloat|\x|end| will be typeset after each processing.
% By default the first is defined to be |\clear|\x|page|, the second is
% defined to do nothing.
%
% \medskip
%
% \DescribeMacro{\efloatbeginlist}
% \DescribeMacro{\efloatendlist}
% |\efloat|\x|begin|\x|list| will be typeset before each list of delayed floats
% while |\efloat|\x|end|\x|list| will be typeset after each list.
% By default the first is defined to be |\normal|\x|size|, the second is
% defined to be |\clear|\x|page|.
%
% \section{Configuration file and other end environments}\label{sec:extra}
%
% Many users have suggested options to the package which are
% often journal specific.  Many of the suggestion options are
% also not specific to how \pkg{endfloat} itself works, but to how
% captions and lists of figures and tables are to appear.
% Instead of burdening the package with options that, in the
% end, are specific to particular journals, I have added a
% configuration file for \pkg{endfloat} which will allow
% you to make many of these redefinitions without
% having to further increase the size of \pkg{endfloat} itself.
%
% As of version 2.4 \pkg{endfloat} will look for a file
% called \file{endfloat.cfg} in \TeX's input path.  If it
% is found, it will be included after \pkg{endfloat} is loaded.
% The purpose of this configuration file is to allow the user to
% include additional definitions related to \pkg{endfloat}.
% For example, any redefinition of \verb"\floatplace" can
% go in this file, so that the preamble does not need to
% be filled with material that only makes sense when
% \pkg{endfloat} is loaded.\footnote{However, if you find yourself
% placing other material (such as double spacing or modification
% of title page and abstract) into \file{endfloat.cfg} to
% simulate a journal submission class, you should really
% do the right thing and create a journal submission class.
% Creating a minor class (one that loads an existing class
% such as \cls{article} is not difficult.  See the
% \textit{Class Guide}\cite{LT3:ClassGuide} for instructions.  Future versions
% of the \pkg{endfloat} documentation may include a sample.}
%
% The configuration file can also provided
% so that the user could specify environments other
% than |figure| and |table| (and their |*|-ed counterparts) which can
% be delayed until the end of the document.
%
% \subsection{Modified figures and tables}
%
% As stated in \autoref{sec:envnames}, \pkg{endfloat} will
% utterly fail if one does something like
% \begin{quote}
%   |\newenvironment{foo}{...\begin{table}...}|\\
%   |    {...\end{table}...}|
% \end{quote}
% because \pkg{endfloat} will make |\begin{table}| go into a verbatim
% like mode and look for the literal string |\end{table}|, which it
% will not see in |\end{foo}|.
%
% However, inserting the following code into the document preamble
% may be worth a try:
% \begin{quote}
%   |\DeclareDelayedFloatFlavor{foo}{table}|
% \end{quote}
% This tells the \pkg{endfloat} package that |foo| should be treated as |table|,
% at least from \pkg{endfloat}'s point of view.
% If you keep your fingers crossed this may actually work.
%
% \subsection{Environments based on figures and tables}\label{sec:flavor}
%
% The \pkg{rotating} package\cite{RahBar:rotating}
% contains definitions of environments
% |side|\x|ways|\x|figure| and |side|\x|ways|\x|table|\footnote{These
% require support from the dvi driver, such as \texttt{dvips}.},
% and it would be nice to have these work in documents which also
% use \pkg{endfloat}.
%
% This can be archived with
% \begin{quote}
%   |\DeclareDelayedFloatFlavor{sidewaysfigure}{figure}|\\
%   |\DeclareDelayedFloatFlavor{sidewaystable}{table}|
% \end{quote}
% after loading both, the \pkg{endfloat} and \pkg{rotating} package.
%
% The general syntax of |\Declare|\x|Delayed|\x|Float|\x|Flavor| is
% \begin{quote}
%   |\DeclareDelayedFloatFlavo|(|u|)|r|\marg{environment}\marg{is a variant of}
% \end{quote}
% so for example
% \begin{quote}
%   |\usepackage{endfloat,threeparttable}|\\
%   |\DeclareDelayedFloatFlavour{threeparttable}{table}|
% \end{quote}
% makes the |three|\x|part|\x|table| environment known to the \pkg{endfloat} package
% as a variant of the floating environment |table|.
%
% This works with the |long|\x|table| environment as well:
% \begin{quote}
%   |\usepackage{endfloat,longtable}|\\
%   |\DeclareDelayedFloatFlavour*{longtable}{table}|
% \end{quote}
% Note that we use the starred variant |\Declare|\x|Delayed|\x|Float|\x|Flavor*|
% here which only redefines |long|\x|table| to be delayed, but leaves the unnumbered
% |long|\x|table*| environment (provided by the \pkg{caption} resp.~\pkg{ltcaption} package)
% unchanged.
%
% \subsubsection{The ctable package}\label{sec:ctable}
%
% Since |\ctable| offered by the \pkg{ctable} package\cite{Dekker:ctable}
% is a command and not an environment, it cannot be declared as delayed
% environment straight-ahead, i.e.
% \begin{quote}
%   |\DeclareDelayedFloatFlavor{ctable}{table}|
% \end{quote}
% is not sufficient here since the \pkg{endfloat} package is only
% capable of delaying environments.
% A dirty (but working) solution is using |ctable| as environment
% and not as command. An example document:
% \begin{quote}
%   |\documentclass{book}|\\
%   |\usepackage{ctable}|\\
%   |\usepackage{endfloat}|\\
%   |\DeclareDelayedFloatFlavor{ctable}{table}|\\
%   |\begin{document}|\\
%   ||\\
%   |\begin{ctable}[|\\
%   | cap=Test,|\\
%   | caption=Test,|\\
%   | ]{cc}{|\\
%   | \tnote[]{}|\\
%   | }{\FL|\\
%   | A & B \ML|\\
%   | 1 & 2 \NN|\\
%   | 3 & 4 \LL}|\\
%   |\end{ctable}|\\
%   ||\\
%   |\end{document}|
% \end{quote}
%
% \subsection{Other floating environments}\label{sec:other}
%
% By using |\new|\x|float| offered by the \pkg{float} package\cite{Lingnau:float},
% or |\Declare|\x|New|\x|Float|\x|Type| offered by the \pkg{floatrow} package\cite{Lapko:floatrow},
% or |\Declare|\x|Floating|\x|Environment| offered by the \pkg{newfloat}
%  package\cite{Sommerfeldt:newfloat}
% one can define new floating environments. These environments
% can be made supported by the \pkg{endfloat} package, too, e.g.
% \begin{quote}
%   |\usepackage{newfloat,endfloat}|\\
%   |\DeclareFloatingEnvironment{map}|\\
%   |\DeclareDelayedFloat{map}{Maps}|
% \end{quote}
% will define a new floating environment called ``map'' and
% set up the \pkg{endfloat} package to handle this environment, too.
%
% The trick is using the command
% \begin{quote}
%   |\DeclareDelayedFloat|\marg{float}\oarg{file extension}\marg{heading}
% \end{quote}
% which makes the new floating environment known to the \pkg{endfloat} package.
%
% The \meta{file extension} specifies the file where the floating environments
% will be stored, like |fff| for figures and |ttt| for tables.
% If no \meta{file extension} is given, |ef|\meta{float} will be used, e.g. |efmap|
% will be used as file extension in the code example above.
%
% The \meta{heading} will be used for the section header, if selected.
% If |\list|\meta{float}|name| is not defined, it will be used for the list heading, too.
%
% The package options |nolists|, |lists|, |noheads|, and |heads| will be respected
% for new environments, too. But if you would like to set individual options for
% them, you can do so by using
% \begin{quote}
%   |\SetupDelayedFloat|\marg{float}\marg{options}
% \end{quote}
% where options are |nolist|, |list|, |nohead|, and |head| analogous to the package
% options for figures and tables specified in section \ref{sec:options}.
%
% By the way, |\Setup|\x|Delayed|\x|Float| works for the environments |figure| and
% |table|, too, so
% \begin{quote}
%   |\usepackage[nofiglist,fighead]{endfloat}|
% \end{quote}
% is identical to
% \begin{quote}
%   |\usepackage{endfloat}|\\
%   |\SetupDelayedFloat{figure}{nolist,head}|
% \end{quote}
% and (if you prefer using key-value options instead)
% \begin{quote}
%   |\usepackage{endfloat}|\\
%   |\SetupDelayedFloat{figure}{list=false,head=true}|
% \end{quote}
%
% \subsection[Changing list and caption appearance]
%     {Changing the appearence of ``lists of'' and captions}
%
% When the |lists| option is used, the \LaTeX\ commands |\list|\-|of|\-|tables|
% and |\list|\-|of|\-|figures| are called.  These produce lists indicating
% the page number that each table or figure appear on.  With \pkg{endfloat}
% in use this information is usually superfluous, and -- rumor has it --
% undesirable by at least some journals.
% What seems to be required
% when using lists is that either the list does not the figure or table number,
% and/or the caption doesn't not contain the caption text.
%
% This section provides a few rudimentary samples of what you might
% put into the configuration file to get these effects.  I have chosen
% not to make these package options, because they are often too journal
% specific.  The availability of the configuration file means that
% you can put this things there, and the differences between \pkg{endfloat}
% using and non-\pkg{endfloat} using \LaTeX\ source documents is minimal.
%
% \subsubsection{Removing captions}
% \label{sec:removingcaptions}
%
% \DescribeMacro{\captionsetup}
% If you have included the \pkg{caption} package in your document
% you can omit the caption text by adding
% \begin{quote}
%  |\captionsetup{labelsep=none,textformat=empty}|
% \end{quote}
% to the preamble of your document.~\footnote{%
% This needs at least version $3.2$ of the \pkg{caption} package.}
% If this should be done for figures (or tables) only one can use the
% optional argument of |\caption|\x|setup|, e.g.:
% \begin{quote}
%  |\captionsetup[figure]{labelsep=none,textformat=empty}|
% \end{quote}
% See \pkg{caption} package documentation for details and alternatives.
%
% \DescribeMacro{\@makecaption}
% If the \pkg{caption} package is not used, the simplest thing
% is to provide a redefinition of |\@makecaption|.
% You should model your redefinition after the one used in the
% document class you actually use instead of blindly
% following what is here.  |\@makecaption| takes two arguments, the
% first will be something like ``figure 3'' and the second will
% be the caption text.  We will simply ignore the second argument.
% Most of the tricky bit of the definition
% is about testing whether the caption is longer than a line.  Since
% we will only be using the first argument, we can safely assume that
% the caption will fit on one line.\footnote{If you have 
% \texttt{\bs figurename} as something absurdly long or a
% very narrow \texttt{\bs textwidth},
% then you will have to use a more complicated version.}
% Your redefinition of |\@makecaption| may look like
% \begin{quote}
%   |\renewcommand{\@makecaption}[2]{%|\\
%   |  \vskip\abovecaptionskip|\\
%   |  \hbox to \hsize{\hfil #1\hfil}%|\\
%   |  \vskip\belowcaptionskip}|
% \end{quote}
% 
% \DescribeMacro{\caption}
% This still leaves one problem.   If you use
% \begin{quote}\ttfamily
%   |\caption|\oarg{short caption text}\marg{full caption text}
% \end{quote}
% only the short caption text will ever appear in the list of tables or
% figures.  The following redefinition of |\caption| will take care of
% that.
%
% Again, first of all a solution for usage with the \pkg{caption} package:~\footnote{%
% This needs at least version $3.3$ of the \pkg{caption} package.}
% \begin{quote}
%   |\captionsetup{list-entry=heading}|
% \end{quote}
%
% If the \pkg{caption} package is not used,
% the following code should be used instead:
% \begin{quote}
%   |\let\OrigCaption\caption|\\
%   |\renewcommand{\caption}[2][X]{\OrigCaption[#2]{}}|
% \end{quote}
%
% \subsubsection{Eliminating numbers from lists of tables and figures}
%
% This is a bit trickier, and I have heard that it doesn't work
% with all versions of \LaTeXe, but I am unwilling to reinstall
% and older version for debugging this.
% A user [get the name] suggested that page numbers be suppressed
% in the lists of figures and tables.
%
% \begin{macro}{\l@figure}
% \begin{macro}{\l@table}
% All this requires is a redefinition of |\l@figure| and |\l@table|
% which are defined in \texttt{classes.txt}.  Also see section~2.4.1 of the
% \emph{Companion} to see how these macros are called.
%
% The real only trick here is that |\l@figure| is defined to take
% two arguments, but the second is never used.  The way it will be
% called will give it something like
% \begin{quote}
%   |{\numberline {3} Caption of that figure}{85}|
% \end{quote}
% as arguments, where the second argument is the page number.
% The |\numberline| command will make use of the \LaTeX\ register
% |\@tempdima| for the width of the box containing the table
% or figure number.  So we need to set that.
% The rest is pretty unsophisticated.  You can, of course, modify it
% at will.
% \begin{quote}
%   |\renewcommand*{\l@figure}[2]{%|\\
%   |   \setlength\@tempdima{2.3em}%|\\
%   |   \noindent\hspace*{1.5em}#1\hfil\newline }|
% \end{quote}
% And for tables:
% \begin{quote}
%   |\let\l@table\l@figure|
% \end{quote}
% \end{macro}
% \end{macro}
% 
% \section{Obsolete commands}\label{sec:obsolete}
%
% Versions of the package prior to 2.2 had some commands which the
% user could specify in the preamble to do what \emph{some} of the
% options do now.  Although I would like to eventually remove those
% commands, they are documented in the \textit{Companion}; so they
% will remain for quite some time.
% 
% \section{Caveats}\label{sec:caveats}
%
% Some of the things that are listed here may be considered bugs,
% design errors, interactions to watch out for, or just the
% way life is sometimes.  They are, at least, a matter of concern, and you
% should watch out for them.
% 
% \subsection{Literal strings}
%
% When floats are being read, \LaTeX\ is in verbatim mode.  Among
% other things, this means that the lines like
% \begin{quote}
%   |\end{figure}|
% \end{quote}
% or
% \begin{quote}
%   |\end{figure}%|
% \end{quote}
% must appear on lines by themselves without any whitespace before
% or after them.  A complete reimplementation of the most difficult
% part of the package is required to fix this limitation, but
% it is among the distant goals I have.
%
% \subsection{Extra files}
% This creates two extra files: \texttt{\meta{jobname}.fff} and
% \texttt{\meta{jobname}.ttt}.  Any files by those names
% in the current directory will be overwritten.
%
% \subsection{Environment names} \label{sec:envnames}
%
% Because of how the redefinitions of \texttt{figure} and \texttt{table}
% are actually implemented, it is crucial that these environment
% names be used.  That is, you cannot simply define a new environment which
% calls \texttt{figure} or \texttt{table} since the former must
% look for the literal string
% \begin{quote}
%   |\end{figure}|
% \end{quote}
% in the document, while doing no expansion of control sequences.
% The latter does the same, but wants |table| instead of
% |figure|.  This caution generally applies to all `verbatim-like'
% environments
%
% Although I haven't been able to confirm this yet, the
% \LaTeX\ system ScientificWord\footnote{A registered trademark.
% Write to info@tcisoft.com for more information.}
% may automatically put floats
% inside a macro called \verb"\FFRAME".  If so, I hope
% that either someone from ScientificWord or one of its
% users will create something for \verb"\FFRAME" similarly to
% what I have done for \verb"\sidewaystable" in the sample configuration
% file (\autoref{sec:extra}).
%
% \subsection{The Environment's environment}\label{sec:envenv}
% \changes{v2.1b}{1994/07/03}{Modify documentation -jpg}
%
% Because no \TeX\ expansion is done while the material in these
% floats are read in, but is delayed until the floats are
% processed at the end of the document, it will be the state of
% \TeX\ at the end which will matter.  For example, a document
% with something like
% \begin{quote}
%   |\newcommand{\XXX}{YYY}|\\
%   \ldots\\
%   |\begin{table}|\\
%   \ldots\\
%   \ldots |\XXX| \ldots\\
%   \ldots\\
%   |\end{table}|\\
%   \ldots\\
%   |\renewcommand{\XXX}{ZZZ}|\\
%   \ldots\\
%   |\end{document}|
% \end{quote}
%  will process the table with |\XXX| expanding to |ZZZ|.
%
% In any particular instance, the user can use either re-redefine
% |\XXX| before the end of document, or can re-redefine it using
% on of the hooks, |\At|\x|Begin|\x|Delayed|\x|Floats|, |\At|\x|Begin|\x|Tables|,
% or |\At|\x|Begin|\x|Figures|, which are discussed in \autoref{sec:hooks}.
%
% \subsection{Verbatim in delayed floats}\label{sec:verbatim}
%
% There should be no problem with verbatim text within a
% float unless that verbatim text contains an |\end{figure}| or
% |\end{table}| in a figure or table respectively.  I don't see
% a fix for this.  All I can imagine is that you create a new
% delayed type which behaves exactly like |figure| (or |table|)
% (even writing |\begin{figure}| and |\end{figure}| to the
% \texttt{.fff} file. [\textit{mutatis mutandis} for |table|])
% In future versions, I may create a sample like this in the
% sample configuration file, but it is a low priority since
% the only time one would write such a figure or table would
% be in a document about \LaTeX\ and it is difficult to imagine
% circumstances where a document about \LaTeX\ would need to
% be subject to \pkg{endfloat}.
%
% \subsection{Ordering End Document material}\label{sec:enddocument}
%
% \changes{v2.1b}{1994/07/03}{Modify documentation -jpg}
%
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% \changes{v2.1}{1994/06/25}{Use AtEndDocument. jpg}
%
% Version 2.1 uses the \LaTeXe\ directive |\AtEndDocument|.  This
% makes it \LaTeXe\ specific, but it means that it can be used
% with other packages that use that directive.  Previous versions
% of \pkg{endfloat} redefined |\enddocument|.  Now several
% packages or commands can add stuff at the ends of documents
% and still work together.  This does mean that \emph{the order
% of loading packages can be important!}  If you use several
% packages that may use the |\AtEndDocument| directive and you
% get funny results, try loading them in a different order.
% It that doesn't work, complain to the maintainer of the packages
% so that they will work out a way for the packages to interact
% correctly.
%
% \changes{v2.1}{1994/06/25}{Use AtEndDocument. jpg}
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% \changes{v2.1b}{1994/07/03}{Modify documentation -jpg}
%
% \subsubsection{General ordering and wish list}\label{sec:order}
%
% I believe that the output of a \LaTeXe\ run should be independent
% of the order in which package are loaded.  It would be possible
% to set this up, but it would take coordination of all package
% writers who use |\AtEndDocument|.  The actual call to |\AtEndDocument|
% would not occur during package loading, but some new command,
% like |\ExecuteAtEndDocument| would be called by the user after
% all such packages are loaded, with tags for each thing in the
% packages, so something like
% \begin{quote}
%   |\usepackage{lastpage}|\\
%   |\usepackage{endfloat,xyzzy}|\\
%   |\ExecuteAtEndDocument{endfloat,xyzzy,lastpage}|
% \end{quote}
% and the order of End Document material would be the \pkg{endfloat}
% material, followed by \textsf{xyzzy}, and finally by \pkg{lastpage}.
% The package \pkg{xyzzy} is fictitious, while the
% package \pkg{lastpage}\cite{Goldberg:lastpage} exists,
% it doesn't really matter what these do.
% 
% I will have to wait until someone else develops such a system, but
% I will gladly modify the packages I am responsible for maintaining
% to comply with it.  Until then
% I will include a message
% which begins with \texttt{AED}
% in every usage of |\At|\x|End|\x|Document|, and try to minimize any side
% effects my usage may have.
% \changes{v2.1b}{1994/07/03}{Modify documentation -jpg}
%
% \subsection{What are packages for?} \label{sec:monoton}
% 
% \changes{v2.1b}{1994/07/03}{Modify documentation -jpg}
%
% One option is to not have packages like \pkg{endfloat} actually call
% |\At|\x|End|\x|Document|, but merely define a user level command which
% would make the call itself.  This way, the order of those particular
% commands would matter, but not the ordering of the package loading.
%
% Another advantage of this is that packages could easily be things
% which make commands available, but do not actually entail
% a change in \texttt{.dvi} output themselves.  It is classes,
% and options to classes which do that.  That is, the actual
% loading of packages should have no visible effects, other than
% making new commands available.  (Typeface changing
% packages, such as \textsf{times}, are obvious, and principled, exceptions.)
% The disadvantage is that it leads
% to two-step modifications (loading and calling) to change
% a document.
%
% I would propose any package (other than typeface changing
% packages) which changes output instead of merely providing additional
% commands, should be clearly labeled as doing such in the documentation
% and in a message.
% 
% \subsection{Float position specifiers} \label{sec:gobble}
%
% Float position specifiers are passed to the temporary files
% and are used when those floats are processed.  This may lead
% to funny results, especially if the first figure or first table uses
% |[p]| while the |heads| option is being used.  This can lead to
% that float, floating to the page after the header.
% Most other float specifiers will not lead to any problems, because
% the package mucks about the various float specification parameters.
%
% \subsection{Misplaced headers} \label{sec:buggyheads}
%
% Version 2.2c contains a partial fix to a problem with the placement
% of floats around the section headers produced by the |heads| option.
% There were two variants of the problem.  In one the first float
% after the header would float above the header.  This has been fixed
% by using the \LaTeXe\ command |\suppressfloats|.  The other
% problem is that that the first float may float to a page float
% after the page with the header on it.
%
% This has been partially fixed, but
% if users use the |[p]| specification on their first floats or if
% there are large floats, the problem can still
% show up.  It is recommended that whenever the user wants a |[p]| that
% an |[hp]| be used instead.  In normal running (without \pkg{endfloat}),
% this should only rarely effect the document, but it will help avoid
% the problem with the floating end float.  An |[h]| may also be needed for
% large floats.  There is only need to be concerned about the first
% figure and first table.
%
% The natural solution to this problem will require that the bug
% in described in \autoref{sec:gobble} be resolved.
%
% \subsection{Known incompatibilities}
%
% Above I have outlined sources of potential conflicts and incompatibilities
% with other packages.  Those sections contain a discussion of potential
% work-arounds.  Here I list where I know of specific incompatibilities
% with distributed packages.  This list is not complete.  If you know
% on an addition, please let me know.
%
% \subsubsection{Environment names}
%
% The packages listed here all have the problem described in
% \autoref{sec:envnames}.  The work-arounds are also described
% there.  \pkg{rotating}, \emph{Scientific Word}.
%
% \subsubsection{Ordering end material}
%
% The following packages put things at the end of the document, and
% peculiar results are possible if you don't pay attention to the
% order in which packages are loaded.  This is described in
% \autoref{sec:order}.  The package \pkg{lastpage} is among
% these, as are recent versions of the package \pkg{harvard}.
%
% \subsubsection{Conflicting \cs{enddocument}}
%
% Prior to \LaTeXe's provision of the hook |\AtEndDocument|, package
% writers were forced to redefine |\enddocument|.  Some did so
% in ways that over wrote any other package's redefinition of the
% same.  When you encounter such a package you should try to get
% its author to release a modified version.  Version~2.0 of \pkg{endfloat}
% was such a packages.   So was the winter 1993 version of~\pkg{harvard}
% (which has been fixed).  But
% for those using an old version of \pkg{harvard} you will encounter
% problems.
%
% \subsubsection{Miscellaneous}
%
% There are several other potential conflicts that don't fall into
% the broader categories.
%
% \begin{itemize}
% \item |\listoftables| and |\listoffigurers| are left undefined
%     in class \cls{elsart}.  But this is because Elsevier does
%     not want those lists.  Elsevier, bless them, does not want
%     floats at the end for submissions to its journals.  So
%     there is no reason to use \pkg{endfloat} (with or without lists)
%     with class \cls{elsart}.  Let's hope that other publishers
%     will follow Elsevier's lead in understanding that the
%     submission rules which were created were created for a reason,
%     and when those reasons no longer apply, the rules should be changed.
%
%     I look forward to the day when \pkg{endfloat} will serve
%     no purpose.
%
% \item The \pkg{float} package appears to work in my limited tests.
%
% \item The \pkg{floatrow} package appears to work in my limited tests.
% But please note that the \pkg{endfloat} package needs to be loaded
% \emph{after} the \pkg{floatrow} package.
%
% \item The \pkg{newfloat} package appears to work in my limited tests, too.
%
% \end{itemize}
%
% \section{Support}\label{sec:support}
%
% As is usual, this package is provided with no warranty whatsoever.
% However, it is my desire to make it useful and usable, although
% I may very well fail at that.  If you
% need a feature added, see whether the hooks will allow you to
% do what you want.  If something goes wrong look over
% \autoref{sec:caveats}.
% \iffalse % Currently this package has no active maintainer
% But if you need to get in touch
% with the maintainer, you should send email at
% \texttt{axel.sommerfeldt@f-m.fm}.
% \fi
%
% \section{History}\label{sec:history}
% \changes{v2.1}{1994/06/25}{Use LaTeX2e documentation form. jpg}
% \changes{v2.1}{1994/06/25}{Use AtEndDocument. jpg}
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
%
% \subsection{The burden of history}
%
% By version 2.2 the file was getting so that most of the bytes
% were things that had been commented out of previous versions,
% and changelog messages.  Instead of this making things clearer
% to the maintainer, it turns out to be clutter.  I (jpg) have started
% to throw out some of history (it is not really useful to see
% who corrected what typo or cleaned up what extraneous space
% with a |%| in 1991.  Although my purge of history is far
% from complete, it should be noted that I do want to preserve
% the spirit of the history.  I have already been miscredited
% with original authorship.  I have made extensive modifications
% and extensions, but the basic core (even if only a small amount
% of version 2.0 code remains) and concept are JDM's.
%
% \subsection{Author}
% The file was written by Darrell McCauley (jdm5548@diamond.tamu.edu)
% in February and March 1992.   He acknowledges that much of the
% guts are adapted from
% \texttt{comment.sty} by Victor Eijkhout (eijkhout@csrd.uiuc.edu).
% So, although Jeff Goldberg (jeffrey@goldmark.org) has maintained
% this afterwards, he should not be credited with writing the package,
% but only with extending and maintaining it.
% He has contributed enough so that by version~2.4 he claimed
% co-authorship.
% The same applies to Axel Sommerfeldt (axel.sommerfeldt@f-m.fm)
% who build version 2.5 with permission of Jeff Goldberg and has
% maintained this package from version 2.6 to version 2.7.
%
% \subsection{Version 2.7}
%
% Version 2.7 was build by Axel Sommerfeldt (axel.sommerfeldt@f-m.fm),
% and introduces the following changes:
% \begin{itemize}
% \item
% A new package option |disable| has been added which disables the
% functionality of the \pkg{endfloat} package
% (\autoref{sec:options}).
% \item
% A new command |\add|\x|to|\x|delayed|\x|float| has beed added
% which adds code to a specific delayed float type
% (\autoref{sec:addto}).
% \item
% More customization was introduced with the new macros
% |\efloat|\x|begin|, |\efloat|\x|end|, |\efloat|\x|begin|\x|list|,
% and |\efloat|\x|end|\x|list|.
% They can be re-defined by the user to influence the process
% of delayed floats and the typesetting of lists of delayed floats
% (\autoref{sec:customizations}).
% \item
% Unfortunately the bugfix regarding the usage of UTF-8 characters
% in floating environments introduced in version 2.6 was flawed,
% this has been fixed.
% \end{itemize}
%
% \subsection{Version 2.6}
%
% Version 2.6 was build by Axel Sommerfeldt (axel.sommerfeldt@f-m.fm),
% and introduces the following changes:
% \begin{itemize}
% \item
% New package options |no|\x|tables| and |no|\x|figures| have been added
% to allow better control over which floating environments
% will be handled by the \pkg{endfloat} package (\autoref{sec:options}).
% \item
% New macros called |\efloat|\x|type|, |\efloat|\x|heading|, |\efloat|\x|preamble|,
% and |\efloat|\x|postamble| have been added which allow the user more control
% over how the delayed floats are typeset (\autoref{sec:separator}).
% \item
% A percent sign (|%|) is now allowed at the end of |\end|\marg{environment}, too, e.g.:
% \begin{quote}
%   |\begin{figure}|\\
%   |  |\ldots\\
%   |\end{figure}%|
% \end{quote}
% \item
% Two bugs have been fixed regarding the usage of UTF-8 characters in floating environments.
% \end{itemize}
%
% \subsection{Version 2.5}
%
% Version 2.5 was build by Axel Sommerfeldt (axel.sommerfeldt@f-m.fm)
% with permission of Jeff Goldberg, and introduces the following changes:
% \begin{itemize}
% \item
% New commands
% |\Declare|\x|Delayed|\x|Float| and |\Declare|\x|Delayed|\x|Float|\x|Flavor|
% for handling floating environments other than |figure| and |table|,
% and |\Setup|\x|Delayed|\x|Float| for setting options
% (\autoref{sec:flavor} and \autoref{sec:other}).
% To make this possible a lot of internal code had to be reorganized,
% but by trying to keep original versions of macros and trying to leave the
% operational sequence itself as original as possible this hopefully won't break
% compatibility with existing documents or extensions written for the
% \pkg{endfloat} package.
%
% \item
% New package options |tables|\x|only| and |figures|\x|only| have been added
% to allow better control over which floating environments
% will be handled by the \pkg{endfloat} package (\autoref{sec:options}).
%
% \item
% The \pkg{endfloat} package should cooperate with
% the \pkg{floatrow} package now, at least if you load it \emph{after}
% the \pkg{floatrow} package.
%
% \item
% Older versions of the \pkg{endfloat} package used to process |figure| and
% |table| as starred variant always, but at least version $2.4$ did not.
% It had stored all of them as starred variant into the temporary files, but had
% processed them as non-starred always.
% To make this more consistent the version $2.5$ does store the environments
% as they are now, and processes them the same way, i.e.~non-starred
% variants will be stored and processed as non-starred, and starred variants
% will be stored and processed as starred.
% \end{itemize}
% If you notice a change in behaviour after updating the \pkg{endfloat}
% package to version 2.5, please contact me (Axel) and I'll try to fix this.
%
% \subsection{Version 2.4}
%
% Version 2.4 involves the largest set of additional features
% since at least version 2.2 (which added all the options).  Some
% of these are
% \begin{itemize}
%
% \item
% This version adds various user hooks, both as commands:
% |\At|\x|Begin|\x|Figures|, |\At|\x|Begin|\x|Tables|, and
% |\At|\x|Begin|\x|Delayed|\x|Floats| (\autoref{sec:hooks}),
% and |\efloat|\x|separator| (\autoref{sec:separator}).
%
% \item
% Most importantly, there is the addition of a configuration file
% (\autoref{sec:extra}).  An example configuration file contains
% code which allows \pkg{endfloat} to work properly with
% the \texttt{sidewaystable} environment of the \pkg{rotating}
% package.
%
% \item
% Additionally, all figures and tables are written as |figure*| and
% |table*| in the temporary files, eliminating the need to force single
% column mode when table and figures are processed.
%
% \item
% There are a fair number of internal changes to the code (which
% make it easier for the various hooks to work).
%
% \item
% Also changed some internal command names, such as |\xtable|,
% which did not include |@| to names that to include |@| such as
% |\ef@extable|.  Also renamed all commands |\end...| to something
% else so as to not use up valuable environment name space.
%
% \item
% Removed dead code.  It was making this too hard to read.
%
% \item
% Documentation changes to reflect user level changes.  Also added
% more to the Caveats section (\autoref{sec:caveats}).
% 
% \end{itemize}
%
% During the past few months I have received a wonderful level
% of feedback from users.   Many made very useful suggestions.
% Even those queries which resulted from a misunderstanding of
% how to use the package have been lead me to modify the
% documentation.  I had intended to acknowledge all of you,
% but the list has grown too long.  You know who you are.  Thanks,
% and good luck with your journal submissions!
%
% \subsection{Version 2.3}
% 
% Very minor changes in the organization of some parts of the
% code, but I fixed a bug I introduced while ``cleaning up'' for
% for version~2.2:  I had misunderstood part of the original
% code and commented out a necessary trick to allow for |figure*|
% The bug was very real, so I am releasing this version~2.3 as soon
% as I can document it, and am not waiting to include other planned
% improvements.
%
% \subsection{Version 2.2}
%
% A user (Kate Hedstrom) pointed out a number of bugs and shortcomings,
% which led me (jpg) to finally sit down and make some of the changes
% I had been planning on making.  The effect of the |tablesfirst| option
% was specifically requested, and also work on the bug discussed
% in \autoref{sec:buggyheads}.  Although my bug fix is partial,
% version 2.2 includes the means to suppress the headers altogether.
%
% \subsubsection{Package options}
%
% I, jpg, have used the package option facility of \LaTeXe\
% to get other options (described in \autoref{sec:options}).
% I also made some cosmetic changes (breaking up lines to reduce
% the number of overfull boxes when printing the documentation,
% line breaks and indentation to make the code more readable.
% I also replaced some |\def|s with |\newcommand|s and
% |\providecommand|s.  This are not logged, because I actually
% found that all of the logging information was hampering my
% ability to read and modify the code.
%
% \subsubsection{Internal commands}
%
% In version 2.2, I also replaced some code internal
% to |\xfigure| and |\xtable| with |\efloat@foundendfig|
% and |\efloat@foundendtab|.  This was merely a stylistic
% change.
%
% I also deleted some some definitions
% which are not used.  These had had probably been left as hooks, but with
% not enough for them to be useful hooks.  There are some cases where
% I have left these in when I could see what they could be used for.
% I have tried to add a note as to their potential use.
%
% \subsubsection{Documentation}
%
% Massive changes to user documentation, and some to the code
% documentation.
%
% \subsection{Version 2.1}
%
% I, Jeffrey Goldberg, in June 1994 wanted to use Darrell McCauley's
% \file{endfloat.sty} with \LaTeXe.  It worked fine until I
% needed to use the \LaTeXe\ directive |\At|\x|End|\x|Document| for
% some other function, and discovered that it was not functioning
% and that it was because version 2.0 (and earlier) of
% \texttt{endnotes.sty} redefined |\end|\x|document|.   The
% fix that I needed was trivial, but it made the file no
% longer compatible with \LaTeX209.  As a consequence, it seemed
% that the only way I could make up for this crime was to make
% it fully compatible with \LaTeXe.
%
% \subsection{Minor changes (version 2.0)}
%
% A series of changes and fixes were made in March 1992.  Many
% by the original author others by  Ronald Kappert (R.Kappert@urc.kun.nl)
% who replaced literal strings with |\figurename|, and so on; and
% by schultz@unixg.ubc.ca who pointed out gobbling bug with
% |\nomarkersintext|.
%
% \subsection{Brian Junker's modifications (version 2.0)}
%
% Brian Junker (brian@stat.cmu.edu) made a number of fixes.
% Here are his change comments:
% \changes{v1.99}{1992/05/27}{extensive changes by bj}
%
% \begin{enumerate}
%   \item Changed ``comment" to ``figure" and ``komment" to
%                      ``table" throughout, to avoid collisions with other
%                      style files' definitions of ``comment".  Also
%                      fixes |\begin{table}| ends with |\end{komment}|
%                      error generated by my (older) version of PC\TeX.
%
%   \item Fixed gobble of float position specifiers.
%         There are two ways to do this:
%         \begin{enumerate}
%         \item |\write\ifnextchar[{\gobbleuntilnext}{}|
%                      into every
%                      environment written to |\jobname.fff|, etc.;
%          \item save \LaTeX's old def's of |\figure| and |\table|
%                      and re-use them when processing fig's and tables.
%                      I chose the latter approach, for maximum
%                      consistency with \LaTeX, other style files, etc.
%          \end{enumerate}
%
%  \item Added def's of |\tablename| and |\figurename|,
%                      which my version of PC-\TeX\ seemed to need.
%                      [backward compatibility for earlier versions ---jdm]
%
%  \item Moved formatting of figure and table markers to
%                      |\figure|\x|place| and |\table|\x|place|.
%
%   \item Style change: in-text markers are now
%                      centered reminders like ``[Figure 4 about here.]".
%
%    \item Style change: added list of tables and
%                      figures to the table and figure sections.
%                      Change back to old format with |\nofiglist| and
%                      |\notablist|.
%
%    \item Changed default to |\markersintext|.
%
%     \item Fixed trivial typo in |\@openposttbls|
% \changes{v1.99}{1992/05/27}{extensive changes by bj}
% \end{enumerate}
%  All changes marked |% bj| at end of line.
%  ---Brian Junker (brian@stat.cmu.edu)
%
% \section{Wish list}
%
% I doubt that I will really work on this wish list in the near future
% but in addition to solving the know bugs, there is one major sort of
% change that I (jpg) would like to see:
% \begin{itemize}
% \item
%    Updating the verbatim writing by using the tools in the
%    |verbatim| standard packages, and the |moreverb| package.
%    Since they provide more generalized an cleaner verbatim code
%    then this which dates back to the earliest days of \LaTeX.
% \end{itemize}
%
% \begin{thebibliography}{1}
% 
% \bibitem{Goldberg:lastpage}
% Jeffrey Goldberg.
% \newblock The \texttt{lastpage} package.
% \newblock Electronic documentation
% 
% \bibitem{A-W:GMS94}
% Michel Goossens, Frank Mittelbach, and Alexander Samarin.
% \newblock {\em The {\LaTeX} Companion}
% \newblock Addison-Wesley, Reading, Massachusetts, 1994.
%  
% \bibitem{LT3:ClassGuide}
% The \LaTeX3 Project.
% \newblock \emph{\LaTeXe\ for class and package writers}
% \newblock (Preliminary draft) June 1994
% \newblock Electronic Documentation
%
% \bibitem{Lingnau:float}
% Anselm Lingnau.
% \newblock An Improved Environment for Floats
% \newblock August 2001 (version~1.3)
% \newblock Electronic Documentation
%
% \bibitem{Lapko:floatrow}
% Olga Lapko.
% \newblock The floatrow package
% \newblock August 2009 (version~0.3)
% \newblock Electronic Documentation
%
% \bibitem{Sommerfeldt:newfloat}
% Axel Sommerfeldt.
% \newblock The newfloat package
% \newblock November 2011 (version~1.0)
% \newblock Electronic Documentation
%
% \bibitem{RahBar:rotating}
% Sebastian Rahtz and Leonor Barroca.
% \newblock A style option for rotated objects in \LaTeX{}
% \newblock April 1994 (version~2)
% \newblock Electronic Documentation
%
% \bibitem{Dekker:ctable}
% Wybo Dekker.
% \newblock The ctable package
% \newblock October 2015 (version~1.31)
% \newblock Electronic Documentation
% \end{thebibliography}
%
% \StopEventually{\PrintIndex\PrintChanges}
% \clearpage
%
% \section{The documentation driver file}
%
% \changes{v2.1}{1994/06/25}{Use LaTeX2e documentation form. jpg}
% The next bit of code contains the documentation driver file for
% \TeX{}, i.e., the file that will produce the documentation you are
% currently reading. It will be extracted from this file by the
% \texttt{docstrip} program.
%    \begin{macrocode}
%<*driver>
\documentclass{ltxdoc}
\setlength\hfuzz{2pt}    % ignore small overfulls
%
\usepackage{ifpdf}
\ifpdf
  \usepackage{mathptmx,courier}
  \usepackage[scaled=0.90]{helvet}
\fi
%
\usepackage{hypdoc}
\ifpdf\usepackage{hypdestopt}\fi
\hypersetup{pdfkeywords={LaTeX, package, endfloat},pdfstartpage={},pdfstartview={}}
%
\CodelineIndex
\EnableCrossrefs
 %\DisableCrossrefs   % Say \DisableCrossrefs if index is ready
 %\RecordChanges      % Gather update information
 \OnlyDescription    % comment out for implementation details
\begin{document}
  \let\subsectionautorefname\sectionautorefname
  \let\subsubsectionautorefname\sectionautorefname
   \DocInput{endfloat.dtx}
\end{document}
%</driver>
%    \end{macrocode}
% \changes{v2.1}{1994/06/25}{Use LaTeX2e documentation form. jpg}
%
% \section{The implementation}
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
%
% \subsection{File and package identification}
%
% We start by checking if this file was already loaded. If not we
% identify the current version.
% \changes{v2.1}{1994/06/25}{Use LaTeX2e package form. jpg}
%    \begin{macrocode}
%<*package>
\NeedsTeXFormat{LaTeX2e}[1994/06/01]
\ProvidesPackage{endfloat}[\filedate\space\fileversion\space
               LaTeX2e package puts figures and tables at end (jdm)]
%    \end{macrocode}
% \changes{v2.1}{1994/06/25}{Use LaTeX2e package form. jpg}
%
% \subsection{How it was written}
% [this subsection mostly based on jdm's original text.]
%
% Overview: redefine the figure and table environment following 
% the |comment| environment of
% \texttt{comment.sty} written by Victor Eijkhout
% \texttt{eijkhout@csrd.uiuc.edu}.
%
% Instead of processing what was between |\begin{...}| and |\end{...}|,
% every line is written to a file (|\jobname.fff| for figures, |\jobname.ttt|
% for tables).  Then, when you do an |\end{document}|, the figure section
% is processed, then the table section is processed.  The |tablesfirst|
% option changes this order.
%
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% \changes{v2.1}{1994/06/25}{Use AtEndDocument. jpg}
%
% After initial versions, I [jdm] received much help from Ronald Kappert
% and Brian Junker (see change log below). \emph{Thanks guys!}
%
% \subsection{Define warning message}
%
% Since I, JPG, am making the commands options, I want to warn users
% to use the options, since these commands should be discontinued
% in future versions.
%
% Since these commands are available now for over two decades,
% I, AS, think that it would be a bad idea removing them now.
% So I decided to drop the warning message introduced by JPG instead.
%
% \subsection{Flags}
%
% Put all of the newifs for the user options and flags here.
% Note that these are global flags only,
% the ones bound to a specific environment will be defined
% inside |\Declare|\x|Delayed|\x|Float| instead. 
%
% I (as) have added the definition of |\Setup|\x|Delayed|\x|Float|
% here in version 2.5.
%
%    \begin{macrocode}
\newif\if@domarkers
\newif\if@tablist                % bj
\newif\if@figlist                % bj
\newif\if@tabhead
\newif\if@fighead
\newif\if@tablesfirst
\newif\ifefloat@figures          % as
\newif\ifefloat@tables           % as
\newif\ifefloat@list             % as
\newif\ifefloat@head             % as
%    \end{macrocode}
%
% \begin{macro}{\efloat@syncobsoleteflags}
% The switches |\if@tablist|, |\if@figlist|, |\if@tabhead|, and |\if@fighead|
% are obsolete, but still needed by some old (and unmaintained) document classes
% and packages. So we still support them, and keep them in sync with the values
% actually used by the \pkg{endfloat} package.
% \changes{v2.5c}{2011/12/22}{This macro added. as}
%    \begin{macrocode}
\newcommand*\efloat@syncobsoleteflags{%
  \efloat@ifflag{tablelist}{\@tablisttrue}{\@tablistfalse}%
  \efloat@ifflag{figurelist}{\@figlisttrue}{\@figlistfalse}%
  \efloat@ifflag{tablehead}{\@tabheadtrue}{\@tabheadfalse}%
  \efloat@ifflag{figurehead}{\@figheadtrue}{\@figheadfalse}}
%    \end{macrocode}
% \end{macro}
%
%
% \subsubsection{Default values}
%
% Set default values of all of the (global) flags here.
%
%    \begin{macrocode}
\@domarkerstrue
\@tablisttrue
\@figlisttrue
\@tabheadfalse
\@figheadfalse
\@tablesfirstfalse
\efloat@figurestrue              % as
\efloat@tablestrue               % as
\efloat@listtrue                 % as
\efloat@headfalse                % as
%    \end{macrocode}
%
% \begin{macro}{\SetupDelayedFloat}
% While global flags will be set using package options,
% environment specific flags will be set with |\Setup|\x|Delayed|\x|Float|.
% \changes{v2.5}{2011/11/26}{This command added. as}
% \changes{v2.5c}{2011/12/22}{Usage of \cs{efloat@syncobsoleteflags} added. as}
% \changes{v2.7}{2019/04/14}{Text of error message changed. as}
%    \begin{macrocode}
\RequirePackage{keyval}
%    \end{macrocode}
%    \begin{macrocode}
\newcommand*\SetupDelayedFloat[2]{%
  \def\efloat@type{#1}%
  \setkeys{endfloat}{#2}}
%    \end{macrocode}
%    \begin{macrocode}
\define@key{endfloat}{list}[true]{\efloat@setkey{list}{#1}}
\define@key{endfloat}{nolist}[]{\efloat@setkey{list}{false}}
\define@key{endfloat}{head}[true]{\efloat@setkey{head}{#1}}
\define@key{endfloat}{nohead}[]{\efloat@setkey{head}{false}}
%    \end{macrocode}
%    \begin{macrocode}
\newcommand*\efloat@setkey{%
  \@expandtwoargs\efloat@@setkey\efloat@type}
\newcommand*\efloat@@setkey[3]{%
  \efloat@ifdelayed{#1}{%
    \efloat@setflag{#1#2}{#3}%
    \efloat@syncobsoleteflags}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@ifdelayed}
% Check if the given environment is a delayed float type.
% If yes, execute the given code.
% If not, issue an error message.
% \changes{v2.7}{2019/04/14}{This macro added. as}
%    \begin{macrocode}
\newcommand\efloat@ifdelayed[2]{%
  \@ifundefined{ef@ext@#1}%
    {\PackageError{endfloat}%
      {`#1' is not a delayed float type}%
      {Only environments known to the `endfloat' package are allowed here.}}%
    {#2}}%
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@ifflag}
% |\efloat@ifflag|\marg{flag}\marg{yes-code}\marg{no-code}
% tests if a flag has been set.
% \changes{v2.5a}{2011/12/04}{This macro added. as}
%    \begin{macrocode}
\newcommand*\efloat@ifflag[1]{%
  \@nameuse{ef@if@#1}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@setflag}
% |\efloat@setflag|\marg{flag}\marg{value}
% sets a flag to the given boolean value.
% \changes{v2.5a}{2011/12/04}{This macro added. as}
%    \begin{macrocode}
\newcommand*\efloat@setflag[2]{%
  \@nameuse{if#2}%
    \global\expandafter\let\csname ef@if@#1\endcsname\@firstoftwo
  \else
    \global\expandafter\let\csname ef@if@#1\endcsname\@secondoftwo
  \fi}%
%    \end{macrocode}
% \end{macro}
%
% \subsection{Other preliminaries}
%
% I (jpg) have been slowly working at making more and more of the
% code for processing tables and figures common, with the idea
% that once I have factored out all that is common with them
% I will be then be able to set up code for other floats,
% I have still a very long way to go, but common code created
% for version 2.3 is here.
%
% I (as) have added the definition of |\Declare|\x|Delayed|\x|Float|
% and |\Declare|\x|Delayed|\x|Float|\x|Flavor| here in version 2.5.
%
% \begin{macro}{\efloat@newwrite}
% attempt to reduce old |\@openpostfigs| and |\@openposttbls| to
% one command
% The first one calls |\newwrite| so, |\efloat@newwrite{ttt}|
% will have the effect of |\newwrite\efloat@postttt|.
%    \begin{macrocode}
\newcommand*\efloat@newwrite[1]{%
   \expandafter\newwrite\csname efloat@post#1\endcsname}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@openpost}
% |\efloat@openpost{ttt}| will be the same as
% \begin{quote}
%   |\immediate\openout\efloat@postttt=\jobname.ttt\relax|
% \end{quote}
% while also calling |\efloat@setflag{ttt}{true}| to set a flag
% (|@ef@tttopen|) in the case of |ttt|.
% \changes{v2.5a}{2011/12/04}{\cs{ef@setct} replaced by \cs{efloat@setflag}. as}
% \changes{v2.5c}{2011/12/22}{\cs{efloat@setflag} replaced by \cs{ef@setct}. as}
%    \begin{macrocode}
\newcommand*\efloat@openpost[1]{%
   \expandafter\immediate\expandafter\openout
      \csname efloat@post#1\endcsname =\jobname.#1\relax
   \ef@setct{#1}{1}%
   \message{(\jobname.#1)}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@closepost}
% Close the file for writing.  Set a flag saying so.
% \changes{v2.6}{2018/03/24}{This macro added. as}
%    \begin{macrocode}
\newcommand*\efloat@closepost[1]{%
   \expandafter\immediate\expandafter\closeout\csname efloat@post#1\endcsname
   \ef@setct{#1}{0}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\ef@newct}
% \begin{macro}{\ef@setct}
% \begin{macro}{\ef@ifct}
% |\ef@newct{ttt}| will create a new counter called |\@ef@tttopen|
% and |\ef@setct{ttt}{1}| would set it to 1.\par
% To offer best compatibility to version $2.4$ we still use these counters
% although using |\efloat@setflag{tttopen}{1}| would be a better alternative.
% (Otherwise the \pkg{apa} document class would break.)
% \changes{v2.5c}{2011/12/22}{\cs{ef@ifct} added by as}
%    \begin{macrocode}
\newcommand*\ef@newct[1]{%
  \expandafter \newcount \csname @ef@#1open\endcsname}
\newcommand*\ef@setct[2]{%
  \expandafter\global\csname @ef@#1open\endcsname=#2\relax}
\newcommand*\ef@ifct[1]{%
  \expandafter\ifnum \csname @ef@#1open\endcsname>0 \relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\efloat@condopen}
% Conditionally open a file
% \changes{v2.5a}{2011/12/04}{\cs{ifnum} replaced by \cs{efloat@ifflag}. as}
%    \begin{macrocode}
\newcommand*\efloat@condopen[1]{%
   \ef@ifct{#1}{}{\efloat@openpost{#1}}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@iwrite}
% Immediate write to one of these files.
% |\protected@iwrite| was taken from https://tex.stackexchange.com/questions/75951/
% \changes{v2.6}{2018/03/18}{Bugfix: Uses \cs{protected@write} now. as}
% \changes{v2.7}{2019/04/14}{Bugfix: Uses \cs{protected@iwrite} now. as}
%    \begin{macrocode}
\providecommand\protected@iwrite[3]{%
  \begingroup
  \let\thepage\relax
  #2%
  \let\protect\@unexpandable@protect
  \edef\reserved@a{\immediate\write #1{#3}}%
  \reserved@a
  \endgroup
  \if@nobreak\ifvmode\nobreak\fi\fi}
%    \end{macrocode}
%    \begin{macrocode}
\newcommand\efloat@iwrite[1]{%
  \expandafter\protected@iwrite\csname efloat@post#1\endcsname{}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\addtodelayedfloat}
% Immediate write to one of these files.
% While |\efloat@iwrite| is for internal use, this one if for usage in end-user documents.
% \changes{v2.7}{2019/04/14}{This macro added. as}
% \changes{v2.7}{2019/04/15}{Starred variant added. as}
%    \begin{macrocode}
\newcommand\addtodelayedfloat{%
  \@ifstar{\efloat@addto\@firstofone}{\efloat@addto\detokenize}}
%    \end{macrocode}
%    \begin{macrocode}
\newcommand\efloat@addto[3]{%
  \efloat@ifdelayed{#2}{%
    \expandafter\efloat@@addto\expandafter{\csname ef@ext@#2\endcsname}{#1{#3}}}}
%    \end{macrocode}
%    \begin{macrocode}
\newcommand\efloat@@addto[1]{%
  \efloat@condopen{#1}\efloat@iwrite{#1}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloatheading}
% This macro changes the page headings.
% By default it is defined to use |\markboth| for this purpose,
% but you may redefine this command in the configuration file or preamble.
% \changes{v2.6}{2018/03/18}{This macro added. as}
%    \begin{macrocode}
\providecommand\efloatheading[1]{%
  \markboth{\uppercase{#1}}{\uppercase{#1}}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloatpreamble}
% |\efloat|\x|preamble| will be typeset in front of the delayed floating environments.
% By default it does nothing; if you want it to be something else,
% you may redefine this command in the configuration file or preamble.
% \changes{v2.6}{2018/03/24}{This macro added. as}
%    \begin{macrocode}
\providecommand\efloatpreamble{}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloatseparator}
% A user suggested that in some cases we may not wish
% to force \pkg{endfloat} to put each float on a page by itself.
% By default that is what it does, by defining |\efloat|\x|separator|
% to be |\clear|\x|page|.  If you want it to be something else,
% you may redefine this command in the configuration file or preamble.
% \changes{v2.6}{2018/03/24}{Use \cs{providecommand} instead of \cs{newcommand} to define this macro. as}
%    \begin{macrocode}
\providecommand\efloatseparator{\clearpage}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloatpostamble}
% |\efloat|\x|postamble| will be typeset at the end of the delayed floating environments.
% By default that is what it does, by defining |\efloat|\x|postamble|
% to be |\efloat|\x|separator|.  If you want it to be something else,
% you may redefine this command in the configuration file or preamble.
% \changes{v2.6}{2018/03/24}{This macro added. as}
%    \begin{macrocode}
\providecommand\efloatpostamble{\efloatseparator}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloatbegin}
% |\efloatbegin| will be typeset when the processing of the delayed float begins.
% \changes{v2.7}{2019/04/15}{This macro added. as}
%    \begin{macrocode}
\providecommand\efloatbegin{\clearpage}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloatend}
% |\efloatend| will be typeset when the processing of the delayed float ends.
% \changes{v2.7}{2019/04/15}{This macro added. as}
%    \begin{macrocode}
\providecommand\efloatend{}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloatbeginlist}
% |\efloatbeginlist| will be typeset before the list of a delayed float.
% \changes{v2.7}{2019/04/15}{This macro added. as}
%    \begin{macrocode}
\providecommand\efloatbeginlist{\normalsize}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloatendlist}
% |\efloatendlist| will be typeset after the list of a delayed float.
% \changes{v2.7}{2019/04/15}{This macro added. as}
%    \begin{macrocode}
\providecommand\efloatendlist{\clearpage}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\ef@makeinnocent}
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% \changes{v2.1b}{1994/07/03}{Modify documentation -jpg}
%    \begin{macrocode}
\newcommand*{\ef@makeinnocent}[1]{\catcode`#1=12 }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\figurename}
% \begin{macro}{\tablename}
% Make sure that |\tablename| and |\figurename| are defined.
%    \begin{macrocode}
\providecommand{\figurename}{Figure}
\providecommand{\tablename}{Table}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\floatplace}
% Place marker.
% \changes{v1.0b}{1992/03/10}{adaptation for LaTeX 2.09 and
%                      international namegiving by Ronald Kappert
%                      R.Kappert@urc.kun.nl}
% \changes{v1.99}{1992/05/27}{extensive changes by bj}
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% \changes{v2.1}{1994/06/25}{Use LaTeX2e documentation form. jpg}
% \changes{v2.5}{2011/11/26}{universalized by as}
%    \begin{macrocode}
\newcommand{\floatplace}[1]{%
   \begin{center} 
     [\csname #1name\endcsname~\csname thepost#1\endcsname\ about here.]
   \end{center}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\DeclareDelayedFloat}
% This one prepares the given environment for cooperation with the \pkg{endfloat}
% package, i.e.~|figure| resp.~|table|.
% \changes{v2.5}{2011/11/26}{This command added. as}
% \changes{v2.5a}{2011/12/04}{\cs{ef@newct} replaced by \cs{efloat@setflag}. as}
% \changes{v2.5b}{2011/12/05}{Starred variant added. as}
% \changes{v2.5c}{2011/12/22}{\cs{efloat@setflag} replaced by \cs{ef@newct}. as}
%    \begin{macrocode}
\newcommand*\DeclareDelayedFloat{%
  \@ifstar{\efloat@declare{*}}{\efloat@declare{}}}
\@onlypreamble\DeclareDelayedFloat
%    \end{macrocode}
%    \begin{macrocode}
\newcommand*\efloat@declare[2]{%
  \@testopt{\efloat@@declare{#1}{#2}}{ef#2}}
\@onlypreamble\efloat@declare
%    \end{macrocode}
%    \begin{macrocode}
\def\efloat@@declare#1#2[#3]#4{%
%    \end{macrocode}
% Counters
% \changes{v1.99}{1992/05/27}{extensive changes by bj}
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
%    \begin{macrocode}
  \newcounter{post#2}%
%    \end{macrocode}
% Remember the file extension in |\ef@ext@|\meta{environment}.
%    \begin{macrocode}
  \edef\@tempa{#3}%
  \edef\@tempb{\@nameuse{ext@#2}}%
  \ifx\@tempa\@tempb
    \PackageError{endfloat}%
      {File extension `\@tempa' is already used by the List}%
      {Try using a different file extension here, e.g. `ef\expandafter\@gobbletwo\@tempa'.}%
  \else
    \expandafter\let\csname ef@ext@#2\endcsname\@tempa
  \fi
%    \end{macrocode}
% Code for opening the |\jobname.fff|
%    \begin{macrocode}
  \efloat@newwrite{#3}%
  \ef@newct{#3}%
%    \end{macrocode}
% Place marker
% (Note: The \pkg{float} package uses |\fname@|\textit{X} as float name,
% but we need |\|\textit{X}|name| in |\float|\x|place|.)
%    \begin{macrocode}
  \@ifundefined{#2name}{\@namedef{#2name}{\@nameuse{fname@#2}}}{}%
  \efloat@namedef{#2place}{\floatplace{#2}}%
%    \end{macrocode}
% Re-define float.
%    \begin{macrocode}
  \DeclareDelayedFloatFlavor#1{#2}{#2}%
%    \end{macrocode}
% Define the heading title. (Only relevant if option |fighead| is set.)
%    \begin{macrocode}
  \expandafter\providecommand\csname #2section\endcsname{#4}%
%    \end{macrocode}
%    \begin{macrocode}
%    \end{macrocode}
% Here we set-up the hooks for getting stuff into |\process...|
% commands easily.
%    \begin{macrocode}
  \efloat@namedef{process#2s@hook}{}%
  \edef\@tempb{\def\noexpand\@tempa{\@car#2\@nil}}%
  \uppercase\expandafter{\@tempb}%
  \edef\@tempb{%
    \noexpand\g@addto@macro\noexpand\@tempa{\@cdr#2\@nil}}%
  \@tempb
  \efloat@namedef{AtBegin\@tempa s}{%
    \expandafter\g@addto@macro\csname process#2s@hook\endcsname}%
  \expandafter\expandafter\expandafter\let\expandafter
    \csname AtBegin\@tempa es\expandafter\endcsname
    \csname AtBegin\@tempa s\endcsname
%    \end{macrocode}
%    \begin{macrocode}
  \efloat@namedef{process#2s}{\efloat@process{#3}{#2}}%
  \efloat@namedef{process#2es}{\@nameuse{process#2s}}%
%    \end{macrocode}
% Flags: Set default values of all of the flags here.
%    \begin{macrocode}
  \efloat@@setkey{#2}{list}{efloat@list}%
  \efloat@@setkey{#2}{head}{efloat@head}%
%    \end{macrocode}
% Finally add the environment to the list of delayed floats
%    \begin{macrocode}
  \@cons\efloat@list{{#2}}}
\@onlypreamble\efloat@@declare
%    \end{macrocode}
%    \begin{macrocode}
\newcommand*\efloat@list{}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@namedef}
% Same as \cs{@namedef} from the \LaTeX\ kernal,
% but uses \cs{newcommand} instead of \cs{def}.
% \changes{v2.5c}{2011/12/23}{This macro added}
%    \begin{macrocode}
\newcommand*\efloat@namedef[1]{%
  \expandafter\newcommand\csname #1\endcsname}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\DeclareDelayedFloatFlavor}
% \begin{macro}{\DeclareDelayedFloatFlavour}
% This one redefines the given environment, i.e. |figure| resp. |table|.
% While the non-starred variant redefines both variants (non-starred and starred),
% the starred variant only redefines the environment as given.\par
% We do this |\At|\x|Begin|\x|Document| so we are (hopefully) redefining this
% environment as the very last package.
% (Otherwise \pkg{endfloat} would not work with \pkg{floatrow}.)
% \changes{v2.5b}{2011/12/05}{This command added. as}
% \changes{v2.7}{2019/04/14}{Text of error message changed. as}
%    \begin{macrocode}
\newcommand*\DeclareDelayedFloatFlavor{%
  \@ifstar{\efloat@declareflavor\@gobble}%
          {\efloat@declareflavor\@iden}}
\@onlypreamble\DeclareDelayedFloatFlavor
\let\DeclareDelayedFloatFlavour\DeclareDelayedFloatFlavor
\@onlypreamble\DeclareDelayedFloatFlavour
%    \end{macrocode}
%    \begin{macrocode}
\newcommand*\efloat@declareflavor[3]{%
  \efloat@ifdelayed{#3}{%
    \efloat@AtBeginDocument{%
      \efloat@@declareflavor{#2}{#3}%
      #1{\efloat@@declareflavor{#2*}{#3}}}}}
\@onlypreamble\efloat@declareflavor
%    \end{macrocode}
%    \begin{macrocode}
\newcommand*\efloat@@declareflavor[2]{%
  \def\@tempa{\@efloat{#2}{#1}}%
  \@ifundefined{efloat@#1@ORI}%
%    \end{macrocode}
% Save old definition of the environment.
%    \begin{macrocode}
    {\expandafter\expandafter\expandafter\let\expandafter
       \csname efloat@#1@ORI\expandafter\endcsname
       \csname #1\endcsname
%    \end{macrocode}
% Restore old definition of the environment at |\efloat@restore|\x|floats|.
%    \begin{macrocode}
     \expandafter\g@addto@macro\expandafter\efloat@restorefloats\expandafter{%
       \expandafter\let
         \csname #1\expandafter\endcsname
         \csname efloat@#1@ORI\endcsname}%
%    \end{macrocode}
% Re-define float.
%    \begin{macrocode}
     \expandafter\let\csname#1\endcsname\@tempa}%
%    \end{macrocode}
%    \begin{macrocode}
    {\expandafter\ifx\csname#1\endcsname\@tempa \else
       \PackageError{endfloat}%
         {The environment `#1' was already redefined}%
         {You can't use \noexpand\DeclareDelayedFloatFlavor twice for a given environment.}%
     \fi}}
\@onlypreamble\efloat@@declareflavor
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\efloat@AtBeginDocument}
% To be compatible to version $2.4$ we usually redefine |\figure| and |\table| immediately.
% But if the \pkg{floatrow} package is loaded we can't, so we have to use
% |\At|\x|Begin|\x|Document| here.
% (Note: |\efloat@At|\x|Begin|\x|Document| will be defined using |\provide|\x|command|
% so document classes and packages can pre-define it if needed.)
% \changes{v2.5c}{2011/12/22}{This command added. as}
% \changes{v2.5d}{2011/12/23}{Revised. as}
%    \begin{macrocode}
\@ifpackageloaded{floatrow}{%
  \PackageInfo{endfloat}{`floatrow' package detected, delaying redefinitions}
  \providecommand*\efloat@AtBeginDocument{\AtBeginDocument}
}{%
  \providecommand*\efloat@AtBeginDocument{\@iden}
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@restorefloats}
% Restore the original definition of all environments (floats and flavors)
% known to the \pkg{endfloat} package.
% This macro will be filled with life by |\Declare|\x|Delayed|\x|Float|\x|Flavor|.
% \changes{v2.5}{2011/11/26}{This macro added by as}
%    \begin{macrocode}
\newcommand*\efloat@restorefloats{}
%    \end{macrocode}
% \end{macro}
%
% \subsection{Options and (obsolete) Commands}
%
% \begin{macro}{\efloat@SetOption}
% Sets an option (via |\efloat@Setup|) for all environments known to
% the \pkg{endfloat} package.
% \changes{v2.5}{2011/11/26}{This macro added. as}
%    \begin{macrocode}
\newcommand*\efloat@SetOption[1]{%
  \def\@elt##1{\efloat@Setup{##1}{#1}}%
  \efloat@list
  \let\@elt\relax}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@Setup}
% Within option code we can't use |\Setup|\x|Delayed|\x|Float| since
% |figure| and |table| are not declared as delayed floating environments yet.
% So we use |\efloat@Setup| instead which will simply collect the settings for
% execution at a later stage.
% \changes{v2.5a}{2011/12/03}{This macro added. as}
%    \begin{macrocode}
\newcommand\efloat@Setup[2]{%
  \g@addto@macro\efloat@ProcessOptions{%
    \SetupDelayedFloat{#1}{#2}}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@ProcessOptions}
% Processes options setup with |\efloat@Setup|.
% \changes{v2.5a}{2011/12/03}{This macro added. as}
%    \begin{macrocode}
\newcommand\efloat@ProcessOptions{%
  \let\efloat@SetOption\@undefined
  \let\efloat@Setup\@undefined
  \let\efloat@ProcessOptions\@undefined}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\markersintext}
% \begin{macro}{\nomarkersintext}
% First set up flags and defaults.  First set for flagging
% whether markers appear in text.
% \changes{v1.99}{1992/05/27}{extensive changes by bj}
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% \changes{v2.1}{1994/06/25}{Use LaTeX2e documentation form. jpg}
% \changes{v2.2a}{1994/10/07}{Create new options}
%    \begin{macrocode}
\DeclareOption{nomarkers}{\@domarkersfalse}
\DeclareOption{markers}{\@domarkerstrue}
%    \end{macrocode}
%    \begin{macrocode}
\newcommand{\markersintext}{\@domarkerstrue}
\newcommand{\nomarkersintext}{\@domarkersfalse}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\dotablist}
% \begin{macro}{\notablist}
% Options for creating lists of Tables \ldots
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% \changes{v1.99}{1992/05/27}{extensive changes by bj}
% \changes{v2.1}{1994/06/25}{Use LaTeX2e documentation form. jpg}
% \changes{v2.5}{2011/11/26}{We use \cs{SetupDelayedFloat} now. as}
%    \begin{macrocode}
\newcommand{\dotablist}{%
  \SetupDelayedFloat{table}{list=true}}
\newcommand{\notablist}{%
  \SetupDelayedFloat{table}{list=false,head=true}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\dofiglist}
% \begin{macro}{\nofiglist}
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% \changes{v1.99}{1992/05/27}{extensive changes by bj}
% \changes{v2.1}{1994/06/25}{Use LaTeX2e documentation form. jpg}
% \changes{v2.5}{2011/11/26}{We use \cs{SetupDelayedFloat} now. as}
% \ldots and Figures
%    \begin{macrocode}
\newcommand{\dofiglist}{%
  \SetupDelayedFloat{figure}{list=true}}
\newcommand{\nofiglist}{%
  \SetupDelayedFloat{figure}{list=false,head=true}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% Now we make options |tablist| and |notablist| and |figlist| and
% |nofiglist|.  Note that options will be processed in order of
% the |\DeclareOption| commands in this file.  So by placing
% |list| after |nolist| we ensure that if both are specified, |list|
% is in effect.
%
% First two new options
%    \begin{macrocode}
\DeclareOption{nolists}{\efloat@listfalse \efloat@SetOption{list=false}}
\DeclareOption{lists}{\efloat@listtrue \efloat@SetOption{list=true}}
%    \end{macrocode}
% Now the more specific ones, which must come after the more
% general options to get the right interactions between semi-conflicting
% options.
%    \begin{macrocode}
\DeclareOption{notablist}{\efloat@Setup{table}{list=false}}
\DeclareOption{nofiglist}{\efloat@Setup{figure}{list=false}}
\DeclareOption{tablist}{\efloat@Setup{table}{list=true}}
\DeclareOption{figlist}{\efloat@Setup{figure}{list=true}}
%    \end{macrocode}
% 
% The \texttt{notablist} and \texttt{nofiglist} options still leave
% a section header at the beginning of the tables and figures.
%
% Note again the role that order plays, by placing |fighead| after
% |noheads| it ensures that |fighead| will be in effect if both
% are specified.
%    \begin{macrocode}
\DeclareOption{heads}{\efloat@headtrue \efloat@SetOption{head=true}}
\DeclareOption{noheads}{\efloat@headfalse \efloat@SetOption{head=false}}
%    \end{macrocode}
%    \begin{macrocode}
\DeclareOption{fighead}{\efloat@Setup{figure}{head=true}}
\DeclareOption{tabhead}{\efloat@Setup{table}{head=true}}
\DeclareOption{nofighead}{\efloat@Setup{figure}{head=false}}
\DeclareOption{notabhead}{\efloat@Setup{table}{head=false}}
%    \end{macrocode}
% Also need option for putting tables first
%    \begin{macrocode}
\DeclareOption{tablesfirst}{\@tablesfirsttrue}
\DeclareOption{figuresfirst}{\@tablesfirstfalse}
%    \end{macrocode}
% \changes{v2.5a}{2011/12/03}{Options `tablesonly' and `figuresonly' added. as}
%    \begin{macrocode}
\DeclareOption{tablesonly}{\efloat@figuresfalse \efloat@tablestrue}
\DeclareOption{figuresonly}{\efloat@figurestrue \efloat@tablesfalse}
%    \end{macrocode}
% \changes{v2.6}{2018/03/04}{Options `tables' and `figures' added. as}
%    \begin{macrocode}
\DeclareOption{notables}{\efloat@tablesfalse}
\DeclareOption{nofigures}{\efloat@figuresfalse}
%    \end{macrocode}
% Other option stuff
% \changes{v2.7}{2019/01/10}{Option `disable' added. as}
%    \begin{macrocode}
\newcommand*\efloat@AtEndDocument{\AtEndDocument}
\DeclareOption{disable}{%
  \def\efloat@@declare#1#2[#3]#4{%
    \PackageInfo{endfloat}{`#2' is not delayed since option `disable' was specified}}%
  \renewcommand*\efloat@declareflavor[3]{}%
  \renewcommand*\efloat@@setkey[3]{}%
  \renewcommand*\efloat@AtEndDocument{\@gobble}%
  \AtBeginDocument{\renewcommand*\processdelayedfloats{}}}
%    \end{macrocode}
%    \begin{macrocode}
\DeclareOption*{%
   \PackageError{endfloat}%
     {Unknown option `\CurrentOption'}%
     {Please take a look at the documentation of the `endfloat' package.}}
%    \end{macrocode}
% Process (global) options
%    \begin{macrocode}
\ProcessOptions*
%    \end{macrocode}
% For compatibility reasons we still store the original code of `figure' and `table'
% to |\@bfig| and |\@btab| although we don't make use of it anymore.
%    \begin{macrocode}
\let\@bfig\figure             % bj
\let\@btab\table              % bj
%    \end{macrocode}
% Declare `figure' and `table' as delayed floating environment, if requested
%    \begin{macrocode}
\if@tablesfirst
  \ifefloat@tables
    \DeclareDelayedFloat{table}[ttt]{Tables}
  \fi
  \ifefloat@figures
    \DeclareDelayedFloat{figure}[fff]{Figures}
  \fi
\else
  \ifefloat@figures
    \DeclareDelayedFloat{figure}[fff]{Figures}
  \fi
  \ifefloat@tables
    \DeclareDelayedFloat{table}[ttt]{Tables}
  \fi
\fi
%    \end{macrocode}
% Process environment specific options
%    \begin{macrocode}
\efloat@ProcessOptions
%    \end{macrocode}
%
% \begin{macro}{\thepostfig}
% \begin{macro}{\theposttbl}
% For compatibility reasons we still offer the old counters
% |postfig| and |posttbl|, so existing redefinitions of |\figure|\x|place|
% and |\table|\x|place| resp. existing extensions to the \pkg{endfloat} package
% will still work.
%    \begin{macrocode}
\let\c@postfig\c@postfigure
\let\c@posttbl\c@posttable
\newcommand\thepostfig{\thepostfigure}
\newcommand\theposttbl{\theposttable}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \subsection{Parsing \texttt{figure} and \texttt{table}}
% \changes{v1.99}{1992/05/27}{extensive changes by bj}
% 
% Now we get the utilities for parsing needed to
% get unmodified code into files.
%    \begin{macrocode}
\let\efloat@float\relax
%    \end{macrocode}
%
% \begin{macro}{\@efloat}
% the {blank space } appearing with |\nomarkersintext| was fixed by adding
% a percent sign (|%|) at strategic locations, determined by setting
% |\tracingcommands=1| ---Darrell
% 
% As mentioned by the jdm above, the following is based
% on \texttt{comment.sty}.  It appears that the idea is to
% turn off all control sequence processing and read in from
% input each line, until a line is found that looks like
% |\end{figure}|.  Thus the actual name of the environment
% is hardcoded into the use of the macros
% (see \autoref{sec:envnames}).  ---jpg]
%
% \changes{v1.1}{1992/03/13}{verified that floats were
%               used before a section was
%               created for them. jdm}
% \changes{v1.2}{1992/03/14}{corrected typo that may have caused figures not
%                      to be printed. jdm}
% \changes{v1.99}{1992/05/27}{extensive changes by bj}
% \changes{v2.0}{1992/06/02}{Corrected problem of extra blank spaces in
%                      the output when nomarkersintext was in effect
%                      (bug reported by schultz@unixg.ubc.ca).
%                      jdm}
% \changes{v2.1}{1994/06/25}{Use LaTeX2e documentation form. jpg}
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% \changes{v2.1b}{1994/07/03}{Modify documentation -jpg}
% \changes{v2.5}{2011/11/26}{universalized by as}
% \changes{v2.5b}{2011/12/05}{revised by as}
% \changes{v2.6}{2018/03/18}{Re-defines \cs{efloat@endtestX} and \cs{efloat@enddbltestX}, too. as}
% \changes{v2.6}{2018/03/24}{Writes \cs{efloatseparator} into the file, if necessary. as}
%    \begin{macrocode}
\newcommand*\@efloat[1]{%
  \expandafter\@@efloat\expandafter{\csname ef@ext@#1\endcsname}{#1}}
%    \end{macrocode}
%    \begin{macrocode}
\newcommand*\@@efloat[3]{%
%    \end{macrocode}
%    \begin{macrocode}
% If we have already done one table then the file we write to
% is already open, and there is nothing to do, else open it up.
%    \begin{macrocode}
  \efloat@condopen{#1}%
%    \end{macrocode}
% Write |\efloatseparator| into the file, if necessary.
%    \begin{macrocode}
  \@nameuse{efloat@separator@#1}%
%    \end{macrocode}
% Since the figures are not actually processed until much later, we don't
% use \LaTeX's figure numbering mechanism, but we use our own.   Also
% put marker in text (if option set).  In the future, I may combine
% the counter for the markers and the counter used as a flag for
% whether the file is open into one thing.
%    \begin{macrocode}
  \if@domarkers
    \stepcounter{post#2}% % bj
    \@nameuse{#2place}%   % bj
  \fi
%    \end{macrocode}
% |\@currenvir| (current environment) it set to fool
% latex into expecting the end of this environment
% to match the environment name.   It will be used more extensively
% when dealing with the problem discussed in \autoref{sec:envnames}.
%    \begin{macrocode}
  \def\@currenvir{efloat@float}%
%    \end{macrocode}
% Now we set up catcodes for reading in text without processing
% things.  But need to make |^^M| special since we want to read
% line by line.
%    \begin{macrocode}
  \begingroup
  \let\do\ef@makeinnocent \dospecials
  \ef@makeinnocent\^^L% and whatever other special cases
  \endlinechar`\^^M \catcode`\^^M=12 %
%    \end{macrocode}
% Patch |\efloat@endtest| so it contains the actual environment name.
%    \begin{macrocode}
  \efloat@patch\efloat@endtest{#3}% as
  \efloat@patch\efloat@enddbltest{#3}% as
  \efloat@patch\efloat@endtestX{#3}% as
  \efloat@patch\efloat@enddbltestX{#3}% as
%    \end{macrocode}
% We have read a |\begin{figure}| to get here.  We need to write that
% into the file. \par
% I (jpg) would add the |[htb]| parameters to what
% gets written, but that leaves any float specifiers that had
% been employed by the user wandering around in the floated material.
%    \begin{macrocode}
  \def\next{\efloat@xfloat{#1}}%
  \next\string\begin{#3}}%
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@foundend}
% When |\ef@xfigure| is verbatim-like reading the figure it has to
% do some clean-up after it as found the |\end{figure}| or
% |\end{figure*}|.  This is it.  [this part written by jpg v2.2]\par
% Note that this macro will not be used by the \pkg{endfloat} package
% itself anymore, but we'll leave it here so extensions written for the
% \pkg{endfloat} package which uses it will still work.
%    \begin{macrocode}
\newcommand*\efloat@foundend[2]{%
  \edef\efloat@enddbltest{\string\end{#2}}%
  \efloat@found@end{#1}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@found@end}
% This is the new version of \cs{efloat@foundend}, actually used
% by this package.
% \changes{v2.5}{2011/11/26}{This variant of \cs{efloat@foundend} added by as}
% \changes{v2.6}{2018/03/24}{Writing \cs{efloatseparator} delayed until next \cs{@efloat}. as}
%    \begin{macrocode}
\newcommand*\efloat@found@end[1]{%
%    \end{macrocode}
% Write |\end{figure}| into the file, followed by |\efloatseparator|.
%    \begin{macrocode}
  \efloat@iwrite{#1}{\efloat@enddbltest}%
  \global\@namedef{efloat@separator@#1}{%
    \efloat@iwrite{#1}{\string\efloatseparator}%
    \efloat@iwrite{#1}{ }}%
%    \end{macrocode}
% Re-define |\next| so the current floating environment will be closed.
%    \begin{macrocode}
  \def\next{\endgroup\end{efloat@float}}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@xfloat}
% |\efloat@xfloat| reads line by line, checking whether each line
% is the |\end{figure}|.  If it is, then write out end stuff
% to the file.  Otherwise write out read in line to the
% file and do the |\next| line.
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% \changes{v2.1b}{1994/07/03}{Modify documentation -jpg}
% \changes{v2.5}{2011/11/26}{universalized by as}
% \changes{v2.5}{2011/11/26}{\cs{long} added. as}
% \changes{v2.5c}{2011/12/22}{renamed from \cs{ef@xfigure} to \cs{efloat@xfloat} by as}
% \changes{v2.6}{2018/03/18}{Actual test out-sourced to \cs{efloat@if@end}. as}
%    \begin{macrocode}
{\catcode`\^^M=12 \endlinechar=-1 %
 \long\gdef\efloat@xfloat#1#2^^M{%
  \efloat@if@end{#2}{\efloat@found@end{#1}}{\efloat@iwrite{#1}{#2}}%
  \next}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@if@end}
% |\efloat@if@end| tests if the given argument marks the end of the current floating environment.
% If yes, |\@firstoftwo| will be executed, |\secondoftwo| otherwise.
% \changes{v2.6}{2018/03/18}{This macro added. as}
% \changes{v2.6}{2018/03/18}{Tests \cs{efloat@endtestX} and \cs{efloat@enddbltestX}, too. as}
%    \begin{macrocode}
\newcommand\efloat@if@end[1]{%
  \def\test{#1}%
  \let\efloat@next\@firstoftwo
%    \end{macrocode}
% Test for |\end{figure}|
%    \begin{macrocode}
  \ifx\test\efloat@endtest
%    \end{macrocode}
% Test for |\end{figure*}|
%    \begin{macrocode}
  \else\ifx\test\efloat@enddbltest
%    \end{macrocode}
% Test for |\end{figure}%| and |\end{figure*}%|
%    \begin{macrocode}
  \else\ifx\test\efloat@endtestX
  \else\ifx\test\efloat@enddbltestX
%    \end{macrocode}
% Finally, if none of the above, we have a line of text in the
% body of the figure which should be written to the file.
%    \begin{macrocode}
  \else
    \let\efloat@next\@secondoftwo
  \fi\fi\fi\fi \efloat@next}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@endtest}
% \iffalse
% Generalizing these end\ldots{}test so that they
% can be used for user specified floating environments will
% require more |\expandafter|s then you can shake a stick at.
% I am not looking forward to taking on that task.  I should
% look at the version control package to see what I can
% lift from there, since it must be the same problem.
% \fi
% I (as) have generalized this end\ldots{}test so it can be
% used for user specific floating environments as well.
% I did this by simply replacing |figure| with |X|, this will be patched
% to the correct environment name in |\@efloat| by using |\efloat@patch|.
% \changes{v2.1}{1994/06/25}{Use LaTeX2e documentation form. jpg}
% \changes{v2.1b}{1994/07/03}{Modify documentation -jpg}
% \changes{v2.5}{2011/11/26}{`figure' replaced by 'X' and documentation modified. as}
% \changes{v2.6}{2018/03/18}{\cs{efloat@endtestX} and \cs{efloat@enddbltestX} are used for the test, too. as}
%    \begin{macrocode}
{\escapechar=-1%
 \catcode`\#=14 % hash mark is comment character
 \catcode`\%=12 # percent sign is other character
 \xdef\efloat@endtest{\string\\end\string\{X\string\}}
 \xdef\efloat@enddbltest{\string\\end\string\{X\string\}}
 \xdef\efloat@endtestX{\string\\end\string\{X\string\}%}
 \xdef\efloat@enddbltestX{\string\\end\string\{X\string\}%}
}
%    \end{macrocode}
%    \begin{macrocode}
\newcommand*\efloat@patch[2]{%
    \def\x##1X##2\@nil{\def#1{##1#2##2}}%
    \expandafter\x#1\@nil}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\ef@xfigure}
% \changes{v2.5c}{2011/12/22}{Revived by as}
% \begin{macro}{\ef@xtable}
% \changes{v2.5c}{2011/12/22}{Revived by as}
% \changes{v2.6}{2018/03/18}{Re-defines \cs{efloat@endtestX} and \cs{efloat@enddbltestX}, too. as}
% Both, |\ef@xfigure| and |\ef@xtable|, are gone with version $2.5$ of the \pkg{endfloat}
% package.
% But unfortunately some old and unmaintained document classes and packages still
% uses these internal macros, so we still provide them to stay compatible.
%    \begin{macrocode}
\newcommand*\ef@xfigure{\ef@xfloat{fff}{figure}}
%    \end{macrocode}
%    \begin{macrocode}
\newcommand*\ef@xtable{\ef@xfloat{ttt}{table}}
%    \end{macrocode}
%    \begin{macrocode}
\newcommand*\ef@xfloat[2]{%
  \efloat@patch\efloat@endtest{#2}%
  \efloat@patch\efloat@enddbltest{#2*}%
  \efloat@patch\efloat@endtestX{#2}%
  \efloat@patch\efloat@enddbltestX{#2*}%
%    \end{macrocode}
%    \begin{macrocode}
  \def\next{\efloat@xfloat{#1}}%
  \next}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \subsection{Processing Figures and Tables}
%
% \begin{macro}{\AtBeginDelayedFloats}
% Here we set-up the hooks for getting stuff into |\process...|
% commands easily.  The command |\g@addto@macro| is defined
% in \file{classes.dtx}.  I was about to write it myself, when I realized that
% it must already exist for things like |\AtBeginDocument|.
%    \begin{macrocode}
\newcommand*\processdelayedfloats@hook{}
\def\AtBeginDelayedFloats{%
   \g@addto@macro\processdelayedfloats@hook}
\newcommand*\processotherdelayedfloats{}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@process}
% |\efloat@process|\marg{file extension}\marg{environment name}
% \changes{v1.99}{1992/05/27}{extensive changes by bj}
% \changes{v2.1}{1994/06/25}{Use LaTeX2e documentation form. jpg}
% \changes{v2.5}{2011/11/26}{universalized by as}
% \changes{v2.5a}{2011/12/04}{\cs{ifnum} replaced by \cs{efloat@ifflag}. as}
% \changes{v2.5a}{2011/12/04}{\cs{ef@setct} replaced by \cs{efloat@setflag}. as}
% \changes{v2.5c}{2011/12/22}{\cs{efloat@setflag} replaced by \cs{ef@setct}. as}
% \changes{v2.6}{2018/03/18}{Bugfix: Usage of \cs{makeatletter}\ldots\cs{makeatother} added. as}
% \changes{v2.6}{2018/03/18}{Usage of \cs{markboth} replaced by \cs{efloatheading}. as}
% \changes{v2.6}{2018/03/24}{\cs{efloat@type} replaced by \cs{efloattype}. as}
% \changes{v2.6}{2018/03/24}{Usage of \cs{@input} replaced by \cs{efloat@input}. as}
% \changes{v2.6}{2018/03/24}{Usage of \cs{efloatpreamble} and \cs{efloatpostamble} added. as}
% \changes{v2.7}{2019/04/15}{Usage of \cs{efloatbegin}, \cs{efloatend}, \cs{efloatbeginlist}, and \cs{efloatendlist} added. as}
%    \begin{macrocode}
\newcommand*\efloat@process[2]{%
%    \end{macrocode}
% First test to see if there are any figures to process.
% If so do it.
%    \begin{macrocode}
  \ef@ifct{#1}{%
%    \end{macrocode}
% Close the file for writing.  Set a flag saying so.
%    \begin{macrocode}
    \efloat@closepost{#1}%
%    \end{macrocode}
% Define |\efloat|\x|type| which can be evaluated by user-defined variants of
% |\efloat|\x|heading|, |\efloat|\x|preamble|, |\efloat|\x|separator|, and |\efloat|\x|postamble|.
%    \begin{macrocode}
    \def\efloattype{#2}%                                      % as
%    \end{macrocode}
%    \begin{macrocode}
    \efloatbegin                                              % bj
%    \end{macrocode}
% Deal with headers and list of figures if necessary
%    \begin{macrocode}
    \efloat@ifflag{#2list}{%                                  % bj
      \begingroup
        \efloatbeginlist                                      % bj
        \efloat@listof{#2}%                                   % bj
        \efloatendlist                                        % bj
      \endgroup
    }{}%
    \efloat@ifflag{#2head}{%
      \section*{\@nameuse{#2section}}%                        % bj
%    \end{macrocode}
% See the discussion in \autoref{sec:place} for what problem
% the |suppressfloats[t]| is here to solve.  If I understand the
% \textit{Companion} correctly (page 144), this was not available
% in previous versions of \LaTeX.
%    \begin{macrocode}
      \suppressfloats[t]%                                     % jpg
    }{}%
    \expandafter\expandafter\expandafter\efloatheading        % bj
      \expandafter\csname #2section\endcsname                 % bj
%    \end{macrocode}
% Use any user defined hooks just before inputting the file.
%    \begin{macrocode}
    \processdelayedfloat@hook
    \@nameuse{process#2s@hook}%
%    \end{macrocode}
% Input the file, surrounded by |\efloatpreamble| and |\efloatpostamble|.
%    \begin{macrocode}
    \efloatpreamble
    \efloat@input{\jobname.#1}%
    \efloatpostamble
%    \end{macrocode}
%    \begin{macrocode}
    \efloatend                                                % as
  }{}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@input}
% Input the file, surrounded by |\makeatletter| and |\makeatother|
% so characters written as (internal) macros (for example UTF-8 characters)
% will be processed without errors.
% \changes{v2.6}{2018/03/18}{This macro added. as}
%    \begin{macrocode}
\newcommand*\efloat@input[1]{%
  \makeatletter
  \@input{#1}%
  \makeatother}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\processdelayedfloat@hook}
% For generic changes document classes can use the hook
% |\process|\x|delayed|\x|float@hook|. If the float type is needed,
% it can be extracted from |\efloattype|.
% \changes{v2.5d}{2011/12/25}{This hook added}
%    \begin{macrocode}
\newcommand*\processdelayedfloat@hook{}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@listof}
% This one will do the ``List of Figures'' resp. ``List of Tables''.
% \changes{v2.5}{2011/11/26}{This macro added}
%    \begin{macrocode}
\newcommand*\efloat@listof[1]{%
%    \end{macrocode}
% If no name is given for the list we set it to ``List of \textit{X}'' where
% \textit{X} is the heading given as second mandatory argument
% to |\Declare|\x|Delayed|\x|Float|.
%    \begin{macrocode}
  \expandafter\providecommand\csname list#1name\endcsname
    {List of \@nameuse{#1section}}%
%    \end{macrocode}
% If |\listof|\textit{X}|s| is defined, we use it here.
% Otherwise we try using |\listof| (defined by the \pkg{float} and \pkg{floatrow}
% package) instead. If this will fail, too, we have to give up (and issue an error message).
%    \begin{macrocode}
  \@ifundefined{listof#1s}%
    {\@ifundefined{listof}%
      {\PackageError{endfloat}%
         {Don't know how to make List of `#1'}%
         {You could try defining \protect\listof#1s on your own}}%
      {\listof{#1}{\@nameuse{list#1name}}}}%
    {\@nameuse{listof#1s}}}
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{Getting float placement correct} \label{sec:place}
%
% In versions prior to this attempt (v2.2c), when the |heads| options
% were used, the float could could either float to the next page, leaving
% the section header alone, or could float to the top of the page, leaving
% section header at the bottom of the page.  The idea here is to change the
% parameters that place floats, to very very strongly
% encourage floats at the bottom of pages.
% It also allows for easy top floats.  Thus obviating the need
% for float pages.
% A |\suppressfloats[t]| in the commands
% that issue the headers will make sure that the floats don't float
% above the headers.
%
%    \begin{macrocode}
\renewcommand{\bottomfraction}{1.0}
\renewcommand{\topfraction}{1.0}
\renewcommand{\textfraction}{0.0}
%    \end{macrocode}
%
% \subsubsection{Calling the processing commands}
%
% \begin{macro}{\processdelayedfloats}
% Note that there is an extra set |{| and |}| so  that the
% restoration of the original definitions is in a group and is \emph{not}
% global.  If, for some reason, you wish them to be global then use
% something like
% \begin{quote}
%  |\makeatletter|\\
%  |\g@addto@macro\processdelayedfloats{\efloat@restorefloats}|\\
%  |\makeatother|
% \end{quote}
% \changes{v2.5}{2011/11/26}{Process float list instead of |figure| and |table|. as}
%    \begin{macrocode}
\newcommand*\processdelayedfloats{{%
%    \end{macrocode}
% Here we reset stuff to apply while end stuff is being processed.
% Prior to version 2.4, these were in |\processtables| and |\processfigures|.
%    \begin{macrocode}
  \def\baselinestretch{1}\normalsize
  \efloat@restorefloats
%    \end{macrocode}
% The hook comes after those settings so as to override them if desired.
%    \begin{macrocode}
  \processdelayedfloats@hook
%    \end{macrocode}
% Process tables, figures, and others (or figures, tables, others)
%    \begin{macrocode}
  \efloat@processfloats
  \processotherdelayedfloats}}
%    \end{macrocode}
%    \begin{macrocode}
\newcommand*\efloat@processfloats{%
  \let\@tempa\@empty
  \def\@elt##1{\g@addto@macro\@tempa{\@nameuse{process##1es}}}%
  \efloat@list
  \let\@elt\relax
  \@tempa}
%    \end{macrocode}
% \changes{v1.99}{1992/05/27}{extensive changes by bj}
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% \changes{v2.1}{1994/06/25}{Use AtEndDocument. jpg}
%    \begin{macrocode}
\efloat@AtEndDocument{%                                       % jpg
   \message{AED endfloat: Processing end Figures and Tables}% % jpg
   \onecolumn
   \processdelayedfloats }
%    \end{macrocode}
% \end{macro}
%
% Use, or don't use, configuration file.
%    \begin{macrocode}
\InputIfFileExists{endfloat.cfg}{%
   \typeout{*** Using endfloat.cfg ***}}{}
%    \end{macrocode}
%
%    \begin{macrocode}
%</package>
%    \end{macrocode}
%
% \section{Extra macros -- HIGHLY Experimental} \label{sec:config}
%
% \subsection{Getting new delayed environments}
%
% This section used to offer a configuration file which was able
% to integrate the environments |side|ways|figure| and |side|ways|table|
% offered by the \pkg{rotating} package\cite{RahBar:rotating}
% into the \pkg{endfloat} package.\par
% For compatibility reasons we still do, so existing documents
% including |efxmpl.cfg| will still work,~e.g.
% \begin{quote}
%   \ldots\\
%   |\usepackage{endfloat}|\\
%   |\makeatletter|\\
%   |\input{efxmpl.cfg}|\\
%   |\makeatother|\\
%   \ldots
% \end{quote}
%
%    \begin{macrocode}
%<*config>
%    \end{macrocode}
%
% We must, of course, have use of the rotating package.
%    \begin{macrocode}
\RequirePackage{rotating}
%    \end{macrocode}
%
% We declare |side|\x|ways|\x|figure| and |side|\x|ways|\x|table| as
% variants of the |figure| resp.~|table| environments.
%    \begin{macrocode}
\DeclareDelayedFloatFlavor{sidewaysfigure}{figure}
\DeclareDelayedFloatFlavor{sidewaystable}{table}
%    \end{macrocode}
%
%    \begin{macrocode}
%</config>
%    \end{macrocode}
%
% \emph{Note:}
% If you would like to add support of given floating environments to
% the \pkg{endfloat} package, please do not use configuration files
% but |\Declare|\x|Delayed|\x|Float| and |\Declare|\x|Delayed|\x|Float|\x|Flavor|
% instead.
%
% \Finale
%
\endinput