% \iffalse meta-comment % % This is file `caption-koma.dtx'. % % Copyright (C) 2004-2023 Axel Sommerfeldt (axel.sommerfeldt@f-m.fm) % % -------------------------------------------------------------------------- % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.3 or later is part of all distributions of LaTeX % version 2003/12/01 or later. % % This work has the LPPL maintenance status "maintained". % % This Current Maintainer of this work is Axel Sommerfeldt. % % This work consists of the files % caption.ins, caption.dtx, caption-light.dtx, caption2.dtx, caption3.dtx, % caption-ams-smf.dtx, caption-beamer.dtx, caption-elsarticle.dtx, % caption-koma.dtx, caption-memoir.dtx, caption-ntg.dtx, % caption-thesis.dtx, bicaption.dtx, ltcaption.dtx, subcaption.dtx, % the derived files % caption.sty, caption-light.sty, caption2.sty, caption3.sty, % caption-ams-smf.sto, caption-beamer.sto, caption-elsarticle.sto, % caption-koma.sto, caption-memoir.sto, caption-ntg.sto, % caption-thesis.sto, bicaption.sty, ltcaption.sty, subcaption.sty. % % \fi % % \CheckSum{262} % % \iffalse %<*driver> \NeedsTeXFormat{LaTeX2e}[1994/12/01] \ProvidesFile{caption-koma.drv}[2023/07/10 v2.0 Implementation of the caption-koma package] %\errorcontextlines=3 % \documentclass{captiondoc} \hypersetup{pdfkeywords={LaTeX, package, caption-koma}} % \begin{document} \DocInput{caption-koma.dtx} \end{document} % % \fi % % \GetFileInfo{caption-koma.drv} % \let\docdate\filedate % \let\docversion\fileversion % \GetFileInfo{caption-koma.sto} % % \title{\texorpdfstring % {The adaption of the \pkg{caption} package to the \KOMAScript\ document classes\thanks{%^^A % This adaption has version number \docversion.}}%^^A % {The adaption of the caption package to the KOMA-Script document classes}} % \author{Axel Sommerfeldt\\ % \url{https://gitlab.com/axelsommerfeldt/caption}} % \date{\docdate} % \maketitle % % \begin{abstract} % This package adapts the \pkg{caption} package to the \KOMAScript\ document classes. % \end{abstract} % % \section*{User manual} % % This document is describing the code implementation only. % The user documentation can be found in % \nopagebreak\begin{quote} % \begin{tabular}{ll} % \href{http://mirror.ctan.org/macros/latex/contrib/caption/caption.pdf}% % {\texttt{caption.pdf}} & The caption package documentation \\ % \end{tabular} % \end{quote} % % \section*{State of this package} % % Please note that the last major revision of this code was done in the year 2007, % afterwards the \KOMAScript\ support was adapted to changes in the \pkg{caption} package only. % % So nearly everything which has changed in the caption support of \KOMAScript\ since 2007 is not reflected here. % (So for example |\set|\-|cap|\-|dyn|\-|width| is not emulated yet etc.) % % \StopEventually{} % \iffalse % \clearpage % \tableofcontents % \fi % % \iffalse % --------------------------------------------------------------------------- % % \fi % % \DoNotIndex{\\,\_,\ ,\@@par} % \DoNotIndex{\@bsphack} % \DoNotIndex{\@car,\@cdr,\@classoptionslist,\@cons,\@currext,\@currname} % \DoNotIndex{\@ehc,\@ehd,\@empty,\@esphack,\@expandtwoargs} % \DoNotIndex{\@for,\@firstofone,\@firstoftwo} % \DoNotIndex{\@gobble,\@gobblefour,\@gobbletwo,\@hangfrom} % \DoNotIndex{\if@minipage,\@ifnextchar,\@ifpackagelater,\@ifpackageloaded} % \DoNotIndex{\@ifstar,\@ifundefined,\@latex@error,\@minipagefalse,\@minipagetrue} % \DoNotIndex{\@namedef,\@nameuse} % \DoNotIndex{\@onlypreamble,\@parboxrestore,\@plus,\@ptionlist} % \DoNotIndex{\@removeelement,\@restorepar,\@secondoftwo,\@setminipage,\@setpar} % \DoNotIndex{\@tempa,\@tempboxa,\@tempdima,\@tempdimb,\@tempdimc,\@tempb,\@tempc} % \DoNotIndex{\@testopt} % \DoNotIndex{\@undefined,\@unprocessedoptions,\@unusedoptionlist} % \DoNotIndex{\p@,\z@} % \DoNotIndex{\active,\addtocounter,\addtolength,\advance,\aftergroup} % \DoNotIndex{\baselineskip,\begin,\begingroup,\bfseries,\box} % \DoNotIndex{\catcode,\centering,\changes,\csname,\def,\divide,\do,\downarrow} % \DoNotIndex{\edef,\else,\empty,\end,\endcsname,\endgraf,\endgroup,\expandafter} % \DoNotIndex{\fi,\footnotesize,\global} % \DoNotIndex{\hangindent,\hbox,\hfil,\hsize,\hskip,\hspace,\hss} % \DoNotIndex{\ifcase,\ifdim,\ifnum,\ifodd,\ifvoid,\ifvmode} % \DoNotIndex{\ifx,\ignorespaces,\itshape} % \DoNotIndex{\kernel@ifnextchar} % \DoNotIndex{\Large,\large,\leavevmode,\leftmargini,\leftskip,\let,\linewidth} % \DoNotIndex{\llap,\long,\m@ne,\margin,\mdseries,\message} % \DoNotIndex{\newcommand,\newdimen,\newlength,\newline,\newif,\newsavebox} % \DoNotIndex{\next,\nobreak,\nobreakspace,\noexpand,\noindent,\numberline} % \DoNotIndex{\normalcolor,\normalfont,\normalsize,\or,\par,\parbox,\parfillskip} % \DoNotIndex{\parindent,\parskip,\prevdepth,\protect,\protected@edef,\protected@write} % \DoNotIndex{\providecommand,\quad} % \DoNotIndex{\raggedleft,\raggedright,\relax,\renewcommand,\RequirePackage} % \DoNotIndex{\rightskip,\rmfamily} % \DoNotIndex{\sbox,\scriptsize,\scshape,\setbox,\setlength,\sffamily,\slshape} % \DoNotIndex{\small,\string,\space,\strut} % \DoNotIndex{\textheight,\the,\toks@,\typeout,\ttfamily} % \DoNotIndex{\unvbox,\uparrow,\upshape,\usebox,\usepackage} % \DoNotIndex{\value,\vbox,\vsize,\vskip,\wd,\width,\z@skip} % \DoNotIndex{\AtBeginDocument,\AtEndOfPackage,\CurrentOption,\DeclareOption} % \DoNotIndex{\ExecuteOptions,\GenericWarning,\IfFileExists,\InputIfFileExists} % \DoNotIndex{\NeedsTeXFormat,\MessageBreak} % \DoNotIndex{\PackageError,\PackageInfo,\PackageWarning,\PackageWarningNoLine} % \DoNotIndex{\PassOptionsToPackage,\ProcessOptions,\ProvidesPackage} % % \iffalse % --------------------------------------------------------------------------- % % \fi % % \setlength{\parskip}{0pt plus 1pt} % \newcommand*\Note[2][Note]{\par{\small\emph{#1:} #2}\par} % % \changes{v1.0a}{2004/01/18}{Minimum adaptation to \KOMAScript\ added} % \changes{v1.0h}{2005/08/22}{\KOMAScript\ compatibility options added} % \changes{v1.0i}{2005/11/17}{\KOMAScript\ compatibility commands added} % \changes{v1.0l}{2007/02/18}{\KOMAScript\ compatibility revised} % \changes{v1.1}{2007/03/17}{\KOMAScript\ compatibility options removed} % \changes{v1.1}{2007/03/31}{\KOMAScript\ classes support added} % \changes{v1.1}{2007/04/05}{\KOMAScript\ compatibility revised \& enhanced} % \changes{v2.0}{2020/07/27}{\KOMAScript\ class support adapted to \pkg{caption3}~\version{2.0}} % % \iffalse % --------------------------------------------------------------------------- % % \fi % % \clearpage % % \iffalse %<*package> % \fi % % \section{Identification} % % \begin{macrocode} \NeedsTeXFormat{LaTeX2e}[1994/12/01] \ProvidesFile{caption-koma.sto}[2023/09/08 v2.0e Adaption of the caption package to the KOMA-Script document classes (AR)] % \end{macrocode} % % \section{Margin or width} % % \begin{macro}{\setcapwidth} % \changes{v1.9}{2018/12/26}{Bugfix: Missing curly braces added} % Patch |\setcapwidth| so it will set the \pkg{caption3} width setting, too. % \begin{macrocode} \expandafter\let\expandafter\caption@koma@setcapwidth \csname\string\setcapwidth\endcsname \@namedef{\string\setcapwidth}[#1]#2{% \caption@koma@setcapwidth[{#1}]{#2}% \caption@setcapwidth@opt{#1}% \caption@setcapwidth} % \end{macrocode} % The optional argument of \cs{setcapwidth} if not supported (yet), % so we issue a warning if used. % (Since this does not seem to have an negative effect when used % by the \texttt{captionbeside} environment, we suppress the warning here.) % \begin{macrocode} \newcommand*\caption@setcapwidth@opt[1]{} \AtCaptionPackage{\renewcommand*\caption@setcapwidth@opt[1]{% \ifx\\#1\\\else \caption@ifdefined\cap@margin{% \def\@tempa{captionbeside}% \ifx\@tempa\@currenvir\else\caption@Warning{% Ignoring optional argument [#1] of \string\setcapwidth\MessageBreak}% \fi}{}% \fi}} % \end{macrocode} % \begin{macrocode} \newcommand*\caption@setcapwidth{% \captionsetup{width=\cap@width}} % \end{macrocode} % \begin{macrocode} \def\caption@tempa{\hsize}% \ifx\caption@tempa\cap@width \else \caption@setcapwidth \fi % \end{macrocode} % \end{macro} % % \emph{TODO:} |\setcapdynwidth| % % \begin{macro}{\setcapmargin} % Patch |\setcapmargin| so it will set the \pkg{caption3} margin setting, too. % \begin{macrocode} \expandafter\let\expandafter\caption@koma@setcapmargin \csname\string\@setcapmargin\endcsname \@namedef{\string\@setcapmargin}[#1]#2{% \caption@koma@setcapmargin[{#1}]{#2}% \caption@setcapmargin} % \end{macrocode} % \begin{macrocode} \expandafter\let\expandafter\caption@koma@@setcapmargin \csname\string\@@setcapmargin\endcsname \@namedef{\string\@@setcapmargin}[#1]#2{% \caption@koma@@setcapmargin[{#1}]{#2}% \caption@setcapmargin} % \end{macrocode} % \begin{macrocode} \newcommand*\caption@setcapmargin{% \begingroup \let\onelinecaptionsfalse\relax \def\@twoside{0}% \def\if@twoside{\def\@twoside{1}\iffalse}% \cap@margin \def\@tempa{\endgroup}% \ifx\cap@left\hfill\else\ifx\cap@right\hfill\else \def\hspace##1##{\@firstofone}% \edef\@tempa{\endgroup \noexpand\captionsetup{% twoside=\@twoside,slc=0,% margin={\cap@left,\cap@right}}}% \fi\fi \@tempa} % \end{macrocode} % \begin{macrocode} \ifx\cap@margin\relax \else \caption@setcapmargin \fi % \end{macrocode} % \end{macro} % % \section{Indentions} % % \begin{macro}{\setcapindent} % Patch |\setcapindent| so it will set the \pkg{caption3} indention setting, too. % \begin{macrocode} \let\caption@koma@setcapindent\@setcapindent \renewcommand*\@setcapindent[1]{% \caption@koma@setcapindent{#1}% \caption@setcapindent} % \end{macrocode} % \begin{macrocode} \let\caption@koma@@setcapindent\@@setcapindent \renewcommand*\@@setcapindent[1]{% \caption@koma@@setcapindent{#1}% \caption@setcapindent} % \end{macrocode} % \begin{macrocode} \newcommand*\caption@setcapindent{% \captionsetup{indent=\ifdim\cap@indent<\z@\z@\else\cap@indent\fi}} % \end{macrocode} % \end{macro} % % \begin{macrocode} \caption@ifdefined\cap@indent{\caption@setcapindent}{} % \end{macrocode} % % \section{Single-line-check} % % \begin{macro}{\ifonelinecaptions} % \changes{v1.1g}{2008/03/01}{\cs{def} changed to \cs{g@addto@macro}} % \changes{v2.0d}{2023/09/08}{Re-written using \cs{DeclareCaptionSinglelinecheck} and \cs{SetCaptionDefault}} % Define an own single-line-check which depends on |\ifonelinecaptions| offered by \KOMAScript. % \begin{macrocode} \DeclareCaptionSinglelinecheck{koma}{% \ifonelinecaptions \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi} % \end{macrocode} % Make this new single-line-check the default one. % \begin{macrocode} \SetCaptionDefault{singlelinecheck}{koma} % \end{macrocode} % Patch |\onelinecaptionstrue| and |onelinecaptionsfalse| so they will set the corresponding \pkg{caption3} setting, too. % \begin{macrocode} \g@addto@macro\onelinecaptionstrue{\caption@setsinglelinecheck{koma}} \g@addto@macro\onelinecaptionsfalse{\caption@setsinglelinecheck{koma}} % \end{macrocode} % \end{macro} % % \section{Format} % % The `koma' caption format was taken from \KOMAScript\ \cs{@makecaption} and adapted. % \begin{macrocode} \DeclareCaptionFormat{koma}[#1#2#3\par]{% \ifdofullc@p \caption@useformat{hang}{#1}{#2}{#3}% \else #1#2% \ifdim\cap@indent<\z@ \par \noindent\hspace*{-\cap@indent}% \else\if@capbreak \par \fi\fi #3\par \fi} % \end{macrocode} % \begin{macrocode} \SetCaptionDefault{format}{koma} % \end{macrocode} % % \section{Label format} % % \begin{macrocode} \DeclareCaptionLabelFormat{koma}{\bothIfFirst{#1}{\nobreakspace}#2\autodot} % \end{macrocode} % The `fallback' caption label format maps to `koma'. % \begin{macrocode} \SetCaptionFallback{labelformat}{koma} % \end{macrocode} % % \section{Label separator} % % The `default' caption label separator maps to \cs{captionformat}. % \begin{macrocode} \DeclareCaptionLabelSeparator{koma}{\captionformat} % \end{macrocode} % \begin{macrocode} \SetCaptionDefault{labelseparator}{koma} % \end{macrocode} % % \section{Fonts} % % The `default' fonts map to \cs{scr@fnt@caption} or \cs{scr@fnt@captonlabel}. % \begin{macrocode} \DeclareCaptionFont{scr@font}{\scr@fnt@caption} \DeclareCaptionFont{scr@labelfont}{\scr@fnt@captionlabel} \SetCaptionDefault{font}{scr@font} \SetCaptionDefault{labelfont}{scr@labelfont} % \end{macrocode} % % \section{Positioning} % % Here we patch the caption related \KOMAScript\ commands to set \pkg{caption} package settings as well. % Furthermore we take over the caption related settings from the \KOMAScript\ classes. % % \begin{macro}{\if@captionabove} % \changes{v1.0j}{2006/03/21}{Bugfix 2006-03-21: \cs{let}\cs{caption@setposition}\cs{@gobble} added} % \changes{v1.0n}{2006/03/09}{Accidentally this got broken in \version{1.0m}, fixed} % \changes{v1.1}{2007/03/31}{We redefine \cs{captionabovetrue/false} now instead of \cs{captionabove/below}} % \changes{v1.1a}{2007/09/14}{Bugfix 2007-09-14: Redefinition of \cs{@captionabovetrue} \& \cs{@captionabovefalse} for \env{longtable} added} % \changes{v1.1g}{2008/03/01}{\cs{def} changed to \cs{g@addto@macro}} % \changes{v1.1k}{2009/10/09}{\opt{figureposition} and \opt{tableposition} will issue a warning now} % \changes{v1.8e}{2019/09/11}{\opt{figureposition} and \opt{tableposition} will now set the position anyway since it could be used by other packages} % \changes{v2.0a}{2020/09/12}{Faulty \cs{AtBeginCaption} replaced with correct \cs{AfterCaptionPackage}} % Patch |\@captionabovetrue| and |\@captionabovefalse| so they will set the \pkg{caption3} position setting, too. % Note that these are stronger than the \opt{position} setting, therefore we override the options % \opt{figureposition} and \opt{tableposition} to typeout a warning. % \begin{macrocode} \g@addto@macro\@captionabovetrue{\caption@setposition{t}}% \g@addto@macro\@captionabovefalse{\caption@setposition{b}}% % \end{macrocode} % \begin{macrocode} \if@captionabove \@captionabovetrue \else \@captionabovefalse \fi % \end{macrocode} % |\captionabove| \& |\captionbelow| for longtable: % \begin{macrocode} \AfterCaptionPackage{\caption@AtBeginLongtable{% \def\@captionabovetrue{\LT@captionsetup{position=t}}% \def\@captionabovefalse{\LT@captionsetup{position=b}}}} % \end{macrocode} % \end{macro} % % \begin{macro}{\if@tablecaptionabove} % \changes{v1.1g}{2008/03/01}{\cs{def} changed to \cs{g@addto@macro}} % Patch |\@tablecaptionabovetrue| and |\@tablecaptionabovefalse| so they will set the \pkg{caption3} position setting, too. % \begin{macrocode} \g@addto@macro\@tablecaptionabovetrue{\captionsetup*[table]{position=t}}% \g@addto@macro\@tablecaptionabovefalse{\captionsetup*[table]{position=b}}% % \end{macrocode} % \begin{macrocode} \if@tablecaptionabove \@tablecaptionabovetrue \else \@tablecaptionabovefalse \fi % \end{macrocode} % \end{macro} % % \begin{macro}{\if@figurecaptionabove} % \changes{v1.5}{2013/02/15}{Support of \cs{if@figurecaptionabove} added} % Patch |\@figurecaptionabovetrue| and |\@figurecaptionabovefalse| so they will set the \pkg{caption3} position setting, too. % \begin{macrocode} \@ifundefined{@figurecaptionabovetrue}{}{% \g@addto@macro\@figurecaptionabovetrue{\captionsetup*[figure]{position=t}}% \g@addto@macro\@figurecaptionabovefalse{\captionsetup*[figure]{position=b}}% % \end{macrocode} % \begin{macrocode} \if@figurecaptionabove \@figurecaptionabovetrue \else \@figurecaptionabovefalse \fi} % \end{macrocode} % \end{macro} % % Since the \KOMAScript\ position setting overwrites the one from the \pkg{caption} package, % we re-define the options |figure|\-|position| and |table|\-|position| to issue a warning. % \Note{But we set the value anyway since it will be used by sub-captions.} % % \begin{macrocode} \AtCaptionPackage{% \let\caption@koma@figureposition\KV@caption@figureposition \DeclareCaptionOption{figureposition}{% \caption@WarningNoLine{% Option `figureposition=#1' has no effect\MessageBreak when used with a KOMA-Script document class}% \caption@koma@figureposition{#1}} % \end{macrocode} % \begin{macrocode} \let\caption@koma@tableposition\KV@caption@tableposition \DeclareCaptionOption{tableposition}{% \caption@WarningNoLine{% Option `tableposition=#1' has no effect\MessageBreak when used with a KOMA-Script document class}% \caption@koma@tableposition{#1}}} % \end{macrocode} % % \section{Adaption of \cs{caption} command} % % \begin{macro}{\scr@caption} % \KOMAScript\ contains the code % |\AtBeginDocument{\let\scr@caption\caption}| % so we need to update |\scr@caption| after the \pkg{caption} package has re-defined |\caption|. % \begin{macrocode} \AtBeginDocument{\let\scr@caption\caption} % \end{macrocode} % \end{macro} % % \iffalse % % \fi % % \iffalse % --------------------------------------------------------------------------- % % \fi % % \clearpage % \Finale % \endinput