Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
latextemplates
GitHub Repository: latextemplates/scientific-thesis-template
Path: blob/main/stfloats.sty
431 views
1
%%
2
%% This is file `stfloats.sty',
3
%% generated with the docstrip utility.
4
%%
5
%% The original source files were:
6
%%
7
%% stfloats.dtx (with options: `package')
8
%%
9
%% Copyright (C) 1997-2025 by Sigitas Tolu\v{s}is <[email protected]>
10
%% VTeX UAB, Mokslininku 2a, Vilnius, Lithuania
11
%% --------------------------------------------------------------------------
12
%% This work may be distributed and/or modified under the
13
%% conditions of the LaTeX Project Public License, either version 1.3
14
%% of this license or (at your option) any later version.
15
%% The latest version of this license is in
16
%% http://www.latex-project.org/lppl.txt
17
%% and version 1.3 or later is part of all distributions of LaTeX
18
%% version 2005/12/01 or later.
19
%%
20
%% PURPOSE: Improve float mechanism and baselineskip settings
21
%%
22
\NeedsTeXFormat{LaTeX2e}[2015/12/01]
23
\ProvidesPackage{stfloats}
24
[2025/06/18 v3.4 Improve float mechanism and baselineskip settings]
25
\newif\if@kernel@version@MMXXV
26
\@ifundefined{@makespecialcolbox}{\@kernel@version@MMXXVtrue}{}
27
\gdef\@dblbotlist{}
28
\newcount\@dblbotnum
29
\newcount\c@dblbotnumber
30
\@defaultunits\expandafter\c@dblbotnumber\fmtversion\relax\@nnil
31
\ifnum\c@dblbotnumber<2015\relax
32
\@latex@error{Too old LaTeX format (<2015)!\MessageBreak
33
Update LaTeX system!}\@ehd
34
\fi
35
\setcounter{dblbotnumber}{2}
36
\def\@dbflt#1{\@ifnextchar[{\@xdblfloat{#1}}{\@xdblfloat{#1}[tbp]}}
37
\g@addto@macro\@dblfloatplacement{\global\@dblbotnum\c@dblbotnumber}
38
\def\@addtodblcol{%
39
\begingroup
40
\@insertfalse
41
\@setfloattypecounts
42
\@getfpsbit \tw@
43
\ifodd\@tempcnta
44
\@flsetnum \@dbltopnum
45
\ifnum \@dbltopnum>\z@
46
\@tempswafalse
47
\ifdim \@dbltoproom>\ht\@currbox
48
\@tempswatrue
49
\else
50
\ifnum \@fpstype<\sixt@@n
51
\advance \@dbltoproom \@textmin
52
\ifdim \@dbltoproom>\ht\@currbox
53
\@tempswatrue
54
\fi
55
\advance \@dbltoproom -\@textmin
56
\fi
57
\fi
58
\if@tempswa
59
\@bitor \@currtype \@deferlist
60
\@testwrongwidth\@currbox
61
\if@test
62
\else
63
%% [[ stfloats adds
64
\@bitor \@currtype \@dblbotlist
65
\if@test
66
\else
67
%% stfloats adds ]]
68
\@tempdima -\ht\@currbox
69
\advance\@tempdima
70
-\ifx \@dbltoplist\@empty \dbltextfloatsep \else
71
\dblfloatsep \fi
72
\global \advance \@dbltoproom \@tempdima
73
\global \advance \@colht \@tempdima
74
\global \advance \@dbltopnum \m@ne
75
\@cons \@dbltoplist \@currbox
76
\@inserttrue
77
%% [[ stfloats adds
78
\fi
79
%% stfloats adds ]]
80
\fi
81
\fi
82
\fi
83
\fi
84
\if@insert
85
\else
86
%% [[ stfloats adds
87
\@getfpsbit 4\relax
88
\ifodd\@tempcnta
89
\@flsetnum \@dblbotnum
90
\ifnum \@dblbotnum>\z@
91
\@tempswafalse
92
\ifdim \@dbltoproom>\ht\@currbox
93
\@tempswatrue
94
\else
95
\ifnum \@fpstype<\sixt@@n
96
\advance \@dbltoproom \@textmin
97
\ifdim \@dbltoproom>\ht\@currbox
98
\@tempswatrue
99
\fi
100
\advance \@dbltoproom -\@textmin
101
\fi
102
\fi
103
\if@tempswa
104
\@bitor \@currtype \@deferlist
105
\@testwrongwidth\@currbox
106
\if@test
107
\else
108
\@tempdima -\ht\@currbox
109
\advance\@tempdima
110
-\ifx \@dblbotlist\@empty \dbltextfloatsep \else
111
\dblfloatsep \fi
112
\global \advance \@dbltoproom \@tempdima
113
\global \advance \@colht \@tempdima
114
\global \advance \@dblbotnum \m@ne
115
\@cons \@dblbotlist \@currbox
116
\@inserttrue
117
\fi
118
\fi
119
\fi
120
\fi
121
\if@insert
122
\else
123
%% stfloats adds ]]
124
\@cons\@deferlist\@currbox
125
%% [[ stfloats adds
126
\fi
127
%% stfloats adds ]]
128
\fi
129
\endgroup
130
}
131
\def\@addtocurcol{%
132
\@insertfalse
133
\@setfloattypecounts
134
\ifnum \@fpstype=8
135
\else
136
\ifnum \@fpstype=24
137
\else
138
\@flsettextmin
139
\advance \@textmin \@textfloatsheight
140
\@reqcolroom \@pageht
141
\ifdim \@textmin>\@reqcolroom
142
\@reqcolroom \@textmin
143
\fi
144
\advance \@reqcolroom \ht\@currbox
145
\if@kernel@version@MMXXV \saved@reqcolroom \@reqcolroom\fi %% stfloats adds
146
\ifdim \@colroom>\@reqcolroom
147
\@flsetnum \@colnum
148
\ifnum \@colnum>\z@
149
\@bitor\@currtype\@deferlist
150
%% \@testwrongwidth\@currbox % moved deeper
151
\if@test
152
\else
153
%% [[ stfloats adds
154
\@testwrongwidth\@currbox
155
\if@test
156
\if@firstcolumn
157
\@getfpsbit \tw@
158
\ifodd\@tempcnta
159
\@flsetnum \@dbltopnum
160
\ifnum \@dbltopnum>\z@
161
\@tempswafalse
162
\ifdim \@dbltoproom>\ht\@currbox
163
\@tempswatrue
164
\else
165
\ifnum \@fpstype<\sixt@@n
166
\advance \@dbltoproom \@textmin
167
\ifdim \@dbltoproom>\ht\@currbox
168
\@tempswatrue
169
\fi
170
\advance \@dbltoproom -\@textmin
171
\fi
172
\fi
173
\if@tempswa
174
\@bitor\@currtype{\@toplist\@midlist\@botlist\@dblbotlist}%
175
\if@test
176
\else
177
\@tempdima -\ht\@currbox
178
\advance\@tempdima
179
-\ifx \@dbltoplist\@empty \dbltextfloatsep \else
180
\dblfloatsep \fi
181
\global \advance \@dbltoproom \@tempdima
182
\global \advance \@colht \@tempdima
183
\global \advance \@colroom \@tempdima
184
\global \advance \@dbltopnum \m@ne
185
\@cons \@dbltoplist \@currbox
186
\@inserttrue
187
\fi
188
\fi
189
\fi
190
\else
191
\@getfpsbit 4\relax
192
\ifodd\@tempcnta
193
\@flsetnum \@dblbotnum
194
\ifnum \@dblbotnum>\z@
195
\@tempswafalse
196
\ifdim \@dbltoproom>\ht\@currbox
197
\@tempswatrue
198
\else
199
\ifnum \@fpstype<\sixt@@n
200
\advance \@dbltoproom \@textmin
201
\ifdim \@dbltoproom>\ht\@currbox
202
\@tempswatrue
203
\fi
204
\advance \@dbltoproom -\@textmin
205
\fi
206
\fi
207
\if@tempswa
208
\@tempdima -\ht\@currbox
209
\advance\@tempdima
210
-\ifx \@dblbotlist\@empty \dbltextfloatsep \else
211
\dblfloatsep \fi
212
\global \advance \@dbltoproom \@tempdima
213
\global \advance \@colht \@tempdima
214
\global \advance \@colroom \@tempdima
215
\global \advance \@dblbotnum \m@ne
216
\@cons \@dblbotlist \@currbox
217
\@inserttrue
218
\fi
219
\fi
220
\fi
221
\fi
222
\fi
223
\else
224
%% stfloats adds ]]
225
\@bitor\@currtype\@botlist
226
\if@test
227
\@addtobot
228
\else
229
\ifodd \count\@currbox
230
\advance \@reqcolroom \intextsep
231
\ifdim \@colroom>\@reqcolroom
232
\global \advance \@colnum \m@ne
233
\global \advance \@textfloatsheight \ht\@currbox
234
\global \advance \@textfloatsheight 2\intextsep
235
\@cons \@midlist \@currbox
236
\if@nobreak
237
\nobreak
238
\@nobreakfalse
239
\everypar{}%
240
\else
241
\addpenalty \interlinepenalty
242
\fi
243
\vskip \intextsep
244
\box\@currbox
245
\penalty\interlinepenalty
246
\vskip\intextsep
247
\ifnum\outputpenalty <-\@Mii \vskip -\parskip\fi
248
\outputpenalty \z@
249
\@inserttrue
250
\fi
251
\fi
252
\if@insert
253
\else
254
\@addtotoporbot
255
\fi
256
\fi
257
\fi
258
\fi
259
\fi
260
\fi
261
\fi
262
\fi
263
\if@insert
264
\else
265
\@resethfps
266
\@cons\@deferlist\@currbox
267
\fi
268
}%
269
\def\@addtotoporbot{%
270
\@getfpsbit \tw@
271
\ifodd \@tempcnta
272
\@flsetnum \@topnum
273
\ifnum \@topnum>\z@
274
\@tempswafalse
275
\@flcheckspace \@toproom \@toplist
276
\if@tempswa
277
%% [[ stfloats adds
278
%% \@bitor\@currtype{\@midlist\@botlist}%
279
\@bitor\@currtype{\@midlist\@botlist\@dblbotlist}%
280
%% stfloats adds ]]
281
\if@test
282
\else
283
\@flupdates \@topnum \@toproom \@toplist
284
\@inserttrue
285
\fi
286
\fi
287
\fi
288
\fi
289
\if@insert
290
\else
291
\@addtobot
292
\fi
293
}
294
\def\@addtobot{%
295
\@getfpsbit 4\relax
296
\ifodd \@tempcnta
297
\@flsetnum \@botnum
298
\ifnum \@botnum>\z@
299
\@tempswafalse
300
\@flcheckspace \@botroom \@botlist
301
\if@tempswa
302
%% [[ stfloats adds
303
\@bitor\@currtype{\@dblbotlist}%
304
\if@test
305
\else
306
\if@kernel@version@MMXXV\else \global \maxdepth \z@\fi
307
%% stfloats adds ]]
308
\@flupdates \@botnum \@botroom \@botlist
309
\@inserttrue
310
%% [[ stfloats adds
311
\fi
312
%% stfloats adds ]]
313
\fi
314
\fi
315
\fi
316
}
317
\def\@doclearpage{%
318
\ifvoid\footins
319
\ifvbox\@kludgeins
320
{\setbox \@tempboxa \box \@kludgeins}%
321
\fi
322
\setbox\@tempboxa\vsplit\@cclv to\z@ \unvbox\@tempboxa
323
\setbox\@tempboxa\box\@cclv
324
\xdef\@deferlist{\@toplist\@botlist\@deferlist}%
325
\global \let \@toplist \@empty
326
\global \let \@botlist \@empty
327
\global \@colroom \@colht
328
\ifx \@currlist\@empty
329
\else
330
\@latexerr{Float(s) lost}\@ehb
331
\global \let \@currlist \@empty
332
\fi
333
\@makefcolumn\@deferlist
334
\@whilesw\if@fcolmade \fi{\@opcol\@makefcolumn\@deferlist}%
335
\if@twocolumn
336
\if@firstcolumn
337
%% [[ stfloats adds
338
%%\xdef\@deferlist{\@dbltoplist\@deferlist}%
339
\xdef\@deferlist{\@dbltoplist\@dblbotlist\@deferlist}%
340
\global \let \@dblbotlist \@empty
341
%% stfloats adds ]]
342
\global \let \@dbltoplist \@empty
343
\global \@colht \textheight
344
\begingroup
345
\@dblfloatplacement
346
\@makefcolumn\@deferlist
347
\@whilesw\if@fcolmade \fi{\@outputpage
348
\@makefcolumn\@deferlist}%
349
\endgroup
350
\else
351
\vbox{}\clearpage
352
\fi
353
\fi
354
\ifx\@deferlist\@empty \else\clearpage \fi
355
\else
356
\setbox\@cclv\vbox{\box\@cclv\vfil}%
357
\@makecol\@opcol
358
\clearpage
359
\fi
360
}
361
\def\@combinedblfloats{%
362
\ifx \@dbltoplist\@empty \else \@cdblflt \fi %% kernel \@combinedblfloats version
363
\ifx \@dblbotlist\@empty \else \@cdblflb \fi
364
}
365
\def\@cdblflt{%
366
\setbox\@tempboxa \vbox{}%
367
\let \@elt \@comdblflelt
368
\@dbltoplist
369
\let \@elt \relax
370
\xdef \@freelist {\@freelist\@dbltoplist}%
371
\global\let \@dbltoplist \@empty
372
%% [[ stfloats adds
373
%% \setbox\@outputbox \vbox to\textheight
374
\setbox\@outputbox \vbox% to\textheight
375
%% stfloats adds ]]
376
{%
377
\unvbox\@tempboxa\vskip-\dblfloatsep
378
\ifnum \@dbltopnum>\m@ne
379
\dblfigrule
380
\fi
381
\vskip \dbltextfloatsep
382
\unvbox \@outputbox
383
}%
384
}
385
\def\@cdblflb{%
386
\setbox\@tempboxa \vbox{}%
387
\let \@elt \@comdblflelt
388
\@dblbotlist
389
\let \@elt \relax
390
\xdef \@freelist {\@freelist\@dblbotlist}%
391
\global\let \@dblbotlist \@empty
392
\setbox\@outputbox \vbox% to\textheight
393
{%
394
\unvbox\@outputbox
395
\vskip \dbltextfloatsep
396
\ifnum \@dblbotnum>\m@ne
397
\dblfigrule
398
\fi
399
\unvbox\@tempboxa
400
\vskip -\dblfloatsep
401
}%
402
}
403
\global\let\org@makecol@stfloats\@makecol
404
\gdef\fn@makecol{%
405
\setbox\@outputbox \box\@cclv
406
\let\@elt\relax
407
\xdef\@freelist{\@freelist\@midlist}%
408
\global \let \@midlist \@empty
409
\@combinefloats
410
\ifvoid\footins
411
\else
412
\setbox\@outputbox \vbox {%
413
\boxmaxdepth \@maxdepth
414
\unvbox \@outputbox
415
\vskip \skip\footins
416
\color@begingroup
417
\normalcolor
418
\footnoterule
419
\unvbox \footins
420
\color@endgroup
421
}%
422
\fi
423
\ifvbox\@kludgeins
424
\@makespecialcolbox
425
\else
426
\setbox\@outputbox \vbox to\@colht {%
427
\@texttop
428
\dimen@ \dp\@outputbox
429
\unvbox \@outputbox
430
\vskip -\dimen@
431
\@textbottom
432
}%
433
\fi
434
\global \maxdepth \@maxdepth
435
}
436
\def\fnbelowfloat{%
437
%% available Socket Plugs: floats-space-footnotes, space-floats-footnotes
438
\kernel@ifnextchar[{\fn@below@float}{\fn@below@float[floats-footnotes]}%
439
}
440
\def\fn@below@float[#1]{%
441
\if@kernel@version@MMXXV
442
\AssignSocketPlug{build/column/outputbox}{#1}%
443
\else
444
\global\let\@makecol\fn@makecol
445
\fi
446
}
447
\def\fnunderfloat{%
448
%% available Socket Plugs: space-footnotes-floats, footnotes-space-floats, footnotes-floats
449
\kernel@ifnextchar[{\fn@under@float}{\fn@under@float[footnotes-floats-legacy]}%
450
}
451
\def\fn@under@float[#1]{%
452
\if@kernel@version@MMXXV
453
\AssignSocketPlug {build/column/outputbox}{#1}%
454
\else
455
\global\let\@makecol\org@makecol@stfloats
456
\fi
457
}
458
\def\set@floatfontsize#1#2#3{%
459
\@defaultunits\@tempdimb#2\p@\relax\@nnil
460
\edef\f@size{\strip@pt\@tempdimb}%
461
\@defaultunits\@tempskipa#3\p@\relax\@nnil
462
\edef\f@baselineskip{\the\@tempskipa}%
463
\edef\f@linespread{#1}%
464
\let\baselinestretch\f@linespread
465
\def\size@update{%
466
\baselineskip\f@baselineskip
467
\@tempskipa\baselineskip\relax\baselineskip=1\baselineskip
468
\advance\@tempskipa by-\baselineskip\baselineskip\f@baselineskip
469
\baselineskip\f@linespread\baselineskip
470
\advance\@tempskipa by\baselineskip\baselineskip\@tempskipa
471
\normalbaselineskip\baselineskip
472
\setbox\strutbox\hbox{%
473
\vrule\@height.7\baselineskip
474
\@depth.3\baselineskip
475
\@width\z@}%
476
\let\size@update\relax
477
}%
478
}
479
\let\set@@@fontsize\set@fontsize
480
\def\setbaselinefloat{\let\set@fontsize\set@floatfontsize}
481
\def\setbaselinefixed{%
482
\@tempdima=\baselinestretch\p@
483
\edef\baselinestretch{\strip@pt\@tempdima}%
484
\let\set@fontsize\set@@@fontsize
485
}
486
\endinput
487
%%
488
%% End of file `stfloats.sty'.
489
490