% \iffalse meta-comment % % This is file `bicaption.dtx'. % % Copyright (C) 2010-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{642} % % \iffalse %<*driver> \NeedsTeXFormat{LaTeX2e}[1994/12/01] \ProvidesFile{bicaption.drv}[2023/07/10 v1.6 Adds a bilingual caption feature to the caption package] %\errorcontextlines=3 % \documentclass[german,english]{captiondoc} \hypersetup{pdfkeywords={LaTeX, package, bicaption}} % \usepackage[T1]{fontenc} \usepackage[german,english]{babel} %\usepackage{selinput}\SelectInputMappings{adieresis={ä},germandbls={ß}} \usepackage[utf8]{inputenc} % \usepackage{bicaption}[2023/02/19] \usepackage{subcaption}[2023/02/19] % \begin{document} \DocInput{bicaption.dtx} \end{document} % % \fi % % \def\thispackage{the \pkg{bicaption} package} % \def\Thispackage{The \pkg{bicaption} package} % % \GetFileInfo{bicaption.drv} % \let\docdate\filedate % \let\docversion\fileversion % \GetFileInfo{bicaption.sty} % % \title{\texorpdfstring{\Thispackage\thanks{%^^A % This package has version number \docversion.}}%^^A % {The bicaption package}} % \author{Axel Sommerfeldt\\ % \url{https://gitlab.com/axelsommerfeldt/caption}} % \date{\docdate} % \maketitle % % \begin{abstract} % This package supports the typesetting of bilangual captions. % \end{abstract} % % \setcounter{tocdepth}{2} % \tableofcontents % % \clearpage % \section{Loading the package} % \label{sec:loading} % % This package will be loaded by % \begin{quote} % |\usepackage|\oarg{options}|{bicaption}|\quad. % \end{quote} % The options for \thispackage\ are the same ones as for the \pkg{caption} % package and specify settings which are used for the second language \emph{additionally}. % In fact % \begin{quote} % |\usepackage|\oarg{options}|{bicaption}| % \end{quote} % is identical to % \begin{quote} % |\usepackage{bicaption}|\\ % |\bicaptionsetup{}|\marg{options}\quad. % \end{quote} % % When used with the \pkg{babel} or \pkg{polyglossia} package, the % \pkg{bicaption} package should be loaded \emph{after} it, so the main % language will be set automatically. See \autoref{sec:babel} for details. % % \pagebreak[3] % \section{Setting options} % \label{sec:options} % % \DescribeMacro\bicaptionsetup % \NEWfeature*{v1.6} % The |\bicaptionsetup| command sets options specifically for bilingual captions. % % \begin{quote} % |\bicaptionsetup|\marg{options for 1st language}\marg{options for 2nd language} % \end{quote} % sets options which will be used for the first or second heading % of the bilingual captions \emph{additionally} to the ones which are setup for the % specific floating environment. % % \medskip % % To limit bilingual options to specific environments one can use % an optional argument for |\bi|\-|caption|\-|setup|, e.g.: % \begin{quote} % |\bicaptionsetup[figure]{|\ldots|}{|\ldots|}| % \end{quote} % will limit the settings to the bilingual headings of |figure| environments only. % % \bigskip % % Options specified with |\use|\-|package[|\ldots|]{bi|\-|cap|\-|tion}| and % |\bi|\-|cap|\-|tion|\-|setup{|\ldots|}{|\ldots|}| will override the ones specified by % |\cap|\-|tion|\-|setup{|\ldots|}| and |\cap|\-|tion|\-|setup[fig|\-|ure]{|\ldots|}| % (same for `table'). So finally we have the following order how % settings for bilingual captions are applied: % \begin{enumerate} % \item Global settings % {\small(|\usepackage[|\ldots|]{caption}| and |\captionsetup{|\ldots|}|)} % \item Environmental settings % {\small(|\captionsetup[figure|\emph{ -or- }|table]{|\ldots|}|)} % \item Local settings % {\small(|\captionsetup{|\ldots|}| inside |figure| or |table| environment)} % \item Custom bilingual settings % {\small(|\usepackage[|\ldots|]{bicaption}| and |\bicaptionsetup{|\ldots|}{|\ldots|}|)} % \item Environmental bilingual settings % {\small(|\bicaptionsetup[figure|\emph{ -or- }|table]{|\ldots|}{|\ldots|}|)} % \end{enumerate} % \pagebreak[3] % An example: % \begin{quote} % |\usepackage[labelsep=quad,indention=10pt]{caption}|\\ % |\usepackage[labelfont=bf]{bicaption}|\\ % |\captionsetup[table]{labelfont=it,position=top}| % \end{quote} % causes the second heading of the bilingual caption inside |table| environments % to be typeset with the settings % \begin{quote} % |labelsep=quad,indention=10pt,position=top,labelfont=bf|~. % \end{quote} % % \begin{background} % Internally the |\bi|\-|caption|\-|setup| uses the |\caption|\-|setup| command, i.e. % \begin{quote} % |\bicaptionsetup|\marg{options for 1st language}\marg{options for 2nd language} % \end{quote} % is identical to % \begin{quote} % |\captionsetup[bi-first]|\marg{options for 1st language}\\ % |\captionsetup[bi-second]|\marg{options for 2nd language} % \end{quote} % and % \begin{quote} % |\bicaptionsetup[figure]{|\ldots|}{|\ldots|}| % \end{quote} % is identical to % \begin{quote} % |\captionsetup[figure][bi-first]{|\ldots|}|\\ % |\captionsetup[figure][bi-second]{|\ldots|}| \quad . % \end{quote} % Prior to \version{1.6} of this package this was the way options had to be specified. % This still works (and will continue to work in the future), but is not recommended, % |\bi|\-|caption|\-|setup| should be used instead. % \end{background} % % \section{Additional options} % \label{sec:additional-options} % % These options are available additional to the ones offered by the % \pkg{caption} package: % % \begin{Options}{language=} % \item[lang=] % Sets the language of the caption, e.g. % \begin{quote}|\use|\-|package|\-|[lang=eng|\-|lish]{bi|\-|caption}|\end{quote} % will typeset the second caption of bilingual captions in English. % (The language will be set with |\select|\-|caption|\-|language| internally, % see \autoref{sec:babel} for details.) % % \item[bi-lang=] % Causes a selection of the headings of bilingual captions. % \begin{quote}|\captionsetup{bi-lang=both}|\end{quote} % will cause that both caption headings are being typeset.\\ % (This is the default.) % \begin{quote}|\captionsetup{bi-lang=first}|\end{quote} % will cause that only the \emph{first} heading is being typeset, and % \begin{quote}|\captionsetup{bi-lang=second}|\end{quote} % will cause that only the \emph{second} heading is being typeset. % % \item[bi-slc=] % \begin{quote}|\captionsetup{bi-slc=|\meta{bool}|}|\end{quote} % switches the common single-line-check |on| or |off|, i.e.~when switched on % only a single check will be done for both captions, and the result will affect % both captions afterwards. So if only one caption is longer than a single line, % both captions will be treated as if they are longer than a single line, even if % the second one isn't. (The default is |on|.) % % \item[bi-swap=] % \begin{quote}|\captionsetup{bi-swap}|\end{quote} % will swap the primary and secondary language, % making the first language the second one and vice versa. (The default is |false|.) % % \item[bi-separator=] % \NEWfeature{v1.3} % The vertical distance between the first and second bilingual caption is usually % determined by the \TeX\ skips set by |\normal|\-|size| which is applied right % before both captions get typesetted. % (This behaviour is inherited from the original \LaTeX\ code for |\caption| which % applies |\normal|\-|size| right before |\@make|\-|caption|, too.) % \begin{quote}|\captionsetup{bi-separator=|\meta{name}|}|\end{quote} % will select an additional separator between first and second bilingual caption. % You could choose one of the following: `none' (which is the default one % and could also be addressed as `default'), `smallskip', `medskip', % `largeskip', or a self-defined one using % \DescribeMacro{\DeclareBiCaption-\\Separator} % \begin{quote}|\DeclareBiCaptionSeparator|\marg{name}\marg{code}\end{quote} % Examples: % \begin{quote} % |\captionsetup{bi-separator=smallskip}| % \end{quote} % will put a |\smallskip| between the two bilingual captions. % \begin{quote} % |\DeclareBiCaptionSeparator{hrule}{\hrule}|\\ % |\captionsetup{bi-separator=hrule}| % \end{quote} % will draw a horizontal line between the two bilingual captions. % \begin{quote} % |\DeclareBiCaptionSeparator{3pt}{\vspace{3pt}}|\\ % |\captionsetup{bi-separator=3pt}| % \end{quote} % will place |3pt| extra vertical space between the two bilingual captions. % \par\medskip % \textit{Note:} In contrast to the original \LaTeX\ code for |\caption| the % \pkg{caption} package does not apply |\normal|\-|size| directly % but will apply the caption font definition |normal|\-|size| instead % (which is usually defined as |\normal|\-|size|). % Therefore the vertical space between both captions % could also be influenced by redefining it, e.g.: % |\Declare|\-|Caption|\-|Font{normal|\-|size}{|\ldots|}| % \end{Options} % % \emph{Important:} % All options starting with `bi-' must be applied using |\caption|\-|setup| and % \emph{NOT} using |\bi|\-|caption|\-|setup|. % This is because they do not alter the setting of the caption for the 1st or 2nd language specifically, % but instead alter the behaviour how bilingual captions are set in general. % % \section{The \cs{bicaption} commands} % \label{sec:bicaption} % % \DescribeMacro\bicaption % Bilingual captions will be typeset by % \begin{quote} % |\bicaption|\oarg{list entry \#1}\marg{heading \#1}\\ % | |\oarg{list entry \#2}\marg{heading \#2}\\ % |\bicaption*|\marg{heading \#1}\marg{heading \#2} % \end{quote} % The |\label| should be placed either after this command, or inside the first heading. % % \medskip % % Just like in |\caption| an empty \meta{list entry} will suppress the entry in the list of figures or tables, for example % \begin{quote} % |\bicaption[]|\marg{heading \#1}|[]|\marg{heading \#2} % \end{quote} % suppresses both entries. % % \medskip % % \DescribeMacro\bicaptionbox % Bilingual caption boxes will be typeset by % \begin{quote} % |\bicaptionbox|\oarg{list entry \#1}\marg{heading \#1}\\ % | |\oarg{list entry \#2}\marg{heading \#2}\\ % | |\oarg{width}\oarg{inner-pos}\marg{contents}\\ % |\bicaptionbox*|\marg{heading \#1}\marg{heading \#2}\\ % | |\oarg{width}\oarg{inner-pos}\marg{contents} % \end{quote} % The |\label| should be placed inside the first heading. % % \begingroup\small % (For a description of the optional parameters \meta{width} and \meta{inner-pos} % please take a look at the \pkg{caption} package documentation, % \cs{captionbox}.) % \endgroup % % \pagebreak[3] % \section{Customising lists} % \label{sec:lists} % % \DescribeMacro{list=} % As default both caption texts will be insert into the List of Figures or List of Tables. % To suppress the second entry just pass the option |list=off| to the \pkg{bicaption} % package, e.g.: % \begin{quote} % |\usepackage[lang=english,|\ldots|,list=off]{bicaption}| % \end{quote} % or % \begin{quote} % |\usepackage[|\ldots|]{bicaption}|\\ % \ldots\\ % |\bicaptionsetup{}{list=off}| % \end{quote} % % \pagebreak[3] % \DescribeMacro{listtype+=} % Another option is separating the lists. For that purpose the option % \begin{quote} % |listtype+=|\meta{list type extension} % \end{quote} % can be used to tell the \pkg{bicaption} package to use a different list % for the second caption text. % The given value will be appended to the current environment type; % for example with |listtype+=X| the list entries will be put into the list % responsible for the types % |figureX| ($=$ |figure| $+$ |X|), |tableX| ($=$ |table| $+$ |X|) etc. % % Such a \meta{list type} can be defined using |\Declare|\-|Floating|\-|Environment| % offered by the \pkg{newfloat} package, but some document classes % or other packages offer macros for defining new floating environment types % (and their corresponding lists) as well. % % \pagebreak[3] % A sample document: % \begin{quote} % |\documentclass[a4paper]{article}|\\ % ||\\ % |% Use "ngerman" as 1st language, "english" as 2nd one|\\ % |\usepackage[english,ngerman]{babel}|\\ % ||\\ % |% Load the bicaption package with 2nd language set to|\\ % |% "english", and list type "figureEnglish" or "tableEnglish"|\\ % |\usepackage[lang=english,listtype+=English]{bicaption}|\\ % ||\\ % |\usepackage{newfloat}|\\ % |% Define type "figureEnglish" and \listoffigureEnglish|\\ % |\DeclareFloatingEnvironment[fileext=lof2]{figureEnglish}|\\ % | [Figure][List of Figures]|\\ % |% Define type "tableEnglish" and \listoftableEnglish|\\ % |\DeclareFloatingEnvironment[fileext=lot2]{tableEnglish}|\\ % | [Table][List of Tables]|\\ % ||\\ % |\begin{document}|\\ % ||\\ % |\listoffigures % typeset "Abbildungsverzeichnis"|\\ % |\listoffigureEnglish % typeset "List of Figures"|\\ % ||\\ % |\begin{figure}|\\ % | \centering|\\ % | A placeholder for an image or whatever|\\ % | \bicaption{Deutscher Text}{English text}|\\ % |\end{figure}|\\ % ||\\ % |\end{document}| % \end{quote} % % \pagebreak[3] % A different approach is using one list for both languages, but with different formatting. % Since the \pkg{caption} package does not offer options and commands for % customising the format of the lists, one need an additional package for this purpose, % for example the \pkg{titletoc} package: % % \begin{quote} % |\documentclass[a4paper]{article}|\\ % ||\\ % |% Use "ngerman" as 1st language, "english" as 2nd one|\\ % |\usepackage[english,ngerman]{babel}|\\ % ||\\ % |% Load the bicaption package with 2nd language set to|\\ % |% "english", and list type "figure2" or "table2"|\\ % |\usepackage[lang=english,listtype+=2]{bicaption}|\\ % ||\\ % |% We load the titletoc package for customising lists|\\ % |% Note: Loading titletoc should be done prior|\\ % |% defining additional floating environments with|\\ % |% \DeclareFloatingEnvironment|\\ % |\usepackage{titletoc}|\\ % ||\\ % |\usepackage{newfloat}|\\ % |% Define the new floating environment type "figure2"|\\ % |% Use the same file extension as for "figure" (.lof) here|\\ % |\DeclareFloatingEnvironment[fileext=lof]{figure2}|\\ % |% Define the new floating environment type "table2"|\\ % |% Use the same file extension as for "table" (.lot) here|\\ % |\DeclareFloatingEnvironment[fileext=lot]{table2}|\\ % ||\\ % |% We use the titletoc package for customising "figure2"|\\ % |% which is appropriate for the second language captions|\\ % \iffalse % |\contentsuse{figure2}{lof}|\\ % \fi % |\titlecontents{figure2}[3.8em]|\\ % | {} % no above code|\\ % | {} % empty numbered entry format|\\ % | {} % empty numberless entry format|\\ % | {} % empty filler page format|\\ % ||\\ % |\begin{document}|\\ % ||\\ % |\renewcommand\listfigurename|\\ % | {Abbildungsverzeichnis / List of Figures}|\\ % |\listoffigures|\\ % ||\\ % |\begin{figure}|\\ % | \centering|\\ % | A placeholder for an image or whatever|\\ % | \bicaption{Deutscher Text}{English text}|\\ % |\end{figure}|\\ % ||\\ % |\end{document}| % \end{quote} % % \section{Language Selection} % \label{sec:babel} % % For language selection \thispackage\ uses two macros internally: % % \medskip % % \DescribeMacro\captionmainlanguage % |\caption|\-|main|\-|lan|\-|guage| contains the main language, for example % `french' or `german'. % If not set manually, \thispackage\ will try to obtain this setting from % the \pkg{babel} or \pkg{polyglossia} package after the preamble of % the document, i.e.~at |\begin{doc|\-|u|\-|ment}|. % % So if you are using either \pkg{babel} or \pkg{polyglossia}, and want to inherit % the main language setting from it, then simply forget about the % |\caption|\-|main|\-|lan|\-|guage| stuff and skip the rest of the section. % % \pagebreak[3] % Otherwise one can define |\caption|\-|main|\-|lan|\-|guage| manually, e.g.: % \begin{quote} % |\newcommand\captionmainlanguage{french}|\\ % |\usepackage[lang=english]{bicaption}| % \end{quote} % % \pagebreak[3] % Note: Prior to \version{1.5} |\caption|\-|main|\-|language| needed to be defined % \emph{before} loading \thispackage. Since \version{1.5} is could be defined either % before or after loading \thispackage. % % \medskip % % \DescribeMacro\selectcaptionlanguage % \NEWfeature*{v1.1} % |\select|\-|caption|\-|lan|\-|guage| will be used internally to select the language: % \begin{quote} % |\selectcaptionlanguage|\marg{font-or-list-entry}\marg{language} % \end{quote} % For setting the language of the caption \meta{font-or-list-entry} will be |\@first|\-|of|\-|two|, % for setting the language of the list entry \meta{font-or-list-entry} will be % |\@second|\-|of|\-|two|.~\footnote{\cs{@firstoftwo} and \cs{@secondoftwo} are defined % in the \LaTeX\ kernel and simply pick either the 1st or 2nd argument.} % It defaults to |\select@lan|\-|guage| (caption) or |\select|\-|lan|\-|guage| (list entry) % offered by the \pkg{babel} and \pkg{polyglossia} package: % \begin{quote} % |\providecommand*\selectcaptionlanguage[2]{%|\\ % | #1{\select@language}{\selectlanguage}{#2}}| % \end{quote} % If you need to alter this, just either define |\select|\-|caption|\-|lan|\-|guage| prior % loading \thispackage, or redefine it afterwards. % % \pagebreak[3] % Example document using \pkg{babel}: % \begin{quote} % |\documentclass[a4paper]{article}|\\ % ||\\ % |% Use "ngerman" as 1st language, "english" as 2nd one|\\ % |\usepackage[english,ngerman]{babel}|\\ % ||\\ % |% Add custom translations to babel|\\ % |\addto\captionsgerman{%|\\ % |% \renewcommand\whatevername{Wasauchimmer}%|\\ % |% |\ldots\\ % |}|\\ % |\addto\captionsenglish{%|\\ % |% \renewcommand\whatevername{Whatever}%|\\ % |% |\ldots\\ % |}|\\ % ||\\ % |% Load the bicaption package with 2nd language set to|\\ % |% "english"|\\ % |\usepackage[lang=english]{bicaption}|\\ % ||\\ % |\begin{document}|\\ % ||\\ % |\begin{figure}|\\ % | \centering|\\ % | A placeholder for an image or whatever|\\ % | \bicaption{Deutscher Text}{English text}|\\ % |\end{figure}|\\ % ||\\ % |\end{document}| % \end{quote} % % \pagebreak[3] % The same example document but using a custom implementation of % |\caption|\-|main|\-|language| and |\select|\-|caption|\-|language| % instead of \pkg{babel}: % \begin{quote} % |\documentclass[a4paper]{article}|\\ % ||\\ % |% Load the bicaption package with 2nd language set to|\\ % |% "english"|\\ % |\usepackage[lang=english]{bicaption}|\\ % ||\\ % |% Set "german" as main bi-caption language|\\ % |\newcommand\captionmainlanguage{german}|\\ % ||\\ % |% Declare an own language switching mechanism|\\ % |% for bi-captions (instead of using babel)|\\ % |\renewcommand\selectcaptionlanguage[2]{%|\\ % | \csname captions#2\endcsname}|\\ % |\newcommand\captionsgerman{%|\\ % | \renewcommand\figurename{Abbildung}%|\\ % | \renewcommand\tablename{Tabelle}%|\\ % |% \renewcommand\whatevername{Wasauchimmer}%|\\ % |% |\ldots\\ % |}|\\ % |\newcommand\captionsenglish{%|\\ % | \renewcommand\figurename{Figure}%|\\ % | \renewcommand\tablename{Table}%|\\ % |% \renewcommand\whatevername{Whatever}%|\\ % |% |\ldots\\ % |}|\\ % ||\\ % |\begin{document}|\\ % ||\\ % |\begin{figure}|\\ % | \centering|\\ % | A placeholder for an image or whatever|\\ % | \bicaption{Deutscher Text}{English text}|\\ % |\end{figure}|\\ % ||\\ % |\end{document}| % \end{quote} % % \pagebreak[3] % \NEWfeature{v1.5} % Since \version{1.5} a warning is issued if the main language could neither be % detected automatically nor was it set explicitly by the user. % If you really don't want to set languages for bi-captions but are annoyed by % the warning you could trick the \pkg{bicaption} by defining a custom % dummy language-selection mechanism, e.g.: % \begin{quote} % |\newcommand\captionmainlanguage{dummy}|\\ % |\renewcommand\selectcaptionlanguage[2]{}|\\ % \end{quote} % % \medskip % % \pagebreak[3] % \DescribeMacro{\DeclareCaption-\\LangOption} % \NEWfeature*{v1.2} % For internal implementation reasons the selection of language will be done delayed, % i.e.~not done immediately at |lang=|\meta{language}. So if you do % \begin{quote} % |\bicaptionsetup{}{lang=ngerman,labelsep=quad}| % \end{quote} % the language |ngerman| will only be stored internally, and the label separator will % be set to |quad| afterwards. Some time later, right before the caption is actually % typeset, the language will be set to |ngerman|. % % \pagebreak[3] % Usually this is no problem, but think of options which will be overwritten by the % language selection, or options which act on the language currently set, for example % \begin{quote} % |\bicaptionsetup{}{lang=ngerman,name=Bild}|\quad. % \end{quote} % |lang=ngerman| changes the environment name to ``Abbildung'', and |name=Bild| % changes the environment name to ``Bild''. One would expect that the name is % finally ``Bild'', but because of the delayed nature of |lang=ngerman| it will % be ``Abbildung'' instead, at least if we don't take action about this. % % \pagebreak[3] % For that reason the command % \begin{quote} % |\DeclareCaptionLangOption|\marg{caption option name} % \end{quote} % is offered. Options handled this way will be applied twice if used after the |lang=| % option, when the option is actually used, and right after the language is selected. % % \begin{quote} % |\DeclareCaptionLangOption{name}| % \end{quote} % will be done by \thispackage\ automatically, since the environment name will usually % be overwritten by a language selection. So actually % \begin{quote} % |\bicaptionsetup{}{lang=ngerman,name=Bild}| % \end{quote} % will give the expected result, i.e. the environment name is typeset as ``Bild''. % % \section{Required packages} % \label{sec:caption} % % \NEWfeature{v1.4} % Starting with version $1.4$ the \pkg{bicaption} package requires at least version $3.2$ % of the \pkg{caption} package and loads it automatically. % (Older versions of the \pkg{bicaption} package have required exactly the version of the % \pkg{caption} package which was released with it.) % % \pagebreak[3] % If you need to use a specific version of the \pkg{caption} package you need to load it % \emph{before} the \pkg{bicaption} package, e.g.: % \begin{quote} % |\usepackage[| \ldots |]{caption}[=v3.5]|\\ % |\usepackage[| \ldots |]{bicaption}| % \end{quote} % % \pagebreak[3] % Note that there are limitations if an older version of the \pkg{caption} package % is used: % \begin{itemize} % \item Full support of list entries of the \env{lstlisting} environment % (offered by the \pkg{listings} package) needs at least \pkg{caption} \version{3.6}. % \end{itemize} % % \section{Supported packages} % \label{sec:packages} % % The \pkg{bicaption} package was adapted to the following packages which deals with captions, too: % \pkg{listings}~\cite{listings}, \pkg{longtable}~\cite{longtable}, and \pkg{subcaption}~\cite{subcaption}. % % \subsection{Support of the listings package} % \label{sec:listings} % % \NEWfeature{v1.5} % If the \pkg{listings} package~\cite{listings} is loaded, the \pkg{listings} options \opt{caption1} % and \opt{caption2} are available additionally, where option \opt{caption1} specifies the % caption of the first language and \opt{caption2} of the second one. % % \pagebreak[3] % Example document, using distinctive lists for each language: % \begin{quote} % |\documentclass[a4paper]{article}|\\ % |\usepackage{graphicx}|\\ % ||\\ % |% Use "ngerman" as 1st language, "english" as 2nd one|\\ % |\usepackage[english,ngerman]{babel}|\\ % ||\\ % |% Load the bicaption package with 2nd language set to|\\ % |% "english", and list type "figureEnglish" or "tableEnglish"|\\ % |\usepackage[lang=english,listtype+=English,font=it]{bicaption}|\\ % |\captionsetup{slc=off} % do not center short captions|\\ % ||\\ % |\usepackage{listings}|\\ % ||\\ % |% Set German names|\\ % |\addto\captionsgerman{%|\\ % | \renewcommand\lstlistingname{Quelltext}%|\\ % | \renewcommand\lstlistlistingname{Quelltextverzeichnis}%|\\ % |}|\\ % |\AtBeginDocument{\captionsgerman}% or load listings before babel|\\ % ||\\ % |% Set English names|\\ % |\addto\captionsenglish{%|\\ % | \renewcommand\lstlistingname{Listing}%|\\ % | \renewcommand\lstlistlistingname{List of Listings}%|\\ % |}|\\ % ||\\ % |\usepackage{newfloat}|\\ % |% Define the new floating environment type "lstlistingEnglish"|\\ % |% (just to get an extra list for English listing captions)|\\ % |\DeclareFloatingEnvironment[fileext=lol2]{lstlistingEnglish}|\\ % | [Listing][List of Listings]|\\ % ||\\ % |\begin{document}|\\ % ||\\ % |\lstlistoflistings % German|\\ % |\listoflstlistingEnglish % English|\\ % ||\\ % |\clearpage|\\ % ||\\ % |\begin{lstlisting}|\\ % | [language=C,|\\ % | caption1=Deutscher Titel,|\\ % | caption2=English Title]|\\ % | int main()|\\ % | {|\\ % | printf( "Hello world!\n" );|\\ % | return 0;|\\ % | }|\\ % |\end{lstlisting}|\\ % ||\\ % |\end{document}| % \end{quote} % % \subsection{Support of the longtable package} % \label{sec:longtable} % % If the \pkg{longtable} package~\cite{longtable} is loaded, |\bicaption| is available % in the \env{longtable} environment as well, e.g.: % \begin{quote} % |\documentclass[a4paper]{article}|\\ % ||\\ % |% Use "ngerman" as 1st language, "english" as 2nd one|\\ % |\usepackage[english,ngerman]{babel}|\\ % ||\\ % |% Load the bicaption package with 2nd language set to|\\ % |% "english"|\\ % |\usepackage[lang=english]{bicaption}|\\ % ||\\ % |\usepackage{longtable}|\\ % ||\\ % |\begin{document}|\\ % ||\\ % |\begin{longtable}{ll}|\\ % | \bicaption{Deutscher Titel}{English Title}\\|\\ % | A & B \\|\\ % | C & D \\|\\ % | |\ldots\\ % |\end{longtable}|\\ % ||\\ % |\end{document}| % \end{quote} % % \subsection{Support of the subcaption package} % \label{sec:subcaption} % % If the \pkg{subcaption} package~\cite{subcaption} is loaded, these commands are available % additionally: % % \smallskip % % \pagebreak[3] % \DescribeMacro\bisubcaption % Bilingual sub-captions will be typeset by % \begin{quote} % |\bisubcaption|\oarg{list entry \#1}\marg{heading \#1}\\ % | |\oarg{list entry \#2}\marg{heading \#2}\\ % |\bisubcaption*|\marg{heading \#1}\marg{heading \#2} % \end{quote} % The |\label| should be placed either after this command, or inside the first heading. % % \pagebreak[3] % \DescribeMacro\bisubcaptionbox % Bilingual sub-caption boxes will be typeset by % \begin{quote} % |\bisubcaptionbox|\oarg{list entry \#1}\marg{heading \#1}\\ % | |\oarg{list entry \#2}\marg{heading \#2}\\ % | |\oarg{width}\oarg{inner-pos}\marg{contents}\\ % |\bisubcaptionbox*|\marg{heading \#1}\marg{heading \#2}\\ % | |\oarg{width}\oarg{inner-pos}\marg{contents} % \end{quote} % The |\label| should be placed inside the first heading. % % \begingroup\small % (For a description of the optional parameters \meta{width} and \meta{inner-pos} % please take a look at the \pkg{subcaption} package documentation, % \cs{subcaptionbox}.) % \endgroup % % \pagebreak[3] % \subsubsection{A sample document} % % \begin{quote} % |\documentclass[english,ngerman]{article}|\\ % |\usepackage{selinput}|\\ % |\SelectInputMappings{adieresis={ä},germandbls={ß}}|\\ % ||\\ % |\usepackage{babel}|\\ % |\usepackage[lang=english,font=it]{bicaption}|\\ % \iffalse % |\usepackage[format=hang,list=on]{subcaption}|\\ % \else % |\usepackage[format=hang]{subcaption}|\\ % \fi % ||\\ % |\begin{document}|\\ % ||\\ % \iffalse % |\listoffigures|\\ % ||\\ % \fi % |\begin{figure}[!htb]|\\ % | \centering|\\ % | \bisubcaptionbox|\\ % | {Teilabbildung A\label{fig:test:A}}|\\ % | {Subfigure A}[0.4\textwidth]{IMAGE}%|\\ % | \qquad|\\ % | \bisubcaptionbox|\\ % | {Teilabbildung langer Titel B\label{fig:test:B}}|\\ % | {Subfigure long title B}[0.4\textwidth]{IMAGE}%|\\ % | \bicaption{Deutscher Titel}{English Title}|\\ % | \label{fig:test}|\\ % |\end{figure}|\\ % ||\\ % \iffalse % |\captionsetup{bi-lang=2nd}|\\ % ||\\ % |\begin{figure}[!htb]|\\ % | \centering|\\ % | \bisubcaptionbox|\\ % | {Teilabbildung A\label{fig:test2:A}}|\\ % | {Subfigure A}[0.4\textwidth]{IMAGE}%|\\ % | \qquad|\\ % | \bisubcaptionbox|\\ % | {Teilabbildung langer Titel B\label{fig:test2:B}}|\\ % | {Subfigure long title B}[0.4\textwidth]{IMAGE}%|\\ % | \bicaption{Deutscher Titel}{English Title}|\\ % | \label{fig:test2}|\\ % |\end{figure}|\\ % ||\\ % \fi % |\captionsetup{bi-lang=both}|\\ % ||\\ % |\begin{figure}[!htb]|\\ % | \centering|\\ % | \bisubcaptionbox[A]|\\ % | {Und eine gaaaanz lange Caption: Teilabbildung A}|\\ % | {Subfigure A}[0.4\textwidth]{IMAGE}%|\\ % | \qquad|\\ % | \bisubcaptionbox[B]|\\ % | {Teilabbildung B}|\\ % | {Subfigure B}[0.4\textwidth]{IMAGE}%|\\ % | \bicaption[Abbildungsverzeichnistitel]|\\ % | {Und eine noch viel viel viel|\\ % | längere deutsche Beschriftung: Deutscher Titel}|\\ % | {Short English heading}|\\ % |\end{figure}|\\ % ||\\ % |\captionsetup{bi-slc=off}|\\ % ||\\ % |\begin{figure}[!htb]|\\ % | \centering|\\ % | \bisubcaptionbox[A]|\\ % | {Und eine gaaaanz lange Caption: Teilabbildung A}|\\ % | {Subfigure A}[0.4\textwidth]{IMAGE}%|\\ % | \qquad|\\ % | \bisubcaptionbox[B]|\\ % | {Teilabbildung B}|\\ % | {Subfigure B}[0.4\textwidth]{IMAGE}%|\\ % | \bicaption[Abbildungsverzeichnistitel]|\\ % | {Und eine noch viel viel viel|\\ % | längere deutsche Beschriftung: Deutscher Titel}|\\ % | {Short English heading}|\\ % |\end{figure}|\\ % ||\\ % |\captionsetup{slc=off}|\\ % ||\\ % |\begin{figure}[!htb]|\\ % | \centering|\\ % | \bisubcaptionbox[A]|\\ % | {Und eine gaaaanz lange Caption: Teilabbildung A}|\\ % | {Subfigure A}[0.4\textwidth]{IMAGE}%|\\ % | \qquad|\\ % | \bisubcaptionbox[B]|\\ % | {Teilabbildung B}|\\ % | {Subfigure B}[0.4\textwidth]{IMAGE}%|\\ % | \bicaption[Abbildungsverzeichnistitel]|\\ % | {Und eine noch viel viel viel|\\ % | längere deutsche Beschriftung: Deutscher Titel}|\\ % | {Short English heading}|\\ % |\end{figure}|\\ % ||\\ % |\end{document}| % \end{quote} % % \pagebreak[3] % \bicaptionsetup{lang=german}{lang=english,font=it} % \captionsetup[sub]{format=hang,list=on} % % \iffalse % \listoffigures % \bigskip % \fi % % \begin{minipage}{\linewidth} % \setcaptiontype{figure} % \centering % \bisubcaptionbox % {Teilabbildung A\label{fig:test:A}} % {Subfigure A}[0.4\textwidth]{IMAGE}% % \qquad % \bisubcaptionbox % {Teilabbildung langer Titel B\label{fig:test:B}} % {Subfigure long title B}[0.4\textwidth]{IMAGE}% % \bicaption{Deutscher Titel}{English Title} % \label{fig:test} % \end{minipage} % % \iffalse % \bigskip % \captionsetup{bi-lang=2nd} % % \begin{minipage}{\linewidth} % \setcaptiontype{figure} % \centering % \bisubcaptionbox % {Teilabbildung A\label{fig:test2:A}} % {Subfigure A}[0.4\textwidth]{IMAGE}% % \qquad % \bisubcaptionbox % {Teilabbildung langer Titel B\label{fig:test2:B}} % {Subfigure long title B}[0.4\textwidth]{IMAGE}% % \bicaption{Deutscher Titel}{English Title} % \label{fig:test2} % \end{minipage} % \fi % % \bigskip % \captionsetup{bi-lang=both} % % \begin{minipage}{\linewidth} % \setcaptiontype{figure} % \centering % \bisubcaptionbox[A] % {Und eine gaaaanz lange Caption: Teilabbildung A} % {Subfigure A}[0.4\textwidth]{IMAGE}% % \qquad % \bisubcaptionbox[B] % {Teilabbildung B} % {Subfigure B}[0.4\textwidth]{IMAGE}% % \bicaption[Abbildungsverzeichnistitel] % {Und eine noch viel viel viel % längere deutsche Beschriftung: Deutscher Titel} % {Short English heading} % \end{minipage} % % \bigskip % \captionsetup{bi-slc=off} % % \begin{minipage}{\linewidth} % \setcaptiontype{figure} % \centering % \bisubcaptionbox[A] % {Und eine gaaaanz lange Caption: Teilabbildung A} % {Subfigure A}[0.4\textwidth]{IMAGE}% % \qquad % \bisubcaptionbox[B] % {Teilabbildung B} % {Subfigure B}[0.4\textwidth]{IMAGE}% % \bicaption[Abbildungsverzeichnistitel] % {Und eine noch viel viel viel % längere deutsche Beschriftung: Deutscher Titel} % {Short English heading} % \end{minipage} % % \bigskip % \captionsetup{slc=off} % % \begin{minipage}{\linewidth} % \setcaptiontype{figure} % \centering % \bisubcaptionbox[A] % {Und eine gaaaanz lange Caption: Teilabbildung A} % {Subfigure A}[0.4\textwidth]{IMAGE}% % \qquad % \bisubcaptionbox[B] % {Teilabbildung B} % {Subfigure B}[0.4\textwidth]{IMAGE}% % \bicaption[Abbildungsverzeichnistitel] % {Und eine noch viel viel viel % längere deutsche Beschriftung: Deutscher Titel} % {Short English heading} % \end{minipage} % % \iffalse % --------------------------------------------------------------------------- % % \fi % % \StopEventually{%^^A % \begin{thebibliography}{9} % % \bibitem{caption} % Axel Sommerfeldt:\\ % \href{http://www.ctan.org/pkg/caption}% % {\emph{Customising captions of floating environments}},\\ % 2022/01/07 % % \bibitem{listings} % Carsten Heinz \& Brooks Moses:\\ % \href{http://www.ctan.org/pkg/listings}% % {\emph{The Listings Package}},\\ % 2007/02/22 % % \bibitem{longtable} % David Carlisle:\\ % \href{http://www.ctan.org/pkg/longtable}% % {\emph{The longtable package}},\\ % 2004/02/01 % % \bibitem{subcaption} % Axel Sommerfeldt:\\ % \href{http://www.ctan.org/pkg/subcaption}% % {\emph{The subcaption package}},\\ % 2022/01/07 % % \bibitem{TLC2} % Frank Mittelbach and Michel Goossens:\\ % \newblock {\em The {\LaTeX} Companion (2nd.~Ed.)},\\ % \newblock Addison-Wesley, 2004. % % \end{thebibliography} % } % % \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,\@namedef,\@nameuse} % \DoNotIndex{\@onlypreamble,\@parboxrestore,\@plus,\@ptionlist} % \DoNotIndex{\@removeelement,\@restorepar,\@secondoftwo,\@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} % \changes{v0.1}{2010/07/13}{Initial version} % \changes{v0.2}{2010/07/13}{Check for caption package added} % \changes{v0.3}{2010/07/13}{Usage of \cs{caption@applyfont} added} % \changes{v0.4}{2010/07/13}{``Singlelinecheck'' fixed} % \changes{v0.5}{2010/07/13}{Options \opt{bi-first} and \opt{bi-second} added} % \changes{v0.6}{2010/07/13}{Option \opt{bi-slc} added} % \changes{v0.7}{2010/07/13}{Option \opt{bi-lang} added} % \changes{v0.8}{2010/09/04}{Adapted to current version of the caption kernel} % \changes{v0.9}{2010/09/17}{Option \opt{bi-swap} added} % \changes{v0.9a}{2011/07/13}{Warning regarding \pkg{babel} package added} % % \newcommand*\Note[2][Note]{\par{\small\emph{#1:} #2}} % % \iffalse % --------------------------------------------------------------------------- % % \fi % % \clearpage % \section{The implementation} % % \iffalse %<*package> % \fi % % \subsection{Identification} % % We need at least \LaTeX2e\ version 1994/12/01. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e}[1994/12/01] % \end{macrocode} % % Bypass the release declarations in case the \LaTeX\ kernel doesn’t know how to deal with them % (as suggested by \url{https://www.latex-project.org/publications/2018-FMi-TUB-tb122mitt-version-rollback.pdf}). % \begin{macrocode} \providecommand\DeclareRelease[3]{} \providecommand\DeclareCurrentRelease[2]{} % \end{macrocode} % % Declare all supported releases. % \begin{macrocode} \DeclareCurrentRelease{v1}{2011/07/13} % \end{macrocode} % % Identify the current version of the package. % \begin{macrocode} \ProvidesPackage{bicaption}[2023/02/19 v1.6 Bilingual Captions (AR)] % \end{macrocode} % % Since we base on the \pkg{caption} package we load it here. % \begin{macrocode} \RequirePackage{caption}[2011/11/10] % we need at least v3.2e % \end{macrocode} % % \bigskip % % \pagebreak[3] % \subsection{Initial code} % % \begin{macro}{\bicaption@Info} % |\bicaption@Info|\marg{message} % \begin{macrocode} \newcommand*\bicaption@Info[1]{% \PackageInfo{bicaption}{#1}} % \end{macrocode} % \end{macro} % \begin{macro}{\bicaption@InfoNoLine} % |\bicaption@InfoNoLine|\marg{message}\par % \Note{The \cs{@gobble} at the end of the 2nd argument of % \cs{PackageInfo} suppresses the line number info. % See TLC2\cite{TLC2}, A.4.7, p885 for details.} % \begin{macrocode} \newcommand*\bicaption@InfoNoLine[1]{% \PackageInfo{bicaption}{#1\@gobble}} % \end{macrocode} % \end{macro} % % \begin{macro}{\bicaption@Warning} % |\bicaption@Warning|\marg{message} % \begin{macrocode} \newcommand*\bicaption@Warning[1]{% \bicaption@WarningNoLine{#1\on@line}} % \end{macrocode} % \end{macro} % \begin{macro}{\bicaption@WarningNoLine} % |\bicaption@WarningNoLine|\marg{message} % \begin{macrocode} \newcommand*\bicaption@WarningNoLine[1]{% \PackageWarning{bicaption}{#1.^^J\bicaption@wh\@gobbletwo}} % \end{macrocode} % \begin{macrocode} \newcommand*\bicaption@wh{% See the `bicaption' package documentation for explanation.} % \end{macrocode} % \end{macro} % % \begin{macro}{\bicaption@Error} % |\bicaption@Error|\marg{message} % \begin{macrocode} \newcommand*\bicaption@Error[1]{% \PackageError{bicaption}{#1}{\caption@@eh{bicaption}}} % \end{macrocode} % \begin{macrocode} \providecommand*\caption@@eh[1]{% If you do not understand this error, please take a closer look\MessageBreak at the documentation of the `#1' package, especially the\MessageBreak section about errors.\MessageBreak\@ehc} % \end{macrocode} % \end{macro} % % \pagebreak[3] % \subsection{Declaration of options} % % The option |bi-lang| will setup which language(s) will actually be typeset, % the first one, the second one, or both of them. % \begin{macrocode} \newcount\bicaption@lang \DeclareCaptionOption{bi-lang}{% \caption@ifinlist{#1}{0,all,both}{% \bicaption@lang=0\relax }{\caption@ifinlist{#1}{1,1st,first}{% \bicaption@lang=1\relax }{\caption@ifinlist{#1}{2,2nd,second}{% \bicaption@lang=2\relax }{% \bicaption@Error{Undefined bi-lang value `#1'}% }}}} % \end{macrocode} % % The option |bi-singlelinecheck| will setup if a single check will be used % for both languages (|=on|), % or if both languages will be checked individually (|=off|). % \begin{macrocode} \DeclareCaptionOption{bi-singlelinecheck}[1]{% \caption@set@bool\bicaption@ifslc{#1}} \DeclareCaptionOption{bi-slc}[1]{% \caption@set@bool\bicaption@ifslc{#1}} % \end{macrocode} % % The option |bi-swap| will swap the primary and secondary language, % making the first language the second one and vice versa. % \begin{macrocode} \DeclareCaptionOption{bi-swap}[1]{% \caption@set@bool\bicaption@ifswap{#1}} % \end{macrocode} % % The option |bi-separator| will setup the separator between % the two bi-lingual captions. % \begin{macrocode} \DeclareCaptionOption{bi-separator}[1]{% \caption@set{biseparator}{#1}} % \end{macrocode} % \begin{macrocode} \providecommand*\caption@set[2]{% \@ifundefined{caption@#1@#2}% {\caption@Error{Undefined #1 `#2'}}% {\expandafter\let\csname caption@#1\expandafter\endcsname\csname caption@#1@#2\endcsname}} % \end{macrocode} % % \begin{macro}{\DeclareBiCaptionSeparator} % \changes{v1.3}{2020/10/25}{This macro added} % |\DeclareBiCaptionSeparator|\marg{name}\marg{code} % \begin{macrocode} \newcommand\DeclareBiCaptionSeparator[2]{% \caption@decl{biseparator}{#1}{#2}} \@onlypreamble\DeclareBiCaptionSeparator % \end{macrocode} % \begin{macrocode} \providecommand*\caption@decl[2]{% \global\long\expandafter\def\csname caption@#1@#2\endcsname} % \end{macrocode} % \end{macro} % % There are four pre-defined separators, called `none', % `smallskip', `medskip', and `bigskip'. % \begin{macrocode} \DeclareBiCaptionSeparator{none}{} \DeclareBiCaptionSeparator{smallskip}{\smallskip} \DeclareBiCaptionSeparator{medskip}{\medskip} \DeclareBiCaptionSeparator{bigskip}{\bigskip} % \end{macrocode} % % The default separator usually maps to `none'. % \begin{macrocode} \caption@ifundefined\SetCaptionDefault {\def\caption@biseparator@default{\caption@biseparator@none}} {\SetCaptionDefault{biseparator}{none}} % \end{macrocode} % % The option |lang=|\meta{language} will setup the language of the caption. % We can't set the language immediately because otherwise we will get in trouble, e.g. when % using the \pkg{microtype} package via |\usepackage[babel]{microtype}|. % So we store the selected language to |\bicaption@language| instead and will set it later on. % But this has a drawback, option settings which will be overwritten by the selection of % the language do not work correctly anymore. Therefore we will save specific options % and set them (again) after setting the language. % \begin{macrocode} \DeclareCaptionOption{lang}{% \caption@ifundefined\bicaption@language \bicaption@language@setupkeys \relax \edef\bicaption@language{#1}% \let\bicaption@language@setoptions\@empty \global\let\bicaption@language@value\bicaption@language} % \end{macrocode} % Map |language=| to |lang=|. % \begin{macrocode} \let\KV@caption@language\KV@caption@lang % \end{macrocode} % % \begin{macro}{\DeclareCaptionLangOption} % \changes{v1.2}{2016/03/27}{This macro added} % |\DeclareCaptionLangOption|\marg{option key}\par % Saves the gives \meta{option key} to the list |\bicaption@language@keylist|. % These options will be stored and set (again) after setting the language. % \begin{macrocode} \newcommand*\bicaption@language@keylist{} % \end{macrocode} % \begin{macrocode} \newcommand*\DeclareCaptionLangOption[1]{% \@ifundefined{KV@caption@#1}% {\bicaption@Error{Undefined caption option `#1'}}% {\@cons\bicaption@language@keylist{{#1}}}} % \end{macrocode} % \begin{macrocode} \let\DeclareCaptionLanguageOption\DeclareCaptionLangOption % \end{macrocode} % \begin{macrocode} \newcommand*\bicaption@language@setupkeys{% \def\@elt##1{% \expandafter\let\csname KV@bicaption@##1\expandafter\endcsname \csname KV@caption@##1\endcsname \@namedef{KV@caption@##1}{\bicaption@KV{##1}}}% \bicaption@language@keylist \let\@elt\relax} % \end{macrocode} % \begin{macrocode} \newcommand\bicaption@KV[2]{% \@bicaption@KV{#1}{#2}% \l@addto@macro\bicaption@language@setoptions{% \@bicaption@KV{#1}{#2}}} % \end{macrocode} % \begin{macrocode} \newcommand\@bicaption@KV[1]{% \@nameuse{KV@bicaption@#1}} % \end{macrocode} % \end{macro} % % The only option affected I'm aware off is the |name=| option, so this will be saved % and set later on. % \begin{macrocode} \DeclareCaptionLangOption{name} % \end{macrocode} % % \begin{macro}{\bicaption@selectlanguage} % \changes{v1.0}{2011/08/31}{Starred variant added} % \changes{v1.1}{2012/04/09}{Support of \cs{selectcaptionlanguage} added} % \changes{v1.1}{2016/03/25}{Patching of \cs{caption@applyfont} replaced by \cs{caption@beginhook}} % \changes{v1.1}{2016/03/27}{Usage of \cs{bicaption@language@setoptions} added} % |\bicaption@selectlanguage|\marg{font-or-list-entry}\par % Set the language (stored in |\bi|\-|caption@lan|\-|guage|) % via |\select|\-|bi|\-|caption|\-|lan|\-|guage|. % \begin{macrocode} \newcommand*\bicaption@selectlanguage[1]{% \caption@ifundefined\bicaption@language{}{% \expandafter\selectcaptionlanguage\expandafter#1\expandafter {\bicaption@language}% \bicaption@language@setoptions}} % \end{macrocode} % |\caption@beginhook| (of the \pkg{caption} package kernel) will be extended here % so the language setting will actually take effect. % \begin{macrocode} \g@addto@macro\caption@beginhook{% \bicaption@selectlanguage\@firstoftwo} % \end{macrocode} % \end{macro} % % \begin{macro}{\selectcaptionlanguage} % |\selectcaptionlanguage|\marg{font-or-list-entry}\marg{language} % will finally be used to set up the language. % \begin{macrocode} \providecommand*\selectcaptionlanguage[1]{% #1\select@language\selectlanguage} % \end{macrocode} % \end{macro} % % \pagebreak[3] % \subsection{Execution of options} % % Setup default values for |bi-lang|, |bi-single|\-|line|\-|check|, % |bi-swap|, and |bi-separator|. % \begin{macrocode} \caption@ExecuteOptions{caption}{bi-lang=0,bi-slc=1,bi-swap=0,bi-separator=default} % \end{macrocode} % % Set the language for the first caption. % (Since \version{1.5a} we do this |\At|\-|Begin|\-|Document| so % |\caption|\-|main|\-|language| could be defined \emph{after} loading the % \pkg{bicaption} package or \pkg{babel} or \pkg{polyglossia} % could be loaded \emph{after} the \pkg{bicaption} package.) % \begin{macrocode} \AtBeginDocument{% \ifcsname captionmainlanguage\endcsname \bicaption@InfoNoLine{% Main language is set to \captionmainlanguage}% \else \bicaption@setmainlanguage \fi % \end{macrocode} % \begin{macrocode} \ifcsname captionmainlanguage\endcsname \captionsetup*[bi-first]{lang=\captionmainlanguage}% \else \ifcsname bicaption@language@value\endcsname % option "lang=" was used \expandafter\bicaption@Warning \else \expandafter\bicaption@Info \fi {Main language is not set}% \fi} % \end{macrocode} % % \begin{macro}{\bicaption@setmainlanguage} % \changes{v1.5a}{2011/08/31}{This macro added as encapsulation of setting \cs{captionmainlanguage}} % |\bicaption@setmainlanguage| is used to define % |\caption|\-|main|\-|language| if not already done. % \begin{macrocode} \newcommand*\bicaption@setmainlanguage{% \ifcsname bbl@main@language\endcsname \bicaption@InfoNoLine{% babel found, main language is \bbl@main@language}% \let\captionmainlanguage\bbl@main@language \else\ifcsname xpg@main@language\endcsname \bicaption@InfoNoLine{% polyglossia found, main language is \xpg@main@language}% \let\captionmainlanguage\xpg@main@language \fi\fi} \@onlypreamble\bicaption@setmainlanguage % \end{macrocode} % \end{macro} % % We use |\caption@Process|\-|Options| here to add the options to the `|bi-second|' option % list instead of executing them immediately. % \begin{macrocode} \caption@SetupOptions{bicaption}{\captionsetup*[bi-second]{#2}}% \caption@ProcessOptions*{bicaption} % \end{macrocode} % % \pagebreak[3] % \subsection{Main code} % % \begin{macro}{\caption@addcontentsline} % \changes{v1.0}{2011/08/31}{Redefinition of \cs{caption@kernel@addcontentsline} added} % \changes{v1.0b}{2012/01/15}{\cs{caption@kernel@addcontentsline} changed to \cs{caption@addcontentsline}} % \changes{v1.1}{2016/02/01}{Adaption to \pkg{longtable} package added} % We patch |\caption@add|\-|contents|\-|line| (of the \pkg{caption} package kernel) % so |bi|\-|caption@add|\-|contents|\-|line| will be used for bilingual captions instead. % \begin{macrocode} \let\bicaption@addcontentsline@ORI\caption@addcontentsline \renewcommand*\caption@addcontentsline[2]{% % \end{macrocode} % \begin{macrocode} \bicaption@LT@setup \global\let\bicaption@LT@setup\relax % \end{macrocode} % \begin{macrocode} \caption@ifundefined\bicaption@lentry {\bicaption@addcontentsline@ORI{#1}{#2}}% {\expandafter\bicaption@addcontentsline\expandafter {\bicaption@lentry}{#1}{#2}% \global\let\bicaption@lentry\@undefined}} % \end{macrocode} % \end{macro} % % \begin{macro}{\bicaption@addcontentsline} % \changes{v1.0}{2011/08/31}{This macro added} % \changes{v1.1}{2013/03/10}{Bugfix: Delayed usage of \cs{caption@addsubcontentslines} added} % |\bicaption@addcontentsline|\marg{list entry \#2}\marg{type}\marg{list entry \#1}\par % Typeset both captions using the original version of |\caption@add|\-|contents|\-|line|. % \begin{macrocode} \newcommand\bicaption@addcontentsline[3]{% \begingroup \let\caption@addsubcontentslines\@gobble % \end{macrocode} % Execute the options setup with |\captionsetup[bi]{|\ldots|}|. % \begin{macrocode} \caption@setoptions{bi}% % \end{macrocode} % Do the first list entry, if requested. % \begin{macrocode} \ifnum\bicaption@lang=2\relax \else \begingroup \caption@setoptions{bi-first}% \bicaption@@addcontentsline{#2}{#3}% \endgroup \fi % \end{macrocode} % Do the second list entry, if requested. % \begin{macrocode} \ifnum\bicaption@lang=1\relax \else \begingroup \caption@setoptions{bi-second}% \bicaption@@addcontentsline{#2}{#1}% \endgroup \fi % \end{macrocode} % \begin{macrocode} \endgroup \caption@addsubcontentslines{#2}} % \end{macrocode} % \begin{macrocode} \newcommand*\bicaption@@addcontentsline[2]{% \caption@ifcontentsline{#2}{% \bicaption@selectlanguage\@secondoftwo \bicaption@addcontentsline@ORI{#1}{#2}}} % \end{macrocode} % \end{macro} % % \begin{macro}{\caption@@make} % \changes{v1.4}{2020/12/25}{Fallback code of \cs{caption@@make@} added} % We redefine |\caption@@make| (of the \pkg{caption} package kernel) % so |\bi|\-|caption@@make| will be used for bilingual captions instead. % \begin{macrocode} \caption@ifundefined\caption@@make@ {\let\caption@@make@\caption@@make} {} % \end{macrocode} % \begin{macrocode} \renewcommand\caption@@make[2]{% \caption@ifundefined\bicaption@text {\begingroup \caption@@make@{#1}{#2}% \endgroup}% {\expandafter\bicaption@@make\expandafter {\bicaption@text}{#1}{#2}% \global\let\bicaption@text\@undefined}% % \end{macrocode} % \begin{macrocode} \@nameuse{caption@@make@epilogue}} % \end{macrocode} % \end{macro} % % \begin{macro}{\bicaption@@make} % \changes{v1.1}{2015/09/16}{\cs{bicaption@label} replaced by \cs{caption@thelabel}} % \changes{v1.3}{2020/10/25}{Usage of \cs{caption@biseparator} added} % \changes{v1.4}{2020/12/25}{Definitions of \cs{bicaption@slc} and \cs{caption@setsinglelinecheck} added (fallback)} % \changes{v1.4a}{2020/12/26}{Clearance of \cs{caption@thelabel} replaced by \cs{bicaption@clrlabel}} % |\bicaption@@make|\marg{text \#2}\marg{label}\marg{text \#1}\par % Typeset both captions using the original version of \cs{caption@@make}. % \begin{macrocode} \newcommand\bicaption@@make[3]{% % \end{macrocode} % Execute the options setup with |\captionsetup[bi]{|\ldots|}|. % \begin{macrocode} \caption@setoptions{bi}% % \end{macrocode} % Perform the common single-line-check for both captions, if requested. % \begin{macrocode} \ifnum\bicaption@lang=0\relax \bicaption@ifslc {\bicaption@slc{#2}{#3}{}{\caption@setsinglelinecheck0}% \bicaption@slc{#2}{#1}{}{\caption@setsinglelinecheck0}}% {}% \fi % \end{macrocode} % Typeset the first caption, if requested. % (Otherwise we only apply the label of it.) % \begin{macrocode} \ifnum\bicaption@lang=2\relax \caption@thelabel \let\bicaption@tempa\relax \else \begingroup \caption@setoptions{bi-first}% \caption@@make@{#2}{#3}% \endgroup \def\bicaption@tempa{\bicaption@separator\caption@biseparator}% \fi % \end{macrocode} % Typeset the second caption, if requested. % \begin{macrocode} \ifnum\bicaption@lang=1\relax \else \bicaption@tempa \begingroup \caption@setoptions{bi-second}% \caption@@make@{#2}{#1}% \endgroup \fi % \end{macrocode} % \begin{macrocode} \global\bicaption@clrlabel} % \end{macrocode} % \begin{macrocode} \newcommand*\bicaption@separator{\par} % \end{macrocode} % \begin{macrocode} \caption@ifundefined\caption@@slc {\newcommand\bicaption@slc{\caption@slc}} {\newcommand\bicaption@slc[2]{\caption@@slc{#1}{#2}{\captionwidth}}} % \end{macrocode} % \begin{macrocode} \providecommand*\caption@setsinglelinecheck{% \caption@set@bool\caption@ifslc} % \end{macrocode} % \end{macro} % % \pagebreak[3] % \subsubsection{The \cs{bicaption} commands} % % \begin{macro}{\bicaptionsetup} % \changes{v1.6}{2022/04/18}{This macro added} % |\bicaptionsetup*|\oarg{type}\marg{keyval-list of options 1}\marg{keyval-list of options 2}\\ % applies the given list of options. % \begin{macrocode} \newcommand*\bicaptionsetup{% \caption@teststar\@bicaptionsetup*{}} % \end{macrocode} % \begin{macrocode} \newcommand*\@bicaptionsetup[1]{% \kernel@ifnextchar[%] {\bicaption@setup@options{#1}}% {\bicaption@setup*}} % \end{macrocode} % \begin{macrocode} \def\bicaption@setup@options#1[#2]{% \bicaption@setup{#1[{#2}]}} % \end{macrocode} % \begin{macrocode} \newcommand*\bicaption@setup[2]{% \captionsetup#1[bi-first]{#2}% \captionsetup#1[bi-second]} % \end{macrocode} % \end{macro} % % \begin{macro}{\bicaption} % |\bicaption*|\oarg{list entry \#1}\marg{text \#1}\oarg{list entry \#2}\marg{text \#2} % \begin{macrocode} \newcommand\bicaption{\@bicaption\caption} % \end{macrocode} % \end{macro} % % \begin{macro}{\bicaptionbox} % \changes{v1.0}{2011/08/31}{This macro added} % |\bicaptionbox*|\oarg{entry \#1}\marg{text \#1}\oarg{entry \#2}\marg{text \#2}% % \oarg{\ldots}\marg{\ldots} % \begin{macrocode} \newcommand\bicaptionbox{\@bicaption\captionbox} % \end{macrocode} % \end{macro} % % \begin{macro}{\bisubcaption} % |\bisubcaption*|\oarg{list entry \#1}\marg{text \#1}\oarg{list entry \#2}\marg{text \#2} % \begin{macrocode} \newcommand\bisubcaption{\@bicaption\subcaption} \let\subbicaption\bisubcaption % \end{macrocode} % \end{macro} % % \begin{macro}{\bisubcaptionbox} % |\bisubcaptionbox*|\oarg{entry \#1}\marg{text \#1}\oarg{entry \#2}\marg{text \#2}% % \oarg{\ldots}\marg{\ldots} % \begin{macrocode} \newcommand\bisubcaptionbox{\@bicaption\subcaptionbox} \let\subbicaptionbox\bisubcaptionbox % \end{macrocode} % \end{macro} % % \begin{macro}{\@bicaption} % \changes{v1.0}{2011/08/31}{Optional parameter \meta{list entry \#2} added} % \changes{v1.1}{2015/09/16}{\cs{bicaption@getlabel} replaced by \cs{caption@getlabel}} % \changes{v1.4}{2020/12/25}{Usage of \cs{caption@getlabel} replaced by \cs{bicaption@getlabel}} % |\@bicaption|\marg{cmd}*\oarg{entry \#1}\marg{text \#1}\oarg{entry \#2}\marg{text \#2}\ldots % \begin{macrocode} \newcommand*\@bicaption[1]{% \@ifstar {\def\bicaption@cmd{\bicaption@star{#1}}% \@@bicaption}% {\def\bicaption@cmd{#1}% \caption@dblarg\@@@bicaption}} % \end{macrocode} % \begin{macrocode} \newcommand\@@bicaption[1]{% \@@@@bicaption{}{#1}[]} % \end{macrocode} % \begin{macrocode} \long\def\@@@bicaption[#1]#2{% \caption@dblarg{\@@@@bicaption{#1}{#2}}} % \end{macrocode} % \begin{macrocode} \long\def\@@@@bicaption#1#2[#3]#4{% \bicaption@getlabel{#2}% \bicaption@ifswap {\bicaption@set{#1}{#2}% \bicaption@cmd[{#3}]{#4}}% {\bicaption@set{#3}{#4}% \bicaption@cmd[{#1}]{#2}}} % \end{macrocode} % \begin{macrocode} \long\def\bicaption@star#1[#2]{#1*} % \end{macrocode} % \end{macro} % % \begin{macro}{\bicaption@getlabel} % \changes{v1.0}{2011/09/03}{\cs{label} can have optional arguments now} % \changes{v1.4}{2020/12/25}{This macro re-added} % |\bicaption@getlabel|\marg{text}\\ % gets the label command out of the given caption text and stores it to |\caption@the|\-|label|. % It uses |\caption@get|\-|label| for this purpose which interface unfortunately has changed over time. % (Changing the interface was a bad idea in the first place but now it is as it is). % \begin{macrocode} \@ifundefined{caption@getlabel}{% % \end{macrocode} % \begin{macrocode} \newcommand\bicaption@getlabel[1]{% caption3 < v1.7 \bicaption@@getlabel#1\label{}\@nil} % \end{macrocode} % \begin{macrocode} \long\def\bicaption@@getlabel#1\label#2#3\@nil{% \def\@tempa{#2}% \ifx\@tempa\@empty \let\caption@thelabel\relax \else \def\@tempb{*}% \ifx\@tempa\@tempb \def\caption@thelabel{\label*}% \bicaption@@@getlabel#3\@nil \else \def\caption@thelabel{\label}% \bicaption@@@getlabel{#2}#3\@nil \fi \fi} % \end{macrocode} % \begin{macrocode} \long\def\bicaption@@@getlabel#1#2\@nil{% \def\@tempa{#1}% \def\@tempb{[}% \ifx\@tempa\@tempb \bicaption@@@@getlabel#1#2\@nil \else \l@addto@macro\caption@thelabel{{#1}}% \fi} % \end{macrocode} % \begin{macrocode} \long\def\bicaption@@@@getlabel[#1]#2\@nil{% \l@addto@macro\caption@thelabel{[{#1}]}% \bicaption@@@getlabel#2\@nil} % \end{macrocode} % \begin{macrocode} }{\@ifundefined{caption@@@@getlabel}{% % \end{macrocode} % \begin{macrocode} \newcommand\bicaption@getlabel[1]{% caption3 >= v1.7 \caption@getlabel#1\label{}\@nil} % \end{macrocode} % \begin{macrocode} }{% % \end{macrocode} % \begin{macrocode} \newcommand*\bicaption@getlabel{% caption3 >= v2.0 \caption@getlabel} % \end{macrocode} % \begin{macrocode} }} % \end{macrocode} % \end{macro} % % \begin{macro}{\bicaption@clrlabel} % \changes{v1.4a}{2020/12/26}{This macro added} % |\bicaption@clrlabel|\\ % resets |\caption@the|\-|label| to |\relax|. % \begin{macrocode} \@ifundefined{caption@clrlabel}{% % \end{macrocode} % \begin{macrocode} \newcommand*\bicaption@clrlabel{\let\caption@thelabel\relax} % caption3 < v2.3 % \end{macrocode} % \begin{macrocode} }{% % \end{macrocode} % \begin{macrocode} \newcommand*\bicaption@clrlabel{\caption@clrlabel} % caption3 >= v2.3 % \end{macrocode} % \begin{macrocode} } % \end{macrocode} % \end{macro} % % \begin{macro}{\bicaption@set} % \changes{v1.6}{2022/04/18}{This macro renamed from \cs{bicaption@setup} to \cs{bicaption@set}} % |\bicaption@set|\marg{list-entry}\marg{text}\\ % initiates the bilingual caption typesetting by storing the extra texts into % |\bi|\-|caption@l|\-|entry| and |\bi|\-|caption@text|. % \begin{macrocode} \newcommand\bicaption@set[2]{% \def\bicaption@lentry{#1}% \def\bicaption@text{\ignorespaces #2}} % \end{macrocode} % \end{macro} % % \begin{macro}{\bicaption@clear} % |\bicaption@clear|\\ % clears the stuff stored by |\bicaption@set|. % \begin{macrocode} \newcommand*\bicaption@clear{% \let\bicaption@lentry\@undefined \let\bicaption@text\@undefined} % \end{macrocode} % \end{macro} % % \begin{macro}{\caption@freeze} % \changes{v1.0}{2011/08/31}{Redefinition of \cs{caption@freeze} added} % \changes{v1.5c}{2022/04/18}{\cs{@ifnextchar} replaced by \cs{kernel@ifnextchar}} % To make |\bicaption| work inside |SCfigure| and |FPfigure| environments we need to add % |\bi|\-|caption| to |\caption@freeze|. % \begin{macrocode} \AtBeginDocument{% \ifx\caption@freeze\@undefined \else \g@addto@macro\caption@freeze{% \let\caption@frozen@bicaption\bicaption \def\bicaption{% \caption@withoptargs\caption@SC@bicaption}% \long\def\caption@SC@bicaption#1#2{% \kernel@ifnextchar[%] {\caption@SC@bi@caption{#1}{#2}}% {\caption@SC@bi@caption@{#1}{#2}}}% \long\def\caption@SC@bi@caption#1#2[#3]#4{% \caption@@freeze{\bicaption#1{#2}[{#3}]{#4}}% \ignorespaces}% \long\def\caption@SC@bi@caption@#1#2#3{% \caption@@freeze{\bicaption#1{#2}{#3}}% \ignorespaces}% \l@addto@macro\caption@warmup{% \let\bicaption\caption@frozen@bicaption}}% \fi} % \end{macrocode} % \end{macro} % % \changes{v1.1}{2013/05/02}{Definition of \cs{bicaption@listof} removed} % % \subsection{Support of the listings package} % \changes{v1.5}{2021/01/04}{Support of the \pkg{listings} package added} % % \begin{macrocode} \caption@IfPackageLoaded{listings}[2004/02/13 v1.2]{% % \end{macrocode} % % If the \pkg{listings} package is loaded, we define the new options `caption1' and `caption2'. % \begin{macrocode} \lst@Key{caption1}\relax{% \lstKV@OptArg[{#1}]{#1}{% \bicaption@ifswap {\bicaption@set{##1}{##2}}% {\def\lst@@caption{##1}\def\lst@caption{##2}}}% \let\lst@title\@empty}% % \end{macrocode} % \begin{macrocode} \lst@Key{caption2}\relax{% \lstKV@OptArg[{#1}]{#1}{% \bicaption@ifswap {\def\lst@@caption{##1}\def\lst@caption{##2}}% {\bicaption@set{##1}{##2}}}% \let\lst@title\@empty}% % \end{macrocode} % \begin{macrocode} \lst@AddToHookExe{TextStyle}{% \bicaption@clear}% % \end{macrocode} % % \begin{macrocode} }{} % \end{macrocode} % % \subsection{Support of the longtable package} % % \begin{macro}{\LT@bicaption} % \changes{v1.1}{2016/01/31}{Adaption to \pkg{longtable} package added} % Same as |\@bicaption| but for |longtable| (offered by the \pkg{longtable} package). % |\bi|\-|caption@LT|\-|setup| will be executed later on, inside |\LT@make|\-|caption| % offered by the \pkg{caption} package. % \begin{macrocode} \newcommand\LT@bicaption{% \noalign\bgroup \@ifstar {\gdef\bicaption@cmd{\LT@c@ption\@gobble}% \LT@@bicaption}% {\gdef\bicaption@cmd{\LT@c@ption\@firstofone}% \caption@dblarg\LT@@@bicaption}} \newcommand\LT@@bicaption[1]{% \LT@@@@bicaption{}{#1}[]} % \end{macrocode} % \begin{macrocode} \long\def\LT@@@bicaption[#1]#2{% \caption@dblarg{\LT@@@@bicaption{#1}{#2}}} % \end{macrocode} % \begin{macrocode} \long\def\LT@@@@bicaption#1#2[#3]#4{% \gdef\bicaption@LTsetup{% \bicaption@getlabel{#2}% \bicaption@LT@setup}% \gdef\bicaption@LT@setup{% \bicaption@ifswap {\bicaption@set{#1}{#2}}% {\bicaption@set{#3}{#4}}}% \bicaption@ifswap {\egroup\bicaption@cmd[{#3}]{#4}}% {\egroup\bicaption@cmd[{#1}]{#2}}} % \end{macrocode} % \begin{macrocode} \let\bicaption@LTsetup\relax \let\bicaption@LT@setup\relax % \end{macrocode} % \end{macro} % % \begin{macro}{\caption@LT@setup} % \changes{v1.1}{2016/01/31}{Adaption to \pkg{longtable} package added} % \changes{v1.4}{2020/12/25}{Fallback code for \pkg{caption} package \version{3.2} added} % Execute the stuff defined by \cs{LT@bicaption} to prepare the typesetting % of the \pkg{longtable} bilingual caption. % \begin{macrocode} \caption@ifundefined\caption@LT@setup{% % Fallback code for caption v3.2 \captionsetup*[longtable]{bicaption-lt-setup} \DeclareCaptionOptionNoValue{bicaption-lt-setup}{% \bicaption@LTsetup \global\let\bicaption@LTsetup\relax} }{% \g@addto@macro\caption@LT@setup{% \bicaption@LTsetup \global\let\bicaption@LTsetup\relax} } % \end{macrocode} % \end{macro} % % \iffalse % % \fi % % \iffalse % --------------------------------------------------------------------------- % % \fi % % \Finale % \endinput