diff options
Diffstat (limited to 'macros/latex/contrib/koma-script/scrkernel-floats.dtx')
-rw-r--r-- | macros/latex/contrib/koma-script/scrkernel-floats.dtx | 1859 |
1 files changed, 1859 insertions, 0 deletions
diff --git a/macros/latex/contrib/koma-script/scrkernel-floats.dtx b/macros/latex/contrib/koma-script/scrkernel-floats.dtx new file mode 100644 index 0000000000..b0b1b3a1a4 --- /dev/null +++ b/macros/latex/contrib/koma-script/scrkernel-floats.dtx @@ -0,0 +1,1859 @@ +% \iffalse meta-comment +% ====================================================================== +% scrkernel-floats.dtx +% Copyright (c) Markus Kohm, 2002-2022 +% +% This file is part of the LaTeX2e KOMA-Script bundle. +% +% This work may be distributed and/or modified under the conditions of +% the LaTeX Project Public License, version 1.3c of the license. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3c or later is part of all distributions of LaTeX +% version 2005/12/01 or later and of this work. +% +% This work has the LPPL maintenance status "author-maintained". +% +% The Current Maintainer and author of this work is Markus Kohm. +% +% This work consists of all files listed in MANIFEST.md. +% ====================================================================== +%%% From File: $Id: scrkernel-floats.dtx 3874 2022-06-05 10:38:02Z kohm $ +%<option>%%% (run: option) +%<body>%%% (run: body) +%<*dtx> +\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi +\begingroup + \def\filedate$#1: #2-#3-#4 #5${\gdef\filedate{#2/#3/#4}} + \filedate$Date: 2022-06-05 12:38:02 +0200 (So, 05. Jun 2022) $ + \def\filerevision$#1: #2 ${\gdef\filerevision{r#2}} + \filerevision$Revision: 3874 $ + \edef\reserved@a{% + \noexpand\endgroup + \noexpand\ProvidesFile{scrkernel-floats.dtx}% + [\filedate\space\filerevision\space + KOMA-Script source + (floats)] + }% +\reserved@a +\documentclass[USenglish]{koma-script-source-doc} +\usepackage{babel} +\setcounter{StandardModuleDepth}{2} +\begin{document} +\DocInput{scrkernel-floats.dtx} +\end{document} +%</dtx> +% \fi +% +% \changes{v2.95}{2002/07/01}{new by splitting \file{scrclass.dtx}} +% \changes{v3.36}{2022/02/22}{switch over from \cls*{scrdoc} to +% \cls*{koma-script-source-doc}} +% \changes{v3.36}{2022/02/22}{implementation documentation in English} +% +% \GetFileInfo{scrkernel-floats.dtx} +% \title{Code for the Foats of the +% \href{https://komascript.de}{\KOMAScript} Classes} +% \author{\href{mailto:komascript@gmx.info}{Markus Kohm}} +% \date{Revision \fileversion{} of \filedate} +% \maketitle +% \begin{abstract} +% The code for floats in \file{scrkernel-floats.dtx} is older than the +% generic hook mechanism in the \LaTeX{} kernel. Because of this, it +% currently does not use the kernel hook mechanism. Mostly it is also older +% then the \KOMAScript{} package \pkg*{tocbasic} to implement and manage +% floats. So several code has been adapted several times and maybe a general +% re-implementation would be a good idea. +% \end{abstract} +% \tableofcontents +% +% \section{User Manual} +% +% You can find the user documentation the commands implemented here in the +% \KOMAScript{} manual, either the German \file{scrguide} or the English +% \file{scrguien}. +% +% +% \MaybeStop{\PrintIndex} +% +% +% \section{Implementation of Floats} +% +% All this code is for the classes only and not for the \KOMAScript{} letter +% class, because letter classes usually do not provide floats. If you need +% letters with floats, just use \KOMAScript{} class \cls*{scrartcl} with +% \KOMAScript{} package \pkg*{scrletter}. +% +% \begin{macrocode} +%<*class&!letter> +% \end{macrocode} +% +% \subsection{Some macros and configurations for the options} +% +% We need some of the macros an settings already when processing the options. +% +% \begin{macro}{\@captionabovefalse,\@captionabovetrue,\if@captionabove} +% \changes{v2.8h}{2001/07/19}{added} +% \changes{v3.09}{2011/03/23}{moved before definition of options} +% Boolean switch to decide whether a \cs{caption} has to behave like +% \cs{captionabove} or \cs{captionbelow}. The default is \cs{captionbelow}. +% \begin{macrocode} +%<*option> +\newif\if@captionabove\@captionabovefalse +% \end{macrocode} +% \end{macro}^^A \if@captionabove +% +% \begin{macro}{\@tablecaptionabovefalse,\@tablecaptionabovetrue,\if@tablecaptionabove} +% \changes{v2.8h}{2001/07/19}{added} +% \changes{v2.8k}{2001/08/15}{moved from \pkg*{typearea} into the classes} +% \changes{v2.98c}{2008/02/18}{moved before definition of options} +% Boolean switch to decide whether a \cs{caption} inside a \env{table} +% environment has to behave like \cs{captionabove} or \cs{captionbelow}. The +% default is \cs{captionbelow}. +% \begin{macrocode} +\newif\if@tablecaptionabove\@tablecaptionabovefalse +% \end{macrocode} +% \end{macro}^^A \if@tablecaptionabove +% +% \begin{macro}{\@figurecaptionabovefalse,\@figurecaptionabovetrue,\if@figurecaptionabove} +% \changes{v3.09}{2011/03/23}{added} +% Boolean switch to decide whether a \cs{caption} inside a \env{figure} +% environment has to behave like \cs{captionabove} or \cs{captionbelow}. The +% default is \cs{captionbelow}. +% \begin{macrocode} +\newif\if@figurecaptionabove\@figurecaptionabovefalse +% \end{macrocode} +% \end{macro}^^A \if@figurecaptionabove +% +% \begin{macro}{\onelinecaptionsfalse,\onelinecaptionstrue,\ifonelinecaptions} +% \changes{v2.8q}{2001/11/17}{added} +% \changes{v2.98c}{2008/03/03}{earlier definition} +% The boolean is used to distinguish whether or not use a special handling of +% captions with one text line only. The name of the boolean is traditionally +% but nevertheless should seen as internal. +% \begin{macrocode} +\newif\ifonelinecaptions\onelinecaptionstrue +% \end{macrocode} +% \end{macro}^^A \ifonelinecaptions +% +% \begin{macro}{\scap@pos} +% \changes{v2.8q}{2001/11/22}{added} +% \changes{v2.98c}{2008/03/03}{earlier definition} +% Environment \env{captionbeside} supports several horizontal placements for +% the caption beside the object: +% \begin{description} +% \item[\texttt{i}:] caption inner beside the object, which means left beside +% on odd pages and right beside on even pages (note: single-sided documents +% have only odd pages), +% \item[\texttt{l}:] caption left beside the object, +% \item[\texttt{o}:] caption outer beside the object, which means right beside +% on odd pages and left beside on even pages (note: single-sided documents +% have only odd pages), +% \item[\texttt{r}:] caption right beside the object. +% \end{description} +% The default is right beside. +% \begin{macrocode} +\newcommand*{\scap@pos}{r} +% \end{macrocode} +% \end{macro}^^A \scap@pos +% +% \begin{macro}{\scap@valign} +% \changes{v2.8q}{2001/11/22}{added} +% \changes{v2.98c}{2008/03/03}{earlier definition} +% Environment \env{captionbeside} support different vertical alignments +% for the object box: +% \begin{description} +% \item[\texttt{c}:] centered, +% \item[\texttt{b}:] bottom, +% \item[\texttt{t}:] top. +% \end{description} +% The default is bottom. +% \begin{macrocode} +\newcommand*{\scap@valign}{b} +% \end{macrocode} +% \end{macro}^^A \scap@valign +% +% \subsection{Options for the captions} +% +% \begin{option}{captions} +% \changes{v2.98c}{2008/02/18}{new \pkg*{keyval} option} +% \changes{v3.09}{2011/04/02}{new values \opt{heading}, \opt{signature}, +% \opt{figureheading}, \opt{figuresignature}} +% \changes{v3.17}{2015/03/11}{using \cs{FamilyKeyState}} +% \changes{v3.17}{2015/03/11}{using internal value storage} +% This is the general option for the settings of captions. Because of +% compatibility with package \pkg{caption}, several of the macros, that are +% used to handle the values to the option, cannot be renamed and have to be +% used. This makes it difficult to change anything here. However, the +% currently provides values are: +% \begin{macrocode} +\KOMA@key{captions}{% + \KOMA@set@ncmdkey{captions}{@tempa}{% +% \end{macrocode} +% \begin{description} +% \item[\opt{=heading}:] change the \cs{caption} default to \cs{captionabove}. +% \end{description} +% \begin{macrocode} + {heading}{0},{above}{0},{top}{0},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=signature}:] change the \cs{caption} default to \cs{captionbelow}. +% \end{description} +% \begin{macrocode} + {signature}{1},{below}{1},{bot}{1},{bottom}{1},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=tableheading}:] change the \cs{caption} default inside +% \env{table} environments to \cs{captionabove}. +% \end{description} +% \begin{macrocode} + {tableheading}{2},% + {tableabove}{2},{abovetable}{2},{abovetabular}{2},{topattable}{2},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=tablesignature}:] change the \cs{caption} default inside +% \env{table} environment to \cs{captionbelow}. +% \end{description} +% \begin{macrocode} + {tablesignature}{3},% + {tablebelow}{3},{belowtable}{3},{belowtabular}{3},{bottomattable}{3},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=figureheading}:] change the \cs{caption} default inside +% \env{figure} environments to \cs{captionabove}. +% \end{description} +% \begin{macrocode} + {figureheading}{4},{figureabove}{4},{abovefigure}{4},{topatfigure}{4},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=figuresignature}:] change the \cs{caption} default inside +% \env{figure} environment to \cs{captionbelow}. +% \end{description} +% \begin{macrocode} + {figuresignature}{5},{figurebelow}{5},{belowfigure}{5},{bottomatfigure}{5},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=oneline}:] special treatment for one line captions. +% \end{description} +% \begin{macrocode} + {oneline}{6},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=oneline}:] no special treatment for one line captions. +% \end{description} +% \begin{macrocode} + {nooneline}{7},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=rightbeside}:] change horizontal \env{captionbeside} placement +% to right beside (see \cs{scap@pos} above). +% \end{description} +% \begin{macrocode} + {rightbeside}{8},{besideright}{8},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=leftbeside}:] change horizontal \env{captionbeside} placement +% to left beside (see \cs{scap@pos} above). +% \end{description} +% \begin{macrocode} + {leftbeside}{9},{besideleft}{9},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=innerbeside}:] change horizontal \env{captionbeside} placement +% to inner beside (see \cs{scap@pos} above). +% \end{description} +% \begin{macrocode} + {innerbeside}{10},{besideinner}{10},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=outerbeside}:] change horizontal \env{captionbeside} placement +% to outer beside (see \cs{scap@pos} above). +% \end{description} +% \begin{macrocode} + {outerbeside}{11},{besideouter}{11},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=topbeside}:] change vertical \env{captionbeside} alignment +% to top (see \cs{scap@valign} above). +% \end{description} +% \begin{macrocode} + {topbeside}{12},{besidetop}{12},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=centeredbeside}:] change vertical \env{captionbeside} alignment +% to centered (see \cs{scap@valign} above). +% \end{description} +% \begin{macrocode} + {centeredbeside}{13},{besidecentered}{13},% + {middlebeside}{13},{besidemiddle}{13},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=bottombeside}:] change vertical \env{captionbeside} alignment +% to bottom (see \cs{scap@valign} above). +% \end{description} +% \begin{macrocode} + {bottombeside}{14},{besidebottom}{14}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed + \ifcase \@tempa\relax % heading + \@tablecaptionabovetrue + \@figurecaptionabovetrue + \@captionabovetrue + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{heading}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{signature}% + \KOMA@kav@add{.\KOMAClassFileName}{captions}{heading}% + \or % signature + \@tablecaptionabovefalse + \@figurecaptionabovefalse + \@captionabovefalse + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{heading}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{signature}% + \KOMA@kav@add{.\KOMAClassFileName}{captions}{signature}% + \or % tableheading + \@tablecaptionabovetrue + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{tableheading}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{tablesignature}% + \KOMA@kav@add{.\KOMAClassFileName}{captions}{tableheading}% + \or % tablesignature + \@tablecaptionabovefalse + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{tableheading}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{tablesignature}% + \KOMA@kav@add{.\KOMAClassFileName}{captions}{tablesignature}% + \or % figureheading + \@figurecaptionabovetrue + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{figureheading}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{figuresignature}% + \KOMA@kav@add{.\KOMAClassFileName}{captions}{figureheading}% + \or % figuresignature + \@figurecaptionabovefalse + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{figureheading}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{figuresignature}% + \KOMA@kav@add{.\KOMAClassFileName}{captions}{figuresignature}% + \or % oneline + \onelinecaptionstrue + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{oneline}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{nooneline}% + \KOMA@kav@add{.\KOMAClassFileName}{captions}{oneline}% + \or % nooneline + \onelinecaptionsfalse + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{oneline}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{nooneline}% + \KOMA@kav@add{.\KOMAClassFileName}{captions}{nooneline}% + \or % rightbeside + \renewcommand*{\scap@pos}{r}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{rightbeside}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{leftbeside}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{innerbeside}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{outerbeside}% + \KOMA@kav@add{.\KOMAClassFileName}{captions}{rightbeside}% + \or % leftbeside + \renewcommand*{\scap@pos}{l}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{rightbeside}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{leftbeside}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{innerbeside}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{outerbeside}% + \KOMA@kav@add{.\KOMAClassFileName}{captions}{leftbeside}% + \or % innerbeside + \renewcommand*{\scap@pos}{i}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{rightbeside}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{leftbeside}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{innerbeside}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{outerbeside}% + \KOMA@kav@add{.\KOMAClassFileName}{captions}{innerbeside}% + \or % outerbeside + \renewcommand*{\scap@pos}{o}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{rightbeside}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{leftbeside}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{innerbeside}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{outerbeside}% + \KOMA@kav@add{.\KOMAClassFileName}{captions}{outerbeside}% + \or % topbeside + \renewcommand*{\scap@valign}{t}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{topbeside}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{centeredbeside}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{bottombeside}% + \KOMA@kav@add{.\KOMAClassFileName}{captions}{topbeside}% + \or % centeredbeside + \renewcommand*{\scap@valign}{c}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{topbeside}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{centeredbeside}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{bottombeside}% + \KOMA@kav@add{.\KOMAClassFileName}{captions}{centeredbeside}% + \or % bottombeside + \renewcommand*{\scap@valign}{b}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{topbeside}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{centeredbeside}% + \KOMA@kav@remove{.\KOMAClassFileName}{captions}{bottombeside}% + \KOMA@kav@add{.\KOMAClassFileName}{captions}{bottombeside}% + \fi + \fi +} +\KOMA@kav@add{.\KOMAClassFileName}{captions}{signature} +\KOMA@kav@add{.\KOMAClassFileName}{captions}{tablesignature} +\KOMA@kav@add{.\KOMAClassFileName}{captions}{figuresignature} +\KOMA@kav@add{.\KOMAClassFileName}{captions}{oneline} +\KOMA@kav@add{.\KOMAClassFileName}{captions}{rightbeside} +\KOMA@kav@add{.\KOMAClassFileName}{captions}{bottombeside} +% \end{macrocode} +% \end{option}^^A captions +% +% \begin{option}{tablecaptionabove,tablecaptionbelow} +% \changes{v2.8h}{2001/07/19}{added} +% \changes{v2.8k}{2001/08/15}{moved from \pkg*{typearea} into the classes} +% \changes{v2.98c}{2008/02/18}{obsolete} +% \changes{v3.01a}{2008/11/20}{deprecated} +% Implementation of deprecated options by mapping them to corresponding +% \pkg*{keyval} options. +% \begin{macrocode} +\KOMA@DeclareDeprecatedOption{tablecaptionabove}{captions=tableheading} +\KOMA@DeclareDeprecatedOption{tablecaptionbelow}{captions=tablesignature} +% \end{macrocode} +% \end{option}^^A tablecaptionabove,tablecaptionbelow +% +% \begin{option}{origlongtable} +% \changes{v2.8l}{2001/08/16}{added} +% If package \pkg{longtable} is loaded, the classes redefine table titles +% of that package. However, if the option has been set, this is prevented. +% \begin{macro}{\@komalongtablefalse,\@komalongtabletrue,\if@komalongtable} +% \changes{v2.8l}{2001/08/16}{added} +% The wanted behaviour is stored in a boolean. +% \begin{macrocode} +\newif\if@komalongtable\@komalongtabletrue +\DeclareOption{origlongtable}{\@komalongtablefalse} +% \end{macrocode} +% \end{macro}^^A \if@komalongtable +% \end{option}^^A origlongtable +% +% \begin{option}{onelinecaption,noonelinecaption} +% \changes{v2.8q}{2001/11/17}{new option} +% \changes{v2.98c}{2008/03/03}{obsolete} +% \changes{v2.98c}{2008/03/03}{extra code for \pkg{caption2} removed} +% \changes{v3.01a}{2008/11/20}{deprecated} +% Implementation of deprecated options by mapping them to corresponding +% \pkg*{keyval} options. +% \begin{macrocode} +\KOMA@DeclareDeprecatedOption{onelinecaption}{captions=oneline} +\KOMA@DeclareDeprecatedOption{noonelinecaption}{captions=nooneline} +%</option> +% \end{macrocode} +% \end{option}^^A onelinecaption,noonelinecaption +% +% +% \subsection{Macros and commands for the captions} +% +% \changes{v2.2c}{1995/05/25}{support for CJK added} +% The initial feature for defining captions somehow different from the +% standard classes was a request of Werner Lember to add support for CJK +% languages. However not everything is changed. For example the usual lengths +% of the standard classes are still defined, but interpreted somehow different. +% +% \begin{length}{\abovecaptionskip,\belowcaptionskip} +% The distance above and below a caption. The default for captions below the +% object is 10\,pt above the caption and 0 below. Note: For captions above +% the object the lengths are switched: \len{abovecaptionskip} is used +% \emph{below} the caption and \len{belowcaptionskip} is used \emph{above} +% the caption then. +% \begin{macrocode} +%<*body> +\newlength{\abovecaptionskip} +\newlength{\belowcaptionskip} +\setlength{\abovecaptionskip}{10\p@} +\setlength{\belowcaptionskip}{0\p@} +% \end{macrocode} +% \end{length}^^A \abovecaptionskip,\belowcaptionskip +% \begin{command}{\captionformat} +% \changes{v2.3c}{1995/08/06}{added} +% Separator between label (with number) an text only. +% \begin{macrocode} +\newcommand*{\captionformat}{:\ } +% \end{macrocode} +% \end{command}^^A \captionformat +% \begin{command}{\captionabove,\captionbelow} +% \changes{v2.8h}{2001/07/19}{added} +% \begin{macro}{\scr@caption} +% \changes{v2.8h}{2001/07/19}{added} +% We have two different commands \cs{captionabove} and \cs{captionbelow} to +% distinguish captions above or below the object. Internally both use +% \cs{scr@caption}, but set either \cs{@captionabovetrue} or +% \cs{@captionabovefalse}. To allow other packages (e.g. \pkg{hyperref} to +% redefine \cs{caption} the final definition of \cs{scr@caption} is done in +% |\begin{document}|. We cannot use \cs{caption} inside \cs{captionabove} or +% \cs{captionbelow}, because we do use a redefinition of \cs{capion} to use +% \cs{captionabove} or \cs{captionbelow} via \opt{atbegin} at \cs{DeclareNewTOC}. +% \begin{macrocode} +\newcommand{\scr@caption}{} +\AtBeginDocument{\let\scr@caption\caption} +% \end{macrocode} +% \end{macro}^^A \scr@caption +% Jetzt ist es möglich durch einfaches Umlegen des Schalters für die +% korrekte Darstellung zu sorgen: +% \begin{macrocode} +\newcommand{\captionabove}{\@captionabovetrue\scr@caption} +\newcommand{\captionbelow}{\@captionabovefalse\scr@caption} +% \end{macrocode} +% \end{command}^^A \captionabove,\captionbelow +% +% +% \begin{environment}{captionbeside} +% \changes{v2.8q}{2001/11/22}{added} +% Placing captions above or below the object inside a float is easy. But to +% place it beside the object an additional environment is needed. This has to +% collect the object (environment body) into a box and then print it side by +% side with a second box with the caption. Note: This cannot work with +% tables of package \pkg{longtable} or \pkg{supertabular} or similar packages. +% \begin{quote}\raggedright +% |\begin{captionbeside}|\oarg{list +% entry}\marg{caption}\oarg{position}\oarg{with}\oarg{offset}|*|\\ +% \dots\\ +% |\end{captionbeside}| +% \end{quote} +% Note: The asterisk is optional and changes the meaning of \meta{offset}. +% \begin{macro}{\scap@caption} +% \changes{v2.8q}{2001/11/22}{added} +% The \meta{caption} is locally stored into helper macro \cs{scap@caption}. +% \begin{macrocode} +\newcommand*{\scap@caption}{} +% \end{macrocode} +% \end{macro}^^A \scap@caption +% \begin{macro}{\scap@width} +% \changes{v2.8q}{2001/11/22}{added} +% The optional \meta{width}, which is the width of the whole environment +% inclusive caption, is locally stored into helper macro \cs{scap@width}. The +% default is the while line width. +% \begin{macrocode} +\newcommand*{\scap@width}{\linewidth} +% \end{macrocode} +% \end{macro}^^A \scap@width +% \begin{macro}{\scap@move} +% \changes{v2.8q}{2001/11/22}{added} +% If \cs{scap@width} is not the line width, the environment is horizontal +% centered by default. But if \meta{offset} is used, this is used as a +% distance from the left margin. This is locally stored into helper macro +% \cs{scap@move}. +% \begin{macrocode} +\newcommand*{\scap@move}{\z@} +% \end{macrocode} +% \end{macro}^^A \scap@move +% \begin{macro}{\scap@altfalse,\scap@alttrue,\ifscap@alt} +% \changes{v2.8q}{2001/11/22}{added} +% The boolean switch \cs{ifscap@alt} is used to decide if in twoside mode the +% movement of \cs{scap@move} has to be done from the left or the right margin +% and to left or to the right. +% \begin{macrocode} +\newif\ifscap@alt +% \end{macrocode} +% \end{macro}^^A \ifscap@alt +% \begin{macro}{\scap@currentlabel} +% \changes{v2.8q}{2001/11/24}{added} +% Because of using \cs{caption} inside a box and inside an environment, a +% label after the \env{captionbeside} environment usually would not reference +% the caption number. To preserve this after the end of the +% \env{captionbeside} the current label is locally stored into global +% \cs{scap@currentlabel} and restored after the end of the environment using +% \cs{aftergroup}. Note: You can have only one \cs{label} inside!. +% \begin{macrocode} +\newcommand*{\scap@currentlabel}{} +% \end{macrocode} +% \end{macro}^^A \scap@currentlabel +% \begin{macro}{\@@@captionbeside,\@@captionbeside,\@captionbeside} +% \changes{v2.8q}{2001/11/22}{added} +% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by \cs{kernel@ifnextchar}} +% \begin{macro}{\@@@@captionbeside} +% \changes{v2.8q}{2001/11/22}{added} +% \changes{v3.20}{2016/04/12}{\cs{@ifstar} replaced by \cs{kernel@ifstar}} +% To handle all the optional arguments and the optional star at the end, +% several helper macros are needed (because we currently do not use \pkg{xparse}). +% \begin{macrocode} +\newcommand*{\@captionbeside}{} +\long\def\@captionbeside[#1]#2{% + \kernel@ifnextchar [%] + {\@@captionbeside[{#1}]{#2}} + {\c@pti@nb@sid@[{#1}]{#2}}% +} +\newcommand*{\@@captionbeside}{} +\long\def\@@captionbeside[#1]#2[#3]{% + \def\scap@pos{#3}% + \kernel@ifnextchar [%] + {\@@@captionbeside[{#1}]{#2}} + {\c@pti@nb@sid@[{#1}]{#2}}% +} +\newcommand*{\@@@captionbeside}{} +\long\def\@@@captionbeside[#1]#2[#3]{% + \def\scap@width{#3}% + \kernel@ifnextchar [%] + {\@@@@captionbeside[{#1}]{#2}} + {\setlength{\@tempdima}{#3}% + \addtolength{\@tempdima}{-\linewidth}% + \setlength{\@tempdima}{-.5\@tempdima}% + \edef\scap@move{\the\@tempdima}% + \c@pti@nb@sid@[{#1}]{#2}}% +} +\newcommand*{\@@@@captionbeside}{} +\long\def\@@@@captionbeside[#1]#2[#3]{% + \def\scap@move{#3}% + \kernel@ifstar + {\scap@alttrue\c@pti@nb@sid@[{#1}]{#2}} + {\scap@altfalse\c@pti@nb@sid@[{#1}]{#2}}% +} +% \end{macrocode} +% \end{macro}^^A \@@@@captionbeside +% \end{macro}^^A \@@@captionbeside … \@captionbeside +% \begin{macro}{\c@pti@nb@sid@b@x} +% \changes{v2.8q}{2001/11/22}{added} +% We also use our own box register to collect the environment body. +% \begin{macrocode} +\newbox\c@pti@nb@sid@b@x +% \end{macrocode} +% \end{macro} +% \begin{macro}{\c@pti@nb@sid@} +% \changes{v2.8q}{2001/11/22}{added} +% \changes{v2.98c}{2008/03/11}{vertical alignment fixed} +% \changes{v3.07a}{2010/11/04}{vertical alignment \texttt{t} and \texttt{b} fixed} +% This is the real beginning of the environment. After collecting all the +% arguments into local macros. +% \begin{macrocode} +\newcommand{\c@pti@nb@sid@}{} +\long\def\c@pti@nb@sid@[#1]#2{% + \def\scap@caption{% + \if c\scap@valign + \setlength{\abovecaptionskip}{\z@}% + \else \if t\scap@valign + \setlength{\abovecaptionskip}{-\ht\strutbox}% + \else \if b\scap@valign + \setlength{\abovecaptionskip}{\z@}% + \fi + \fi + \fi + \setlength{\belowcaptionskip}{-\dp\strutbox}% + \captionbelow[{#1}]{#2}% + }% + \begin{lrbox}{\c@pti@nb@sid@b@x}% +} +% \end{macrocode} +% \end{macro}^^A \c@pti@nb@sid@ +% Now we can use all of the helper macros to begin the environment. We use +% \LaTeX{} kernel macro \cs{@dblarg} to define an argument with first +% optional argument defaults to mandatory second argument. +% \begin{macrocode} +\newenvironment*{captionbeside}{% + \@dblarg\@captionbeside +}{% +% \end{macrocode} +% This was easy (because of using all the helper macros), but the end of the +% environment isn't. Here we do all the calculations for printing. +% \changes{v2.9a}{2002/06/27}{\cs{ifthispageodd} replaced by \cs{if@thispageodd}} +% \changes{v3.28}{2019/11/19}{\cs{ifthispageodd} replaced by \cs{Ifthispageodd}} +% \begin{macrocode} + \end{lrbox}% + \settowidth{\@tempdima}{\usebox\c@pti@nb@sid@b@x}% + \setlength{\@tempdimb}{\scap@width}% + \addtolength{\@tempdimb}{-\@tempdima}% + \addtolength{\@tempdimb}{-\columnsep}% + \ifdim \@tempdimb<2em + \ClassWarning{\KOMAClassName}{% + caption beside will be very, very small.\MessageBreak + In most cases this will result in overfull and\MessageBreak + underfull \string\hbox\space messages% + }% + \fi + \onelinecaptionsfalse + \setcapwidth[r]{\@tempdimb}% + \let\@tempa\scap@pos + \setlength{\@tempdimc}{\scap@move}% + \if i\scap@pos\def\@tempa{l}\fi + \if o\scap@pos\def\@tempa{r}\fi + \if@twoside + \Ifthispageodd{}{% + \if o\scap@pos\def\@tempa{l}\fi + \if i\scap@pos\def\@tempa{r}\fi + \ifscap@alt + \addtolength{\@tempdimc}{\scap@width}% + \addtolength{\@tempdimc}{-\linewidth}% + \setlength{\@tempdimc}{-\@tempdimc}% + \fi + }% + \fi + \hspace*{\@tempdimc}% +% \end{macrocode} +% \changes{v2.9p}{2003/12/10}{\cs{@temdima} replaced by +% \cs{wd}\cs{c@pti@nb@sid@b@x}, because \cs{@temdima} would be changed} +% \begin{macrocode} + \if l\@tempa + \rlap{% + \parbox[\scap@valign]{\@tempdimb}{\scap@caption + \global\let\scap@currentlabel\@currentlabel}% + \nobreak\hskip\columnsep + \parbox[\scap@valign]{\wd\c@pti@nb@sid@b@x}{\usebox\c@pti@nb@sid@b@x}% + }% + \else + \rlap{% + \parbox[\scap@valign]{\wd\c@pti@nb@sid@b@x}{\usebox\c@pti@nb@sid@b@x}% + \nobreak\hskip\columnsep + \parbox[\scap@valign]{\@tempdimb}{\scap@caption + \global\let\scap@currentlabel\@currentlabel}% + }% + \fi + \par + \aftergroup\let\aftergroup\@currentlabel + \aftergroup\scap@currentlabel +} +% \end{macrocode} +% \end{environment}^^A captionbeside +% +% +% \begin{fontelement}{caption,captionlabel} +% We need two font elements for the caption at whole and the label part only. +% \begin{macro}{\capfont,\caplabelfont} +% \changes{v2.8c}{2001/06/29}{\cs{normalcolor} added} +% Originally two user macros has been used to change the fonts. To stay +% compatible with old \KOMAScript{} and also i.e. with package \pkg{caption}, +% we still define \cs{capfont} and \cs{caplabelfont} as internal storage of +% the font elements. But already from \KOMAScript{} version 2.8c these should +% be interpreted as internal macros. +% \begin{macrocode} +\newcommand*\capfont{\normalfont\normalcolor} +\newcommand*\caplabelfont{\normalfont\normalcolor} +% \end{macrocode} +% \end{macro}^^A \capfont,\caplabelfont +% \begin{macro}{\scr@fnt@caption,\scr@fnt@captionlabel} +% \changes{v2.8o}{2001/09/14}{added} +% Because of that non-default for the internal storage the font elements have +% to be defined \emph{manually} instead of using \cs{newkomafont}. +% \begin{macrocode} +\newcommand*{\scr@fnt@caption}{\capfont} +\newcommand*{\scr@fnt@captionlabel}{\caplabelfont} +% \end{macrocode} +% \end{macro}^^A \scr@fnt@caption,\scr@fnt@captionlabel +% \end{fontelement}^^A caption,captionlabel +% +% \begin{macro}{\@makecaption} +% \changes{v2.3a}{1995/07/08}{using \cs{sbox} instead of \cs{setbox}} +% \changes{v2.3a}{1995/07/08}{using \cs{@minipagefalse}} +% \changes{v2.3f}{1995/12/09}{using same font switching for long and short captions} +% \changes{v2.5g}{1999/10/09}{supporting partial hanging captions} +% \begin{macro}{\dofullc@pfalse,\dofullc@ptrue,\ifdofullc@p} +% The boolean switch \cs{ifdofullc@p} is true for caption texts, that should +% be full hanging (behind the label part), which is the default. +% \begin{macrocode} +\newif\ifdofullc@p +\dofullc@ptrue +% \end{macrocode} +% \end{macro}^^A \ifdofullc@p +% \begin{macro}{\if@capbreak} +% \changes{v2.8j}{2001/07/30}{added} +% The boolean switch \cs{if@capbreak} is true, if the label should be followed +% by a line break, which is not the case by default. +% \begin{macrocode} +\newif\if@capbreak +\@capbreakfalse +% \end{macrocode} +% \end{macro}^^A \@capbreakfalse +% \begin{command}{\setcapindent} +% \begin{macro}{\@@setcaptindent,\@setcapindent} +% \changes{v2.8j}{2001/07/30}{using \cs{if@capbreak}} +% \changes{v2.8l}{2001/08/17}{using \cs{edef}\cs{cap@indent} instead of +% \cs{def}\cs{cap@indent}} +% \changes{v2.8q}{2001/11/17}{redefined after loading \pkg{caption2}} +% \changes{v3.20}{2016/04/12}{\cs{@ifstar} replaced by \cs{kernel@ifstar}} +% \changes{v3.34}{2021/03/22}{special treatment of \pkg{caption2} removed} +% The user can configure the indent using: +% \begin{quote} +% \cs{setcapindent}*\marg{indent} +% \end{quote} +% The optional asterisk activates a line break between the label and the +% text. The \meta{indent} is always an indent of the text from the left. A +% local dimension assignment is done to report errors here and not at +% usage of \cs{cap@indent}. +% \begin{macrocode} +\newcommand*{\setcapindent}{\kernel@ifstar{\@@setcapindent}{\@setcapindent}} +\newcommand*{\@setcapindent}[1]{% + \setlength{\@tempdima}{#1}% + \ifdim\@tempdima>\hsize + \addtolength{\@tempdima}{-\hsize}\@capbreaktrue + \else + \@capbreakfalse + \fi + \edef\cap@indent{\the\@tempdima}% + \dofullc@pfalse +} +\newcommand*{\@@setcapindent}[1]{% + \setlength{\@tempdima}{#1}% + \edef\cap@indent{\the\@tempdima}% + \dofullc@pfalse\@capbreaktrue +} +% \end{macrocode} +% \end{macro}^^A \@@setcaptindent,\@setcapindent +% \end{command}^^A \setcapindent +% \begin{command}{\setcaphanging} +% \changes{v2.8q}{2001/11/17}{redefined after loading \pkg{caption2}} +% \changes{v3.34}{2021/03/22}{special treatment of \pkg{caption2} removed} +% Alternatively the user can select the full hanging printing. +% \begin{macrocode} +\newcommand*{\setcaphanging}{\dofullc@ptrue\@capbreakfalse} +% \end{macrocode} +% \end{command} +% Now, we have all to define \cs{@makecaption} as needed by the \LaTeX{} kernel. +% \changes{v2.5g}{1999/10/09}{using \cs{newcommand}} +% \changes{v2.8h}{2001/07/19}{support for headings and signatures} +% \changes{v2.8j}{2001/07/30}{using \cs{@@makecaption}} +% \changes{v2.8q}{2001/11/17}{special treatment of one line captions is optional} +% \changes{v2.8q}{2001/11/17}{caption width can be limited} +% \begin{macrocode} +\newcommand{\@makecaption}[2]{% + \if@captionabove + \vskip\belowcaptionskip + \else + \vskip\abovecaptionskip + \fi + \@@makecaption\@firstofone{#1}{#2}% + \if@captionabove + \vskip\abovecaptionskip + \else + \vskip\belowcaptionskip + \fi +} +% \end{macrocode} +% \begin{macro}{\cap@width,\cap@left,\cap@right} +% \changes{v2.8q}{2001/11/17}{added} +% Multi line captions can printed with a reduced with. If the width is reduced +% the left an right margin can be changed. The defaults are centering. +% \begin{macrocode} +\newcommand*{\cap@width}{\hsize} +\newcommand*{\cap@left}{\hfill} +\newcommand*{\cap@right}{\hfill} +% \end{macrocode} +% \end{macro}^^A \cap@width,\cap@left,\cap@right +% \begin{command}{\setcapwidth} +% \changes{v2.8q}{2001/11/17}{added} +% \changes{v2.9a}{2002/06/27}{\cs{ifthispageodd} replaced by \cs{if@thispageodd}} +% \changes{v2.97}{2007/02/27}{minimum width for captions is 0\,pt} +% \changes{v3.28}{2019/11/19}{\cs{ifthispageodd} replaced by \cs{Ifthispageodd}} +% \changes{v3.34}{2021/03/22}{special treatment of \pkg{caption2} removed} +% The user command: +% \begin{quote} +% \cs{setcapwidth}\oarg{alignment}\marg{width} +% \end{quote} +% is one choice to set \cs{cap@width} to \meta{width}. The optional +% \meta{alignment} (as usual |l|, |r|, |o|, or |i|) also changes \cs{cap@left} +% and \cs{cap@right}. +% \begin{macrocode} +\newcommand*{\setcapwidth}[2][]{% + \begingroup% + \setlength{\@tempdima}{#2}% + \ifdim\@tempdima <\z@ + \@tempdima\z@ + \ClassWarning{\KOMAClassName}{% + caption width less than 0pt not allowed.\MessageBreak + Setting caption width to 0pt% + }% + \fi + \edef\@tempa{\endgroup\def\noexpand\cap@width{\the\@tempdima}}% + \@tempa + \begingroup + \edef\@tempa{#1}% + \def\@tempb{c}\ifx\@tempa\@tempb + \endgroup + \def\cap@margin{\let\cap@left=\hfill\let\cap@right=\hfill}% + \else + \def\@tempb{l}\ifx\@tempa\@tempb + \endgroup + \def\cap@margin{\let\cap@left=\relax\let\cap@right\hfill}% + \else + \def\@tempb{r}\ifx\@tempa\@tempb + \endgroup + \def\cap@margin{\let\cap@left=\hfill\let\cap@right=\relax}% + \else + \def\@tempb{i}\ifx\@tempa\@tempb + \endgroup + \def\cap@margin{% + \let\cap@left=\relax + \let\cap@right=\hfill + \if@twoside + \Ifthispageodd{}{% + \let\cap@left=\hfill + \let\cap@right=\relax + }% + \fi + }% + \else + \def\@tempb{o}\ifx\@tempa\@tempb + \endgroup + \def\cap@margin{% + \let\cap@left=\hfill + \let\cap@right=\relax + \if@twoside + \Ifthispageodd{}{% + \let\cap@left=\relax + \let\cap@right=\hfill + }% + \fi + }% + \else + \ifx \@tempa\@empty\else + \ClassError{\KOMAClassName}{% + unknown optional position argument% + }{% + You've used `#1' as position argument at + \string\setcaptionwidth,\MessageBreak + but only ONE of `c', `l', `r', `i`, `o` ist + allowed.\MessageBreak + Argument will be ignored, if you'll continue.% + }% + \fi + \endgroup + \fi\fi\fi\fi\fi +} +% \end{macrocode} +% \end{command}^^A \setcapwidth +% \begin{command}{\setcapdynwidth} +% \changes{v3.20}{2016/03/31}{added} +% Ulrike Fischer requested for an alternative, that does not behave like +% \cs{setlength} and therefore sets the length already at usage of +% \cs{setcapwidth} but at usage of \cs{cap@width}. This is +% \cs{setcapdynwidth}. But in this case mistakes can result in errors while +% usage of \cs{cap@width} too. +% \begin{macrocode} +\newcommand*{\setcapdynwidth}[2][]{% + \def\cap@width{#2}% + \begingroup + \edef\@tempa{#1}% + \def\@tempb{c}\ifx\@tempa\@tempb + \endgroup + \def\cap@margin{% + \ifdim \cap@width<\z@ + \ClassWarning{\KOMAClassName}{% + caption width less than 0pt not allowed.\MessageBreak + Setting caption width to 0pt% + }% + \let\cap@width\z@ + \fi + \let\cap@left=\hfill\let\cap@right=\hfill}% + \else + \def\@tempb{l}\ifx\@tempa\@tempb + \endgroup + \def\cap@margin{% + \ifdim \cap@width<\z@ + \ClassWarning{\KOMAClassName}{% + caption width less than 0pt not allowed.\MessageBreak + Setting caption width to 0pt% + }% + \let\cap@width\z@ + \fi + \let\cap@left=\relax\let\cap@right\hfill}% + \else + \def\@tempb{r}\ifx\@tempa\@tempb + \endgroup + \def\cap@margin{% + \ifdim \cap@width<\z@ + \ClassWarning{\KOMAClassName}{% + caption width less than 0pt not allowed.\MessageBreak + Setting caption width to 0pt% + }% + \let\cap@width\z@ + \fi + \let\cap@left=\hfill\let\cap@right=\relax}% + \else + \def\@tempb{i}\ifx\@tempa\@tempb + \endgroup + \def\cap@margin{% + \ifdim \cap@width<\z@ + \ClassWarning{\KOMAClassName}{% + caption width less than 0pt not allowed.\MessageBreak + Setting caption width to 0pt% + }% + \let\cap@width\z@ + \fi + \let\cap@left=\relax + \let\cap@right=\hfill + \if@twoside + \Ifthispageodd{}{% + \let\cap@left=\hfill + \let\cap@right=\relax + }% + \fi + }% + \else + \def\@tempb{o}\ifx\@tempa\@tempb + \endgroup + \def\cap@margin{% + \ifdim \cap@width<\z@ + \ClassWarning{\KOMAClassName}{% + caption width less than 0pt not allowed.\MessageBreak + Setting caption width to 0pt% + }% + \let\cap@width\z@ + \fi + \let\cap@left=\hfill + \let\cap@right=\relax + \if@twoside + \Ifthispageodd{}{% + \let\cap@left=\relax + \let\cap@right=\hfill + }% + \fi + }% + \else + \ifx \@tempa\@empty\else + \ClassError{\KOMAClassName}{% + unknown optional position argument% + }{% + You've used `#1' as position argument at + \string\setcaptionwidth,\MessageBreak + but only ONE of `c', `l', `r', `i`, `o` ist + allowed.\MessageBreak + Argument will be ignored, if you'll continue.% + }% + \fi + \endgroup + \fi\fi\fi\fi\fi +} +% \end{macrocode} +% \end{command}^^A \setcapdynwidth +% \begin{macro}{\cap@margin} +% \changes{v2.8q}{2001/11/17}{added} +% \cs{cap@margin} is used to recalculate \cs{cap@left} and \cs{cap@right} +% inside \cs{@@makecaption}, if the margins has been set using +% \cs{setcapmargin}. Default is no such action. +% \begin{macrocode} +\newcommand*{\cap@margin}{} +\let\cap@margin=\relax% +% \end{macrocode} +% \end{macro}^^A \cap@margin +% \begin{command}{\setcapmargin} +% \changes{v2.8q}{2001/11/17}{neu} +% \changes{v3.20}{2016/04/12}{\cs{@ifstar} replaced by \cs{kernel@ifstar}} +% \begin{macro}{\@@setcapmargin,\@setcapmargin} +% \changes{v2.8q}{2001/11/17}{added} +% \changes{v2.9a}{2002/06/27}{\cs{ifthispageodd} replaced by \cs{if@thispageodd}} +% \changes{v3.28}{2019/11/19}{\cs{ifthispageodd} replaced by \cs{Ifthispageodd}} +% \changes{v3.34}{2021/03/22}{special treatment for \pkg{caption2} removed} +% Instead of setting of the width of the caption, the left and right margin +% can be set. The star variant switch left and right depending on odd or even +% side in two side mode. +% \begin{macrocode} +\newcommand*{\setcapmargin}{\kernel@ifstar{\@setcapmargin}{\@@setcapmargin}} +\newcommand*{\@setcapmargin}[2][\@tempdimb]{% + \def\cap@margin{% + \onelinecaptionsfalse + \begingroup + \setlength{\@tempdima}{\hsize}% + \setlength{\@tempdimb}{#2}% + \addtolength{\@tempdima}{-\@tempdimb}% + \setlength{\@tempdimc}{#1}% + \addtolength{\@tempdima}{-\@tempdimc}% + \edef\@tempa{\endgroup + \def\noexpand\cap@width{\the\@tempdima}% + \noexpand\if@twoside + \noexpand\Ifthispageodd{% + \def\noexpand\cap@left{\noexpand\hspace*{\the\@tempdimc}}% + \def\noexpand\cap@right{\noexpand\hspace*{\the\@tempdimb}}% + }{% + \def\noexpand\cap@right{\noexpand\hspace*{\the\@tempdimc}}% + \def\noexpand\cap@left{\noexpand\hspace*{\the\@tempdimb}}% + }% + \noexpand\else + \def\noexpand\cap@left{\noexpand\hspace*{\the\@tempdimc}}% + \def\noexpand\cap@right{\noexpand\hspace*{\the\@tempdimb}}% + \noexpand\fi + }% + \@tempa + }% +} +\newcommand*{\@@setcapmargin}[2][\@tempdimb]{% + \def\cap@margin{% + \onelinecaptionsfalse + \begingroup + \setlength{\@tempdima}{\hsize}% + \setlength{\@tempdimb}{#2}% + \addtolength{\@tempdima}{-\@tempdimb}% + \setlength{\@tempdimc}{#1}% + \addtolength{\@tempdima}{-\@tempdimc}% + \edef\@tempa{\endgroup + \def\noexpand\cap@width{\the\@tempdima}% + \def\noexpand\cap@left{\noexpand\hspace*{\the\@tempdimc}}% + \def\noexpand\cap@right{\noexpand\hspace*{\the\@tempdimb}}% + }% + \@tempa + }% +} +% \end{macrocode} +% \end{macro}^^A \@@setcapmargin,\@setcapmargin +% \end{command}^^A \setcapmargin +% \begin{macro}{\@@makecaption} +% The main job is done by \cs{@@makecaption}. It has an additional first +% argument, that has to be either \cs{@gobble} or \cs{@firstofone}. This is +% used to either set a label or not. This is needed for captions of +% \pkg{longtable}. +% \changes{v2.8q}{2002/05/17}{avoid double increase of footnote number} +% \changes{v2.95}{2004/01/30}{fixing vertical skips also with \pkg{float}} +% \changes{v2.95a}{2006/07/13}{fixing vertical skips with \pkg{color}} +% \changes{v2.97c}{2007/06/06}{\cs{unskip}\cs{strut} added to fix vertical +% positions in some \emph{above} cases} +% \changes{v3.02a}{2009/01/24}{braces fixed} +% \changes{v3.11c}{2013/06/12}{using \cs{usekomafont}} +% \changes{v3.12}{2013/06/12}{one \cs{usekomafont} replaced by \cs{usesizeofkomafont}} +% \changes{v3.21}{2016/05/31}{re-implemented} +% \begin{macrocode} +\newcommand{\@@makecaption}[3]{% +% \end{macrocode} +% Recalculate the margins. +% \begin{macrocode} + \cap@margin +% \end{macrocode} +% Test for special treatment of one line captions. +% \changes{v3.22}{2016/09/01}{local redefinition of \cs{stepcounter} and +% \cs{refstepcounter} because of \pkg{isodate}} +% \begin{macrocode} + \begingroup + \ifonelinecaptions + \def\stepcounter##1{\advance\value{##1}\@ne}% + \let\refstepcounter\stepcounter + \let\label\@gobble + \let\@footnotetext=\@gobble + \let\hypertarget\@gobbletwo +% \end{macrocode} +% \changes{v3.22}{2016/09/01}{special treatment of hard coded line breaks} +% If there are hard coded line breaks using |\\| or \cs{newline}, we inform +% the user to use a multi-line caption. +% \begin{macrocode} + \edef\@xnewline{% + \unexpanded{\ClassInfo{\KOMAClassName}{% + Workaround for not recommended usage of \string\\ or\MessageBreak + \string\newline in caption text + }% + \hspace*{\linewidth}\hspace{1sp}% + }% + \unexpanded\expandafter{\@xnewline}% + }% + \edef\@xcentercr{% + \unexpanded{\ClassInfo{\KOMAClassName}{% + Workaround for not recommended usage of \string\\ or\MessageBreak + \string\newline in caption text + }% + \hspace*{\linewidth}\hspace{1sp}% + }% + \unexpanded\expandafter{\@xcentercr}% + }% + \settowidth{\@tempdima}{\scr@@makesinglelinecaption{#1}{#2}{#3}}% +% \end{macrocode} +% \changes{v3.34}{2021/03/22}{fix of maximum line width of single line +% captions} +% Until \KOMAScript~3.34 the test here was wrong, because it used +% \cs{linewidth}, which is still the whole line width not the maximum caption +% width. From \KOMAScript~3.34 \cs{cap@width} is used. +% \begin{macrocode} + \ifdim\@tempdima>\cap@width + \aftergroup\scr@makemultilinecaption + \else + \aftergroup\scr@makesinglelinecaption + \fi + \else + \aftergroup\scr@makemultilinecaption + \fi + \endgroup + {#1}{#2}{#3}% +} +% \end{macrocode} +% \begin{macro}{\scr@@makesinglelinecaption,\scr@makesinglelinecaption} +% \changes{v3.21}{2016/05/31}{added} +% The output of single line captions. The first argument once again is +% \cs{@gobble} (to not show a label) or \cs{@firstofone} (to show the +% label). Argument two and three are the label (without separator, that is +% added here) and the caption text. +% \begin{macrocode} +\newcommand{\scr@makesinglelinecaption}[3]{% + {% + \usefontofkomafont{caption}{% + \hb@xt@\hsize{% + \cap@left + \scr@@makesinglelinecaption{#1}{#2}{#3}% + \cap@right + }\par\kern\dp\strutbox% + }% + }\kern-\dp\strutbox +} +\newcommand{\scr@@makesinglelinecaption}[3]{% + \usekomafont{caption}{\strut\ignorespaces + #1{{\usekomafont{captionlabel}{#2\captionformat}}}% + \ignorespaces #3\unskip}% +} +% \end{macrocode} +% \end{macro}^^A \scr@@makesinglelinecaption,\scr@makesinglelinecaption +% \begin{macro}{\scr@makemultilinecaption} +% \changes{v3.21}{2016/05/31}{added} +% The output of multi line captions. The arguments are same as above. +% \begin{macrocode} +\newcommand{\scr@makemultilinecaption}[3]{% + {% + \usefontofkomafont{caption}{% + \hb@xt@\hsize{% + \cap@left + \vbox{\hsize\cap@width\linewidth\hsize +% \end{macrocode} +% \changes{v3.25}{2017/11/15}{caption alignment added} +% First of all we have to use the ragged type depending in the float/caption +% type. If the float/caption type is unknown we can use the general ragged +% type only. +% \begin{macrocode} + \scr@ifundefinedorrelax{@captype}{% + \ClassWarning{\KOMAClassName}{% + `\string\caption' outside float.\MessageBreak + Seems you are using `\string\caption' outside a + float.\MessageBreak + Maybe you are using a package that uses + `\string\@makecaption'\MessageBreak + without setting `\string\@captype' before.\MessageBreak + Because I cannot detect the caption type, I'm using\MessageBreak + the empty one.% + }% + \let\@captype\@empty + }{}% + \scr@ifundefinedorrelax{ragged\@captype caption}{\raggedcaption}{% + \@nameuse{ragged\@captype caption}% + }% +% \end{macrocode} +% Maybe we have to us a full hanging caption. +% \changes{v3.25}{2017/11/15}{Using \cs{scr@endstrut} instead of \cs{unskip}\cs{strut}} +% \begin{macrocode} + \ifdofullc@p + \@hangfrom{% + \strut + \scr@smashdp{% + #1{% + \usekomafont{caption}{% + \usekomafont{captionlabel}{#2\captionformat}% + }% + }% + }% + }% + {\usekomafont{caption}{#3\scr@endstrut\par}}% +% \end{macrocode} +% Maybe a partial hanging caption with line break after the label. +% \begin{macrocode} + \else + \ifdim\cap@indent<\z@ + \strut + #1{% + \usekomafont{caption}{% + \usekomafont{captionlabel}{#2\captionformat\par}% + }% + }% + \noindent{\usekomafont{caption}{% + \hspace*{-\cap@indent}#3\scr@endstrut\par + }}% +% \end{macrocode} +% Or a line break after the label with full hanging. +% \begin{macrocode} + \else + \if@capbreak + \strut + #1{% + \usekomafont{caption}{% + \usekomafont{captionlabel}{#2\captionformat\par}% + }% + }% + \noindent\@hangfrom{\hspace*{\cap@indent}}% + {\usekomafont{caption}{#3\scr@endstrut\par}}% +% \end{macrocode} +% \changes{v3.27a}{2019/10/21}{missing usage of \fnt{caption} added} +% Or no line break but still with indent. +% \begin{macrocode} + \else + \@hangfrom{\scr@smashdp\strut\hspace*{\cap@indent}}% + {% + \hspace{-\cap@indent}% + \scr@smashdp{% + #1{\usekomafont{caption}{% + \usekomafont{captionlabel}{#2\captionformat}% + }% + }% + }% + {\usekomafont{caption}{#3\scr@endstrut}\par}% + }% + \fi + \fi + \fi +% \end{macrocode} +% Here we could also add the not hanging version without line break: +% \begin{macrocode} +%<*neverusethis> +% #1{{\usekomafont{caption}{% +% \usekomafont{captionlabel}{#2\captionformat}}}}% +% {\usekomafont{capion}{\ignorespaces #3\scr@endstrut\par}% +%</neverusethis> +% \end{macrocode} +% But this is not needed, because it is the same like indent of 0. +% \begin{macrocode} + }% + \cap@right + }\par\kern\dp\strutbox + }% + }\kern-\dp\strutbox +} +% \end{macrocode} +% \begin{command}{\setcaptionalignment} +% \begin{macro}{\@setcaptionalignment} +% \changes{v3.25}{2017/11/15}{added} +% \changes{v3.28}{2019/11/18}{\cs{ifstr} replaced by \cs{Ifstr}} +% It is better for users to not define the \cs{raggedcaption} and +% \cs{ragged\dots caption} commands themselves to avoid mistakes. So we have +% \begin{quote} +% \cs{setcaptionalignment}\oarg{float}\marg{alignment} +% \end{quote} +% If \meta{float} is used, \cs{ragged\meta{float}caption} will be changed. If +% \meta{float} is not used, but \cs{@captype} is defined (and not \cs{relax}) +% \cs{ragged\cs{@captype}caption} is defined. If \meta{float} is empty or +% \cs{captype} is undefined (or \cs{relax}) and \meta{float} is not used, +% \cs{raggedcaption} will be changed. +% \begin{macrocode} +\newcommand*\setcaptionalignment{% + \kernel@ifnextchar [%] + {\@setcaptionalignment} + {% + \scr@ifundefinedorrelax{@captype}{\@setcaptionalignment}{% + \edef\reserved@a{\noexpand\@setcaptionalignment[{\@captype}]}\reserved@a + }% + }% +}% +\newcommand*\@setcaptionalignment[2][]{% +% \end{macrocode} +% If \meta{float} is not empty it should be the name of a already defined +% floating environment. Otherwise we report a warning, but nevertheless define +% the command. +% \begin{macrocode} + \IfArgIsEmpty{#1}{}{% + \expandafter\ifnum + \scr@ifundefinedorrelax{#1}{0}{\scr@ifundefinedorrelax{end#1}{0}{1}}=0 + \ClassWarning{\KOMAClassName}{% + float type `#1' defined not yet,\MessageBreak + but setting ragged mode for captions of\MessageBreak + float type `#1'% + }% + \fi + }% +% \end{macrocode} +% Depending on \meta{alignment} the command will be changed: +% \begin{description} +% \item[\texttt{j}] -- justified (\cs{ragged\dots caption} becomes \cs{relax}). +% \item[\texttt{l}] -- left aligned (\cs{ragged\dots caption} becomes +% \cs{raggedright}). +% \item[\texttt{r}] -- right aligned (\cs{ragged\dots caption} becomes +% \cs{raggedleft}). +% \item[\texttt{c}] -- centered (\cs{ragged\dots caption} becomes +% \cs{centering}. +% \end{description} +% Note: If \pkg{ragged2e} has been loaded, \cs{LaTeXraggedright}, +% \cs{LaTeXraggedleft} and \cs{LaTeXcentering} are used and the following +% additional \meta{alignment}s are supported: +% \begin{description} +% \item[\texttt{J}] -- justified (\cs{ragged\dots caption} becomes \cs{justifying}). +% \item[\texttt{L}] -- left aligned (\cs{ragged\dots caption} becomes +% \cs{RaggedRight}). +% \item[\texttt{R}] -- right aligned (\cs{ragged\dots caption} becomes +% \cs{RaggedLeft}). +% \item[\texttt{C}] -- centered (\cs{ragged\dots caption} becomes +% \cs{Centering}. +% \end{description} +% Without \pkg{ragged2e} the upper case letters are same like lower case +% letters, but additionally warn. Note: The implementation does also work, if +% \pkg*{scrlayer-scrpage} has defined \cs{LaTeXraggedright} etc. +% \begin{macrocode} + \def\reserved@a{#2}% + \Ifstr{\reserved@a}{j}{% + \expandafter\let\csname ragged#1caption\endcsname\@empty + }{% + \Ifstr{\reserved@a}{l}{% + \scr@ifundefinedorrelax{LaTeXraggedright}{% + \expandafter\let\csname ragged#1caption\endcsname\raggedright + }{% + \expandafter\let\csname ragged#1caption\endcsname\LaTeXraggedright + }% + }{% + \Ifstr{\reserved@a}{r}{% + \scr@ifundefinedorrelax{LaTeXraggedleft}{% + \expandafter\let\csname ragged#1caption\endcsname\raggedleft + }{% + \expandafter\let\csname ragged#1caption\endcsname\LaTeXraggedleft + }% + }{% + \Ifstr{\reserved@a}{c}{% + \scr@ifundefinedorrelax{LaTeXcentering}{% + \expandafter\let\csname ragged#1caption\endcsname\centering + }{% + \expandafter\let\csname ragged#1caption\endcsname\LaTeXcentering + }% + }{% + \Ifstr{\reserved@a}{J}{% + \scr@ifundefinedorrelax{justifying}{% + \scr@caption@raggede@warning{J}{\justifying}% + \expandafter\let\csname ragged#1caption\endcsname\@empty + }{% + \expandafter\let\csname ragged#1caption\endcsname\justifying + }% + }{% + \Ifstr{\reserved@a}{L}{% + \scr@ifundefinedorrelax{RaggedRight}{% + \scr@caption@raggede@warning{L}{\RaggedRight}% + \expandafter\let\csname ragged#1caption\endcsname\raggedright + }{% + \expandafter\let\csname ragged#1caption\endcsname\RaggedRight + }% + }{% + \Ifstr{\reserved@a}{R}{% + \scr@ifundefinedorrelax{RaggedLeft}{% + \scr@caption@raggede@warning{R}{\RaggedLeft}% + \expandafter\let\csname ragged#1caption\endcsname\raggedleft + }{% + \expandafter\let\csname ragged#1caption\endcsname\RaggedLeft + }% + }{% + \Ifstr{\reserved@a}{C}{% + \scr@ifundefinedorrelax{Centering}{% + \scr@caption@raggede@warning{C}{\Centering}% + \expandafter\let\csname ragged#1caption\endcsname\centering + }{% + \expandafter\let\csname ragged#1caption\endcsname\Centering + }% + }{% + \Ifstr{\reserved@a}{}{% + \expandafter\let\csname ragged#1caption\endcsname\relax + }{% + \ClassError{\KOMAClassName}{unknown alignment char `#2'}{% + \string\setcaptionalignment\space supports + only:\MessageBreak + \space\space c - centered captions,\MessageBreak + \space\space j - justified captions,\MessageBreak + \space\space l - left align captions,\MessageBreak + \space\space r - right aligned captions,\MessageBreak + \space\space C - centered captions with + `ragged2e',\MessageBreak + \space\space J - justified captions with + `ragged2e',\MessageBreak + \space\space L - left align captions with + `ragged2e',\MessageBreak + \space\space R - right aligned captions with + `ragged2e',\MessageBreak + or an empty argument to remove special + alignment.\MessageBreak + If you'd continue, I'd not change the alignment.% + }% + }% + }% + }% + }% + }% + }% + }% + }% + }% +} +% \end{macrocode} +% \begin{macro}{\scr@caption@raggede@warning} +% \changes{v3.25}{2017/11/15}{added} +% The warning used above. +% \begin{macrocode} +\newcommand*{\scr@caption@raggede@warning}[2]{% + \begingroup + \lowercase{\def\reserved@a{#1}}% + \ClassWarning{\KOMAClassName}{% + `\string#2' undefined!\MessageBreak + To avoid replacing caption alignment `#1' by `\reserved@a'\MessageBreak + you should load package `ragged2e' before using\MessageBreak + `\string\setcaptionalignment'% + }% + \endgroup +} +% \end{macrocode} +% \begin{command}{\raggedcaption} +% \changes{v3.25}{2017/11/15}{added} +% The default alignment is standard alignment (empty means no change). +% \begin{macrocode} +\newcommand*\raggedcaption{} +% \end{macrocode} +% \end{command}^^A \raggedcaption +% \end{macro}^^A \scr@caption@raggede@warning +% \end{macro}^^A \@setcaptionalignment +% \end{command}^^A \setcaptionalignment +% \end{macro}^^A \scr@makemultilinecaption +% \end{macro}^^A \@@makecaption +% \end{macro}^^A \@makecaption +% +% \subsection{Special treatment of \texorpdfstring{\pkg*{longtable}}{`longtable'} captions} +% +% \begin{macro}{\LT@makecaption} +% \changes{v2.8j}{2001/07/30}{added} +% \changes{v2.8k}{2001/08/15}{do nothing if \pkg{caption2} has been loaded or +% option \opt{origlongtable} has been used} +% \changes{v2.8q}{2001/11/18}{width and alignment by \KOMAScript{}} +% \changes{v2.8q}{2001/11/18}{using \cs{AfterPackage}} +% \changes{v2.9s}{2004/08/24}{vertical skips fixed by moving \cs{vskip}} +% \changes{v3.34}{2021/03/22}{special treatment of \pkg{caption2} removed} +% \begin{macro}{\LT@array,\LT@caption} +% \changes{v2.8q}{2001/11/18}{added} +% \begin{macro}{\scr@caption@before@longtable@warning} +% \changes{v2.98c}{2008/03/03}{added} +% The code for \pkg{longtable} has to be delayed until loading the package. +% \begin{macrocode} +\newcommand*{\scr@caption@before@longtable@warning}[1]{% + \ClassWarning{\KOMAClassName}{% + you've loaded package `#1' before package\MessageBreak + `longtable'!\MessageBreak + Because of this package `#1' isn't able to\MessageBreak + control `\string\caption' at longtables. \space After loading + \MessageBreak + package `#1' KOMA-Script also doesn't control\MessageBreak + `\string\caption'.\MessageBreak + I think, you should load package `caption' after\MessageBreak + package `longtable'% + }% +} +\AfterPackage{longtable}{% + \if@komalongtable + \renewcommand{\LT@makecaption}[3]{% + \noalign{% + \if@captionabove + \vskip\belowcaptionskip + \else + \vskip\abovecaptionskip + \fi + }% + \LT@mcol\LT@cols c{% + \hbox to\z@{\hss\parbox[t]\linewidth{% +% \end{macrocode} +% \changes{v3.25}{2017/11/15}{\cs{@captype} set to \texttt{table}} +% To make \cs{raggedtablecaption} available, \cs{@captype} has to be defined. +% \begin{macrocode} + \def\@captype{table}% + \@@makecaption{#1}{#2}{#3}% + \endgraf + \if@captionabove + \vskip\abovecaptionskip + \else + \vskip\belowcaptionskip + \fi + }% + \hss + }% + }% + }% + \newcommand*{\scr@LT@array}{}% + \let\scr@LT@array=\LT@array + \renewcommand*{\LT@array}{% + \let\scr@caption=\LT@caption + \def\captionabove{\noalign{\global\@captionabovetrue}% + \scr@caption}% + \def\captionbelow{\noalign{\global\@captionabovefalse}% + \scr@caption}% + \if@tablecaptionabove + \let\LT@caption=\captionabove + \else + \let\LT@caption=\captionbelow + \fi + \scr@LT@array + }% + \ClassInfo{\KOMAClassName}{% + longtable captions redefined% + }% + \fi +} +% \end{macrocode} +% \end{macro}^^A \scr@caption@before@longtable@warning +% \end{macro}^^A \LT@array,\LT@caption +% \end{macro}^^A \LT@makecaption +% +% \subsection{Special treatment of the \texorpdfstring{\pkg*{float}}{`float'} package} +% +% \begin{macro}{\fs@komaabove,\fs@komabelow,\floatc@komascript} +% \changes{v2.8j}{2001/07/30}{added} +% We define two float style for package \pkg{float}: \texttt{komaabove} and +% \texttt{komabelow}. However this is done independent of loading \pkg{float}, +% because maybe someone else also uses those styles (but I don't think so). +% Note: Internal macros of \pkg{float} has to be used for the definitions. +% \begin{macrocode} +\newcommand*{\fs@komaabove}{% + \let\@fs@capt\floatc@komascript + \let\@fs@pre\@empty + \def\@fs@mid{\vskip\abovecaptionskip}% + \let\@fs@post\@empty + \let\@fs@iftopcapt\iftrue} +\newcommand*{\fs@komabelow}{% + \let\@fs@capt\floatc@komascript + \let\@fs@pre\@empty + \def\@fs@mid{\vskip\abovecaptionskip}% + \let\@fs@post\@empty + \let\@fs@iftopcapt\iffalse} +\newcommand{\floatc@komascript}{\@@makecaption\@firstofone} +% \end{macrocode} +% \end{macro}^^A \fs@komabove,\fs@komabelow,\floatc@komascript +% +% +% \subsection{Where to place floats} +% +% \begin{counter}{topnumber} +% \begin{command}{\topfraction} +% \begin{counter}{bottomnumber} +% \begin{command}{\bottomfraction} +% \begin{counter}{totalnumber} +% \begin{command}{\textfraction} +% \begin{command}{\floatpagefraction} +% \begin{counter}{dbltopnumber} +% \begin{command}{\dbltopfraction} +% \begin{command}{\dblfloatpagefraction} +% These are constants used by the \LaTeX{} kernel to decide where to place a +% float. See the kernel documentation for more information. +% \begin{macrocode} +\setcounter{topnumber}{2} +\renewcommand*\topfraction{.7} +\setcounter{bottomnumber}{1} +\renewcommand*\bottomfraction{.3} +\setcounter{totalnumber}{3} +\renewcommand*\textfraction{.2} +\renewcommand*\floatpagefraction{.5} +\setcounter{dbltopnumber}{2} +\renewcommand*\dbltopfraction{.7} +\renewcommand*\dblfloatpagefraction{.5} +% \end{macrocode} +% \end{command} +% \end{command} +% \end{counter} +% \end{command} +% \end{command} +% \end{counter} +% \end{command} +% \end{counter} +% \end{command} +% \end{counter} +% +% +% \subsection{Caption without float} +% +% \begin{command}{\captionof} +% \changes{v3.05}{2009/07/08}{added} +% \changes{v3.09}{2011/03/21}{using internal \cs{scr@caption}} +% \changes{v3.09a}{2011/04/13}{handling of +% \opt{captions\quotechar=tableheading} and \opt{captions\quotechar=figureheading}} +% \begin{command}{\captionaboveof,\captionbelowof} +% \changes{v3.09}{2011/03/21}{added} +% We do not only provide a \cs{captionof} like \pkg{caption} or \pkg{capt-of} +% but also \cs{captionaboveof} and \cs{captionbelowof}. Users should not +% additionally use \pkg{capt-of}, but if they do, the definition of that +% package will be used instead (which is usually not, what the user want, but +% what they decided to do). +% \begin{macrocode} +\newcommand*{\captionof}[1]{\def\@captype{#1}% + \begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname if@#1captionabove\endcsname\iftrue + \@captionabovetrue + \fi + \scr@caption} +\newcommand*{\captionaboveof}{\@captionabovetrue\captionof} +\newcommand*{\captionbelowof}{\@captionabovefalse\captionof} +\BeforePackage{capt-of}{\let\captionof\relax} +% \end{macrocode} +% \end{command}^^A \captionaboveof,\captionbelowof +% \end{command}^^A \captionof +% +% \begin{environment}{captionofbeside} +% \changes{v3.10}{2011/09/02}{added} +% The analogue environment to \cs{captionbeside} to be used outside +% floats. +% \begin{description} +% \item[ToDo:] Wouldn't it be a good idea to test for already defined +% \cs{@captype} inside \env{captionbeside} and then expect an additional first +% argument \meta{float}? In this case user could simply us \env{captionbeside} +% the same way as \env{captionofbeside}. +% \end{description} +% \begin{macrocode} +\newenvironment{captionofbeside}[1]{% + \def\@captype{#1}% + \captionbeside +}{% + \endcaptionbeside +} +% \end{macrocode} +% \end{environment} +% +% +% \subsection{Names} +% +% \begin{command}{\figurename,\tablename} +% \changes{v3.36}{2022/02/15}{explicit definition for English languages} +% The names to be used for the float labels. +% \begin{macrocode} +\newcommand*\figurename{Figure} +\providecaptionname{american,australian,british,canadian,english,newzealand,% + UKenglish,ukenglish,USenglish,usenglish}\figurename{Figure} +\newcommand*\tablename{Table} +\providecaptionname{american,australian,british,canadian,english,newzealand,% + UKenglish,ukenglish,USenglish,usenglish}\tablename{Table} +% \end{macrocode} +% \end{command}^^A \figurename,\tablename +% +% +% \subsection{Defining the \env{figure} environment} +% +% \begin{environment}{figure*,figure-,figure} +% \changes{v2.2c}{1995/05/25}{initial CJK support} +% \changes{v2.8h}{2001/07/19}{\cs{caption} is \cs{captionbelow}} +% \changes{v3.25}{2017/10/10}{re-implemented using \pkg*{tocbasic}} +% \changes{v3.36}{2022/02/22}{define additional non-float} +% \begin{counter}{figure} +% \changes{v3.25}{2017/10/10}{implicit by \cs{DeclareNewTOC}} +% \end{counter} +% We do the main job using \cs{DeclareNewTOC}: +% \begin{macrocode} +\DeclareNewTOC[% + type=figure, + float, + nonfloat, +%<book|report> counterwithin=chapter, +% \end{macrocode} +% \begin{macro}{\fps@figure} +% Default placement (by \cs{DeclareNewTOC}) \textbf{t}op, \textbf{b}ottom, +% \textbf{p}age. +% \begin{macrocode} + floatpos=tbp, +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ftype@figure} +% Numerical float type 1 (by \cs{DeclareNewTOC}). +% \begin{macrocode} + floattype=1, +% \end{macrocode} +% \end{macro} +% \changes{v3.11c}{2013/03/01}{fix: one \cs{caption} change removed} +% \changes{v3.20}{2016/04/07}{internal redefinition of \cs{caption}} +% \begin{macrocode} + tocentryindent=1.5em, + tocentrynumwidth=2.3em, + atbegin=\def\caption{% + \if@figurecaptionabove\expandafter\captionabove + \else\expandafter\captionbelow\fi + } +% \end{macrocode} +% \begin{macro}{\ext@figure} +% Extension to be used (by \cs{DeclareNewTOC}) +% \begin{macrocode} +]{lof} +% \end{macrocode} +% \end{macro} +% \begin{command}{\thefigure} +% \changes{v2.97e}{2007/11/23}{using chapter number in main-matter only} +% \changes{v3.27}{2019/06/26}{\cs{relax} replaced by percent} +% \changes{v3.35}{2021/10/12}{use chapter number only of greater than zero} +% \changes{v3.35}{2021/10/12}{redefine \cs{thefigure} only if compatibility is +% less or equal 2.97d resp. less than 3.35} +% \begin{macrocode} +%<*book|report> +\expandafter\ifnum\scr@v@is@le{2.97d}% + \renewcommand*\thefigure{\thechapter.\@arabic\c@figure} +\fi +%</book|report> +%<*article> +\expandafter\ifnum\scr@v@is@lt{3.35}% + \renewcommand*\thefigure{\@arabic\c@figure} +\fi +%</article> +% \end{macrocode} +% \end{command} +% \begin{macro}{\fnum@figure} +% \begin{command}{\figureformat} +% \changes{v2.3c}{1995/08/06}{added} +% The print format of the number (by \cs{DeclareNewTOC}). +% \end{command} +% \end{macro} +% \end{environment} +% +% +% \subsection{Defining the \env{table} environment} +% +% Note: This is almost the same as defining the \env{figure} environment. So +% read the previous section first. +% +% \begin{environment}{table*,table-,table} +% \changes{v2.2c}{1995/05/25}{initial CJK support} +% \changes{v2.8h}{2001/07/19}{\cs{caption} is \cs{captionbelow}} +% \changes{v3.25}{2017/10/10}{re-implemented using \pkg*{tocbasic}} +% \changes{v3.36}{2022/02/22}{define additional non-float} +% \begin{counter}{table} +% \changes{v3.25}{2017/10/10}{implicit by \cs{DeclareNewTOC}} +% \end{counter} +% We do the main job using \cs{DeclareNewTOC}: +% \begin{macrocode} +\DeclareNewTOC[% + type=table, + float, + nonfloat, +%<book|report> counterwithin=chapter, +% \end{macrocode} +% \begin{macro}{\fps@table} +% Default placement (by \cs{DeclareNewTOC}) \textbf{t}op, \textbf{b}ottom, +% \textbf{p}age. +% \begin{macrocode} + floatpos=tbp, +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ftype@table} +% Numerical float type 2 (by \cs{DeclareNewTOC}). +% \begin{macrocode} + floattype=2, +% \end{macrocode} +% \end{macro} +% \changes{v3.20}{2016/04/07}{internal redefinition of \cs{caption}} +% \begin{macrocode} + tocentryindent=1.5em, + tocentrynumwidth=2.3em, + atbegin=\def\caption{% + \if@tablecaptionabove\expandafter\captionabove + \else\expandafter\captionbelow\fi + } +% \end{macrocode} +% \begin{macro}{\ext@table} +% Extension to be used (by \cs{DeclareNewTOC}) +% \begin{macrocode} +]{lot} +% \end{macrocode} +% \end{macro} +% \begin{command}{\thetable} +% \changes{v2.97e}{2007/11/23}{using chapter number in main-matter only} +% \changes{v3.27}{2019/06/26}{\cs{relax} replaced by percent} +% \changes{v3.35}{2021/10/12}{use chapter number only of greater than zero} +% \changes{v3.35}{2021/10/12}{redefine \cs{thefigure} only if compatibility is +% less or equal 2.97d resp. less than 3.35} +% \begin{macrocode} +%<*book|report> +\expandafter\ifnum\scr@v@is@le{2.97d}% + \renewcommand*\thetable{\thechapter.\@arabic\c@table} +\fi +%</book|report> +%<*article> +\expandafter\ifnum\scr@v@is@lt{3.35}% + \renewcommand*\thetable{\@arabic\c@table} +\fi +%</article> +%</body> +% \end{macrocode} +% \end{command} +% \begin{macro}{\fnum@table} +% \begin{command}{\tableformat} +% \changes{v2.3c}{1995/08/06}{added} +% The print format of the number (by \cs{DeclareNewTOC}). +% \end{command} +% \end{macro} +% \end{environment} +% +% \begin{macrocode} +%</class&!letter> +% \end{macrocode} +% +% \Finale +% \PrintChanges +% +\endinput +% Local Variables: +% mode: doctex +% ispell-local-dictionary: "en_US" +% eval: (flyspell-mode 1) +% TeX-master: t +% TeX-engine: luatex-dev +% eval: (setcar (or (cl-member "Index" (setq-local TeX-command-list (copy-alist TeX-command-list)) :key #'car :test #'string-equal) (setq-local TeX-command-list (cons nil TeX-command-list))) '("Index" "mkindex %s" TeX-run-index nil t :help "makeindex for dtx")) +% End: |