doc/jnsao.cls

changeset 59
743984f4664e
equal deleted inserted replaced
58:2a86c4c98622 59:743984f4664e
1 %% jnsao.cls
2 %% Copyright (c) Christian Clason and Tuomo Valkonen, 2019-2025.
3 %
4 % LaTeX class file for articles in the
5 %
6 % Journal of Nonsmooth Analysis and Optimization
7 %
8 % Web: http://jnsao.episciences.org
9 % E-mail: jnsao@episciences.org
10 %
11 % This work may be distributed and/or modified under the
12 % conditions of the LaTeX Project Public License, either version 1.3c
13 % of this license or (at your option) any later version.
14 % The latest version of this license is in the file
15 %
16 % http://www.latex-project.org/lppl.txt
17 %
18 % This file is part of the "JNSAO journal template" (The work in LPPL)
19 % and all files in that bundle must be distributed together.
20 %
21 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
22
23 \NeedsTeXFormat{LaTeX2e}
24 \ProvidesClass{jnsao}[2025/01/28 v0.12 JNSAO article]
25
26 \ProcessOptions\relax
27
28 \LoadClass[
29 a4paper,
30 fontsize=11pt,
31 oneside
32 ]{scrartcl}
33 \KOMAoptions{DIV=12}
34
35 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
36 % Define colors
37 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
38 \RequirePackage[svgnames]{xcolor}
39 \definecolor{hrefcolor}{rgb}{0.0,0.4,0.7}
40 \definecolor{citecolor}{rgb}{0.0,0.35,0.2}
41 \definecolor{structure}{rgb}{0.09,0.09,0.44}
42 \definecolor{halfgray}{gray}{0.55}
43
44 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
45 % Load amsmath, amsthm, thmtools, mathtools, hyperref (in this order!)
46 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
47 \RequirePackage[leqno,tbtags]{amsmath} % This *must* be *before* cleveref!
48 \RequirePackage{amsthm}
49 \RequirePackage{thmtools}
50 \RequirePackage[centercolon]{mathtools}
51 \numberwithin{equation}{section} % This *must* be *before* cleveref!
52
53 \RequirePackage[
54 colorlinks=true,
55 linkcolor=citecolor,
56 citecolor=citecolor,
57 filecolor=hrefcolor,
58 urlcolor=hrefcolor,
59 pdfencoding=auto,
60 hypertexnames=false,
61 ]{hyperref}
62
63 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
64 % Load and set up fonts
65 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
66 \RequirePackage[T1]{fontenc}
67 \RequirePackage[proportional]{libertine}
68 \RequirePackage[libertine,liby,vvarbb]{newtxmath}
69 \RequirePackage[scaled=0.95,varqu,varl]{inconsolata}
70 \useosf
71 \frenchspacing
72 \RequirePackage[kerning,spacing]{microtype}
73
74 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
75 % Format: title, sectioning in colored sans smallcaps
76 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
77 \renewcommand*{\sectfont}{\color{structure}\sffamily}
78 \setkomafont{title}{\color{structure}\normalfont\sffamily\scshape}
79 \setkomafont{author}{\large\normalfont\sffamily}
80 \setkomafont{date}{\large\normalfont\sffamily}
81 \addtokomafont{section}{\scshape}
82 \addtokomafont{subsection}{\scshape}
83 \addtokomafont{subsubsection}{\scshape\itshape}
84 %\addtokomafont{footnote}{\sffamily}
85
86 % title in small caps (requires lowercasing, label abstract
87 \RequirePackage[overload]{textcase}
88
89 % Prefix appendices with "Appendix"
90 \newcommand{\jnsao@appname}{\relax}
91 \newcommand*{\appendixmore}{%
92 \renewcommand{\jnsao@appname}{Appendix~}
93 \renewcommand{\thesection}{{\scshape\alph{section}}}
94 }
95
96 % section headers in small caps (requires lowercasing)
97 \renewcommand*\sectionformat{\MakeLowercase{\jnsao@appname\thesection}\enskip}
98 \renewcommand*\subsectionformat{\MakeLowercase{\jnsao@appname\thesubsection}\enskip}
99 \renewcommand*\subsectionformat{\MakeLowercase{\jnsao@appname\thesubsection}\enskip}
100 \renewcommand*\subsubsectionformat{\upshape\MakeLowercase{\jnsao@appname\thesubsubsection}\enskip}
101
102 \let\jnsao@old@section\section
103 \renewcommand*{\section}{%
104 \@ifstar {\star@section}{\@dblarg\nonstar@section}%
105 }
106 \newcommand*{\star@section}[1]{%
107 \jnsao@old@section*{\MakeLowercase{#1}}%
108 }
109 \newcommand*{\nonstar@section}[2][]{%
110 \jnsao@old@section[{#1}]{\MakeLowercase{#2}}%
111 }
112 \let\jnsao@old@subsection\subsection
113 \renewcommand*{\subsection}{%
114 \@ifstar {\star@subsection}{\@dblarg\nonstar@subsection}%
115 }
116 \newcommand*{\star@subsection}[1]{%
117 \jnsao@old@subsection*{\MakeLowercase{#1}}%
118 }
119 \newcommand*{\nonstar@subsection}[2][]{%
120 \jnsao@old@subsection[{#1}]{\MakeLowercase{#2}}%
121 }
122 \let\jnsao@old@subsubsection\subsubsection
123 \renewcommand*{\subsubsection}{%
124 \@ifstar {\star@subsubsection}{\@dblarg\nonstar@subsubsection}%
125 }
126 \newcommand*{\star@subsubsection}[1]{%
127 \jnsao@old@subsubsection*{\MakeLowercase{#1}}%
128 }
129 \newcommand*{\nonstar@subsubsection}[2][]{%
130 \jnsao@old@subsubsection[{#1}]{\MakeLowercase{#2}}%
131 }
132
133 % Format (sub) figure labels
134 \RequirePackage[labelfont={color=structure,sf}]{caption}
135 \RequirePackage[labelfont={color=structure,sf}]{subcaption}
136
137 % Url
138 \renewcommand{\UrlFont}{\normalfont\sffamily}
139
140 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
141 % Format of theorem-like environments.
142 % These used to have to be *after* the loading of cleveref, but no longer
143 % (2018-12-15) seems to be the case.
144 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
145
146 \def\jnsao@thmformat{\NAME~{\scshape{\NUMBER}}\NOTE}
147
148 \declaretheoremstyle[
149 headfont={\upshape\sffamily\color{structure}},
150 headformat=\jnsao@thmformat,
151 bodyfont={\normalfont\itshape},
152 ]{plain}
153
154 \declaretheoremstyle[
155 headfont={\upshape\sffamily\color{structure}},
156 headformat=\jnsao@thmformat,
157 bodyfont={\normalfont\upshape},
158 ]{definition}
159
160 \declaretheoremstyle[
161 headfont={\upshape\sffamily\color{structure}},
162 headformat=\jnsao@thmformat,
163 bodyfont={\normalfont\upshape},
164 ]{remark}
165
166 % Define basic theorem-like environments
167 \theoremstyle{plain}
168 \newtheorem{theorem}{Theorem}[section]
169 \newtheorem{proposition}[theorem]{Proposition}
170 \newtheorem{corollary}[theorem]{Corollary}
171 \newtheorem{lemma}[theorem]{Lemma}
172
173 \theoremstyle{remark}
174 \newtheorem{remark}[theorem]{Remark}
175
176 \theoremstyle{definition}
177 \newtheorem{definition}[theorem]{Definition}
178 \newtheorem{example}[theorem]{Example}
179
180 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
181 % Footnotes: separation, special format for \thanks
182 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
183
184 % Store length in base font size
185 \newlength{\jnsao@footnotesep}
186 \newlength{\jnsao@footnotetopsep}
187 \newlength{\jnsao@standardfootins}
188 \setlength{\jnsao@footnotesep}{0.5\baselineskip}
189 \setlength{\jnsao@footnotetopsep}{\jnsao@footnotesep}
190 \setlength{\jnsao@standardfootins}{\jnsao@footnotesep+\baselineskip}
191 \setlength{\footnotesep}{\baselineskip}
192
193 % Footnote rule for other pages than the first page
194 \def\jnsao@footnoterule{\relax%
195 \vskip-\jnsao@footnotesep%
196 {\color{gray}\hrule\@width 1cm}%
197 \vskip\jnsao@footnotetopsep%
198 }%
199
200 % Footnote rule for the first page
201 \def\jnsao@footnoterule@firstpage{\relax%
202 \jnsao@headfootrule%
203 %\vskip 2pt
204 }
205
206 % Change font for \thanks
207 \def\thanks#1{\footnotemark
208 \protected@xdef\@thanks{\@thanks
209 \protect\jnsao@thankstext[\the\c@footnote]{\sffamily #1}}%
210 }
211 \def\jnsao@thankstext{\sffamily%
212 \@ifnextchar [\@xfootnotenext
213 {\protected@xdef\@thefnmark{\thempfn}%
214 \@footnotetext}}
215
216 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
217 % Vertical alignment. This hacks and wraps \@outputpage and
218 % and latex.ltx limitations to have different geometry for
219 % the first page
220 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
221
222 % Flush to bottom
223 \flushbottom
224
225 % Various lengths
226 \newlength{\jnsao@fullheight}
227 \newlength{\jnsao@headsep}
228 \newlength{\jnsao@firstpagehead}
229 \newlength{\jnsao@firstpageheadplus}
230 \newlength{\jnsao@headheight}
231 \newlength{\jnsao@headlineheight}
232
233 % Maximum available space for text, header, and footer
234 \setlength{\jnsao@fullheight}{\textheight+\footskip+\headheight+\headsep}
235 % Space between header and text
236 \setlength{\jnsao@headsep}{\baselineskip}
237 % Height of text lines in header/footer font
238 \setlength{\jnsao@headlineheight}{11pt}
239 % First page header height
240 \setlength{\jnsao@firstpagehead}{2\jnsao@headlineheight}
241 % ... plus extra for rule and separation
242 \setlength{\jnsao@firstpageheadplus}{\jnsao@firstpagehead+2.4pt}
243 % Other pages header (and footer) height plus extra for rule and separation
244 \setlength{\jnsao@headheight}{\jnsao@headlineheight+2.4pt}
245
246 % Recalculate header, footer, and text area heights from:
247 % #1: header material height
248 % #2: header separator white space
249 % #3: footer material height
250 % #4: footer separator white space
251 \def\jnsao@setheadfoot#1#2#3#4{%
252 \global\headheight=#1%
253 \global\headsep=#2%
254 \global\footskip=#3%
255 \global\advance\footskip by #4%
256 \global\footheight=#3% KOMA-script seems to blow up things without this
257 \global\textheight=\jnsao@fullheight%
258 \global\advance\textheight by -\footskip%
259 \global\advance\textheight by -\headheight%
260 \global\advance\textheight by -\headsep%
261 }
262
263 % First page settings
264 \setlength{\skip\footins}{\jnsao@footnotesep+0.5\splittopskip}
265 \let\footnoterule\jnsao@footnoterule@firstpage
266 \jnsao@setheadfoot{\jnsao@firstpageheadplus}{\jnsao@headsep}{0em}{0em}
267
268 % Other pages' settings
269 \def\jnsao@geometry@otherpages{%
270 % Set up geometry of following pages
271 \global\skip\footins=\jnsao@standardfootins
272 \global\let\footnoterule\jnsao@footnoterule
273 \jnsao@setheadfoot{\jnsao@headheight}{\jnsao@headsep}{\jnsao@headheight}{\jnsao@headsep}
274 }
275
276 % \@outputpage hack to reset settings after first page
277 \let\jnsao@old@outputpage\@outputpage
278 \def\jnsao@output@firstpage{
279 \jnsao@old@outputpage%
280 \jnsao@geometry@otherpages%
281 % This is needed for something to actually happen after the reset above,
282 % as standard \@outputpage does the same thing at the end
283 \global\@colht\textheight%
284 % Reset page output routine
285 \global\let\jnsao@output@page\jnsao@old@outputpage%
286 }
287
288 \def\@outputpage{\jnsao@output@page}
289 \let\jnsao@output@page\jnsao@output@firstpage
290
291 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
292 % Date
293 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
294
295 \RequirePackage{scrdate}
296 \date{\ISOToday}
297
298 % Over-ride \today with \ISOdate when we insert it. This is needed because Babel
299 % reset \date{\ISOToday} into a locale format.
300 \def\jnsao@insertdate{{\let\today\ISOToday\@date}}
301 %\def\date#1{\gdef\@date{\let\today\ISOToday#1}}
302
303 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
304 % Publication information
305 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
306
307 \let\jnsao@submitted\empty
308 \let\jnsao@accepted\empty
309 \let\jnsao@journal\empty
310 \let\jnsao@volume\empty
311 \let\jnsao@number\empty
312 \let\jnsao@year\empty
313 \let\jnsao@doi\empty
314 \let\jnsao@eprinttype\empty
315 \let\jnsao@eprint\empty
316 \let\jnsao@shortauthor\empty
317 \let\jnsao@shorttitle\empty
318 \let\jnsao@ack\empty
319 \def\jnsao@journal{Journal of Nonsmooth Analysis and Optimization}
320 \def\jnsao@journalabbrev{J.~Nonsmooth Anal.~Optim.}
321 \def\jnsao@license{CC-BY-SA 4.0}
322 \def\jnsao@copyright{{\copyright} the authors}
323 \def\jnsao@status{Manuscript}
324
325 \newcommand{\manuscriptsubmitted}[1]{\gdef\jnsao@submitted{#1}}
326 \newcommand{\manuscriptaccepted}[1]{\gdef\jnsao@accepted{#1}}
327 \newcommand{\manuscriptvolume}[1]{\gdef\jnsao@volume{#1}}
328 \newcommand{\manuscriptnumber}[1]{\gdef\jnsao@number{#1}}
329 \newcommand{\manuscriptjournal}[1]{\gdef\jnsao@journal{#1}}
330 \newcommand{\manuscriptlicense}[1]{\gdef\jnsao@license{#1}}
331 \newcommand{\manuscriptcopyright}[1]{\gdef\jnsao@copyright{#1}}
332 \newcommand{\manuscriptyear}[1]{\gdef\jnsao@year{#1}}
333 \newcommand{\manuscriptdoi}[1]{\gdef\jnsao@doi{#1}}
334 \newcommand{\manuscripteprinttype}[1]{\gdef\jnsao@eprinttype{#1}}
335 \newcommand{\manuscripteprint}[1]{\gdef\jnsao@eprint{#1}}
336 \newcommand{\manuscriptstatus}[1]{\gdef\jnsao@status{#1}}
337 \newcommand{\shortauthor}[1]{\gdef\jnsao@shortauthor{#1}}
338 \newcommand{\shorttitle}[1]{\gdef\jnsao@shorttitle{#1}}
339 \newcommand{\acknowledgements}[1]{\gdef\jnsao@ack{#1}}
340 \newcommand{\acknowledgments}[1]{\gdef\jnsao@ack{#1}}
341
342 \def\jnsao@licenseurl#1#2{%
343 \expandafter\def\csname jnsao@licenseurl@#1 \endcsname{#2}%
344 }
345
346 \RequirePackage{xstring}
347 \def\jnsao@printeprint{%
348 % lowercase is not expandable, so we have to be tricky (https://tex.stackexchange.com/a/87130)
349 \lowercase\expandafter{\expandafter\def\expandafter\@tempe\expandafter{\jnsao@eprinttype}}%
350 \IfStrEqCase{\@tempe}{%
351 {arxiv}{\arxiv{\jnsao@eprint}}%
352 {hal}{\hal{\jnsao@eprint}}%
353 }[{\sffamily \textsc{\MakeLowercase{\jnsao@eprinttype:}}\,\jnsao@eprint}]%
354 }
355 \jnsao@licenseurl{CC-BY}{https://creativecommons.org/licenses/by/4.0/}
356 \jnsao@licenseurl{CC-BY 4.0}{https://creativecommons.org/licenses/by/4.0/}
357 \jnsao@licenseurl{CC-BY-SA}{https://creativecommons.org/licenses/by-sa/4.0/}
358 \jnsao@licenseurl{CC-BY-SA 4.0}{https://creativecommons.org/licenses/by-sa/4.0/}
359 \jnsao@licenseurl{CC-BY-NC-SA}{https://creativecommons.org/licenses/by-nc-sa/4.0/}
360 \jnsao@licenseurl{CC-BY-NC-SA 4.0}{https://creativecommons.org/licenses/by-nc-sa/4.0/}
361 \jnsao@licenseurl{CC-BY-NC}{https://creativecommons.org/licenses/by-nc/4.0/}
362 \jnsao@licenseurl{CC-BY-NC 4.0}{https://creativecommons.org/licenses/by-nc/4.0/}
363 \jnsao@licenseurl{CC-BY-NC-ND}{https://creativecommons.org/licenses/by-nc-nd/4.0/}
364 \jnsao@licenseurl{CC-BY-NC-ND 4.0}{https://creativecommons.org/licenses/by-nc-nd/4.0/}
365
366 \def\jnsao@linklicense#1{%
367 \ifcsname jnsao@licenseurl@#1 \endcsname%
368 \expandafter\let\expandafter\@tempa\csname jnsao@licenseurl@#1 \endcsname%
369 \href{\@tempa}{\scshape \MakeLowercase{#1}}%
370 \else%
371 #1%
372 \fi
373 }
374
375 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
376 % Headers and footers
377 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
378
379 \RequirePackage{lastpage}
380 \RequirePackage[fit]{truncate}
381
382 \addtokomafont{pageheadfoot}{\normalfont\sffamily\footnotesize}
383
384 \def\jnsao@headfootrule{\hrule width \textwidth height 0.4pt}
385 \def\jnsao@ruledhead#1{\vbox to \headheight{\usekomafont{pageheadfoot}\hbox to \textwidth{#1}\vskip 2pt\jnsao@headfootrule\vfill}}
386 \def\jnsao@ruledfoot#1{\vbox to \footheight{\usekomafont{pageheadfoot}\vfill\jnsao@headfootrule\vskip 2pt\hbox to \textwidth{#1}}}
387
388 \def\ps@jnsao{%
389 \def\@oddhead{\jnsao@ruledhead{%
390 \ifx\jnsao@accepted\empty{%
391 \ifx\jnsao@eprint\empty{%
392 \jnsao@status, \jnsao@insertdate%
393 }\else{%
394 \jnsao@printeprint, \jnsao@insertdate%
395 }\fi%
396 }\else{%
397 \jnsao@journalabbrev%
398 \ifx\jnsao@volume\empty{\relax}\else{ \jnsao@volume}\fi%
399 \ifx\jnsao@year\empty{\relax}\else{ (\jnsao@year)}\fi%
400 \ifx\jnsao@number\empty{\relax}\else{, \jnsao@number}\fi%
401 }\fi%
402 \hfill%
403 page~\thepage~of~\pageref*{LastPage}%
404 }}
405 \def\@oddfoot{\jnsao@ruledfoot{%
406 \truncate{0.5\textwidth}{\ifx\jnsao@shortauthor\empty{}\else{\jnsao@shortauthor}\fi}%
407 \hfill%
408 \truncate{0.5\textwidth}{\ifx\jnsao@shorttitle\empty{\@title}\else{\jnsao@shorttitle}\fi}%
409 }}
410 }
411
412 \pagestyle{jnsao}
413
414 \def\ps@jnsaotitlepage{%
415 \def\@oddhead{\jnsao@ruledhead{%
416 \parbox[b][\jnsao@firstpagehead][t]{0.75\textwidth}{%
417 \ifx\jnsao@accepted\empty{%
418 \ifx\jnsao@eprint\empty{%
419 \jnsao@status\\
420 date: \jnsao@insertdate \\
421 }\else{%
422 \jnsao@printeprint\\
423 date: \jnsao@insertdate \\
424 }\fi%
425 }\else{%
426 \jnsao@journalabbrev%
427 \ifx\jnsao@volume\empty{\relax}\else{ \jnsao@volume}\fi%
428 \ifx\jnsao@year\empty{\relax}\else{ (\jnsao@year)}\fi%
429 \ifx\jnsao@number\empty{\relax}\else{, \jnsao@number}\fi%
430 \ifx\jnsao@doi\empty{\relax}\else{, \expandafter\doi\expandafter{\jnsao@doi}}\fi%
431 \\%
432 \ifx\jnsao@date\empty{%
433 \ifx\jnsao@accepted\empty{\relax}\else{Accepted: \jnsao@accepted}\fi%
434 }\else{%
435 Submitted: \jnsao@submitted\ifx\jnsao@accepted\empty{}\else, accepted: \jnsao@accepted\fi%
436 }\fi%
437 \\
438 }\fi%
439 }%
440 \hfill%
441 \parbox[b][\jnsao@firstpagehead][t]{0.25\textwidth}{%
442 \hfill page~1~of~\pageref*{LastPage}\\%
443 \null\hfill\jnsao@copyright
444 \ifx\jnsao@license\empty{\relax}
445 \else{, \jnsao@linklicense{\jnsao@license}}
446 \fi
447 }%
448 }}
449 \def\@oddfoot{}
450 }
451
452 \renewcommand{\titlepagestyle}{jnsaotitlepage}
453
454 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
455 % Abstract and article title
456 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
457
458 % \maketitle customisations:
459 % - Locally convert \@title to lower case for ``all small caps'' to work right
460 % - Reset \@date to stop babel from messing things up with its silly enforced
461 % date formats.
462 % - Include acknowledgements before \thanks footnotes
463 % This version \@maketitle is simply based on scrartcl.cls with unsupported
464 % features removed.
465
466 \def\jnsao@insert@ack{\insert\footins{%
467 \reset@font\footnotesize%
468 \interlinepenalty\interfootnotelinepenalty%
469 \splittopskip\footnotesep%
470 \splitmaxdepth \dp\strutbox \floatingpenalty \@MM%
471 \hsize\columnwidth \@parboxrestore%
472 \color@begingroup%
473 \hb@xt@1.8em{\rule\z@\footnotesep\ignorespaces\parbox[t]{\textwidth}{\jnsao@ack}\@finalstrut\strutbox}%
474 \color@endgroup}}
475
476 \renewcommand*{\@maketitle}{%
477 \global\@topnum=\z@
478 \setparsizes{\z@}{\z@}{\z@\@plus 1fil}\par@updaterelative
479 \null
480 \vskip 2em%
481 \if\jnsao@ack\empty\else\jnsao@insert@ack\fi%
482 \begin{center}%
483 {\usekomafont{title}{\huge \MakeLowercase{\@title} \par}}%
484 \vskip .5em
485 {\ifx\@subtitle\@empty\else\usekomafont{subtitle}\@subtitle\par\fi}%
486 \vskip 1em
487 {%
488 \usekomafont{author}{%
489 \lineskip .5em%
490 \begin{tabular}[t]{c}
491 \@author
492 \end{tabular}\par
493 }%
494 }%
495 \vskip \z@ \@plus 2em
496 \ifx\@dedication\@empty \else
497 \vskip 2em
498 {\usekomafont{dedication}{\@dedication \par}}%
499 \fi
500 \end{center}%
501 \par
502 \vskip 2em
503 }%
504
505 % Set up abstract formatting
506 \renewenvironment{abstract}{%
507 \vspace*{-0.75cm}
508 \small%
509 \quotation%
510 \noindent%
511 {\normalfont\sectfont\nobreak\abstractname\quad}%
512 }{%
513 \endquotation%
514 \vskip 0.7cm
515 }
516
517 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
518 % Possibly missing commands
519 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
520
521 \providecommand{\arxiv}[1]{\mbox{\scshape\sffamily arxiv:}\,\href{https://arxiv.org/abs/#1}{#1}}
522 \providecommand{\hal}[1]{\href{https://hal.archives-ouvertes.fr/#1}{#1}}
523 \providecommand{\doi}[1]{\mbox{\scshape\sffamily doi:}\,\href{https://dx.doi.org/#1}{\detokenize{#1}}}
524 \providecommand{\orcid}[1]{\mbox{\scshape\sffamily orcid:}\,\href{https://orcid.org/#1}{\detokenize{#1}}}
525 \def\email#1{\href{mailto:#1}{\sffamily#1}}
526
527 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
528 % Potential additional customizations
529 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
530 % \RequirePackage{mdframed}
531 %
532 % \mdfdefinestyle{examplebg}{
533 % backgroundcolor=structure!7,%
534 % hidealllines=true,%
535 % innertopmargin=-.3em,%
536 % innerbottommargin=.7em,%
537 % innerleftmargin=.7em,%
538 % innerrightmargin=.7em,%
539 % }
540 %
541 % \surroundwithmdframed[style=examplebg]{example}
542 % \surroundwithmdframed[style=examplebg]{algorithm}
543
544 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
545 % Adaptations of optional packages on startup.
546 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
547
548 \PassOptionsToPackage{nameinlink,capitalise}{cleveref}
549 \AfterPackage{cleveref}{%
550 % cleveref: tell it about the plural of Figure
551 \crefname{figure}{Figure}{Figures}
552
553 % cleveref: fix "Eq. (1)" to "(1)"
554 \crefname{equation}{}{}
555
556 % cleveref: fix "Item. (i)" to "(i)"
557 \crefname{enumi}{}{}
558
559 % fix for broken hyperref hooks on Nov-2024 kernel
560 \AddToHook{env/proposition/begin}{\crefalias{theorem}{proposition}}
561 \AddToHook{env/corollary/begin}{\crefalias{theorem}{corollary}}
562 \AddToHook{env/lemma/begin}{\crefalias{theorem}{lemma}}
563 \AddToHook{env/remark/begin}{\crefalias{theorem}{remark}}
564 \AddToHook{env/definition/begin}{\crefalias{theorem}{definition}}
565 \AddToHook{env/example/begin}{\crefalias{theorem}{example}}
566 }
567
568 % patch incompatible AMS environments for lineno
569 \AfterPackage{lineno}{%
570 \newcommand*\patchAmsMathEnvironmentForLineno[1]{%
571 \expandafter\let\csname old#1\expandafter\endcsname\csname #1\endcsname
572 \expandafter\let\csname oldend#1\expandafter\endcsname\csname end#1\endcsname
573 \renewenvironment{#1}%
574 {\linenomath\csname old#1\endcsname}%
575 {\csname oldend#1\endcsname\endlinenomath}}%
576 \newcommand*\patchBothAmsMathEnvironmentsForLineno[1]{%
577 \patchAmsMathEnvironmentForLineno{#1}%
578 \patchAmsMathEnvironmentForLineno{#1*}}%
579 \AtBeginDocument{%
580 \patchBothAmsMathEnvironmentsForLineno{equation}%
581 \patchBothAmsMathEnvironmentsForLineno{align}%
582 \patchBothAmsMathEnvironmentsForLineno{flalign}%
583 \patchBothAmsMathEnvironmentsForLineno{alignat}%
584 \patchBothAmsMathEnvironmentsForLineno{gather}%
585 \patchBothAmsMathEnvironmentsForLineno{multline}%
586 }
587 \renewcommand{\linenumberfont}{\normalfont\scriptsize\sffamily\color{gray}}
588 \renewcommand\thelinenumber{\tabularnumsf{\arabic{linenumber}}}
589 }
590
591
592 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
593 % PDF metadata
594 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
595
596 \AtBeginDocument{
597 \begingroup
598 % Override \and and \thanks to clean up author
599 \def\and{ and }
600 \def\thanks#1{\relax}
601 \hypersetup{
602 pdftitle = {\@title},
603 pdfauthor = {\@author},
604 }
605 \endgroup
606 }
607
608

mercurial