% \iffalse meta-comment
% 
% This is file `bicaption.dtx'.
% 
% Copyright (C) 2010-2016 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, caption2.dtx,
% caption3.dtx, bicaption.dtx, ltcaption.dtx, subcaption.dtx, and newfloat.dtx,
% the derived files caption.sty, caption2.sty, caption3.sty,
% bicaption.sty, ltcaption.sty, subcaption.sty, and newfloat.sty,
% and the user manuals caption-deu.tex, caption-eng.tex, and caption-rus.tex.
% 
% \fi
% \CheckSum{402}
%
% \iffalse
%<*driver>
\NeedsTeXFormat{LaTeX2e}[1994/12/01]
\ProvidesFile{bicaption.drv}[2012/04/10 v1.1 Adds a bilingual caption feature to the caption package]
\hbadness=9999 \newcount\hbadness \hfuzz=74pt % Make TeX shut up.
%\errorcontextlines=3
%
\documentclass[german,english]{ltxdoc}
\setlength\parindent{0pt}
\setlength\parskip{\smallskipamount}
%
\newcommand\LineBreak{\linebreak[3]}
\newcommand\PageBreak{\pagebreak[3]}
\usepackage{ifpdf}
\ifpdf
  \usepackage{mathptmx,courier}
  \usepackage[scaled=0.90]{helvet}
  \addtolength\marginparwidth{15pt}
  \ifdim\paperheight=297mm % a4paper
    \renewcommand\LineBreak{\\}
    \renewcommand\PageBreak{\clearpage}
  \fi
\fi
%
\usepackage[T1]{fontenc}
\usepackage[german,english]{babel}
\usepackage{selinput}\SelectInputMappings{adieresis={ä},germandbls={ß}}
%
\usepackage[bottom]{footmisc}
%
\usepackage{hypdoc}
\ifpdf\usepackage{hypdestopt}\fi
\hypersetup{pdfkeywords={LaTeX, package, bicaption},pdfstartpage={},pdfstartview={}}
%
\usepackage{bicaption}[2012/12/26]
\usepackage{subcaption}[2012/04/09]
%
\newcommand*\purerm[1]{{\upshape\mdseries\rmfamily #1}}
\newcommand*\puresf[1]{{\upshape\mdseries\sffamily #1}}
\newcommand*\purett[1]{{\upshape\mdseries\ttfamily #1}}
\let\package\puresf
\let\env\purett \let\opt\purett
%
\newcommand*\csmarg[1]{\texttt{\char`\{#1\char`\}}}
\newcommand*\csoarg[1]{\texttt{\char`\[#1\char`\]}}
\newcommand*\version[2][]{$v#2$}
%
\usepackage{marvosym}
\makeatletter
\newcommand*\INFO{\@ifstar{\@INFO{}}{\@INFO{\vbox to \ht\strutbox}}}
\newcommand*\@INFO[1]{\MARGINSYM{#1{\LARGE\Info}}}
\makeatother
%
\usepackage[alpine]{ifsym}
\newenvironment{background}{\par\bigskip\csname background*\endcsname}{\csname endbackground*\endcsname}
\newenvironment{background*}{\small\MARGINSYM{\Mountain}\ignorespaces}{\par}
%
\newcommand*\MARGINSYM[1]{\hskip 1sp \marginpar{\raggedleft\textcolor{blue}{{#1}}}}
%\newcommand*\NEW[2]{}%\hskip 1sp \marginpar{\footnotesize\sffamily\raggedleft#1\\#2}}
%
\newenvironment{Options}[1]%
  {\list{}{\renewcommand\makelabel[1]{\texttt{##1}\hfil}%
   \settowidth\labelwidth{\texttt{#1\space}}%
   \setlength\leftmargin{10pt}%
   \addtolength\leftmargin{\labelwidth}%
   \addtolength\leftmargin{\labelsep}}}%
  {\endlist}
%
\begin{document}
  \DocInput{bicaption.dtx}
\end{document}
%</driver>
% \fi
%
% \let\subsectionautorefname\sectionautorefname
% \let\subsubsectionautorefname\sectionautorefname
%
% \def\thispackage{the \package{bicaption} package}
% \def\Thispackage{The \package{bicaption} package}
%
% \newcommand\NEWfeature{\NEW{New feature}}
% \newcommand\NEWdescription{\NEW{New description}}
%
% \makeatletter
% \newcommand*\Ref{\@ifstar{\@Ref\ref}{\@Ref\autoref}}
% \newcommand*\@Ref[2]{#1{#2}: \textit{\nameref{#2}}}
% \makeatother
% \newcommand*\See[1]{\nopagebreak{\small (See #1)}}
%
% \GetFileInfo{bicaption.drv}
% \let\docdate\filedate
% \GetFileInfo{bicaption.sty}
%
% \title{\texorpdfstring{\Thispackage\thanks{%^^A
%          This package has version number \fileversion, last revised \filedate.}}%^^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}
%
% \DescribeMacro{\usepackage}
% 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 \package{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}|\\
%   |\captionsetup[bi-second]|\marg{options}\quad.
% \end{quote}
%
% When used with the \package{babel} or \package{polyglossia} package, the
% \package{bicaption} package should be loaded \emph{after} it, so the main
% language will be set automatically. See \autoref{sec:babel} for details.
%
% \section{Setting options}
% \label{sec:options}
%
% \DescribeMacro{\captionsetup}
% \begin{quote}
%   |\captionsetup[bi]|\marg{options}
% \end{quote}
% do setup options which will be used for bilanguage captions \emph{additionally}
% to the ones which are setup for the specific floating environment.
%
% \begin{quote}
%   |\captionsetup[bi-first]|\marg{options}
% \end{quote}
% do setup options which will be used for the \emph{first} heading
% of the bilanguage captions \emph{additionally}
% to the ones which are setup for the specific floating environment
% and the ones which are setup by |\captionsetup[bi]{|\ldots|}|.
%
% \begin{quote}
%   |\captionsetup[bi-second]|\marg{options}
% \end{quote}
% do setup options which will be used for the \emph{second} heading
% of the bilanguage captions \emph{additionally}
% to the ones which are setup for the specific floating environment
% and the ones which are setup by |\captionsetup[bi]{|\ldots|}|.
%
% \bigskip
%
% Options specified with |\use|\-|package[|\ldots|]{bi|\-|caption}| and
% |\caption|\-|setup[bi|\ldots|]{|\ldots|}| will override the ones specified by
% |\caption|\-|setup{|\ldots|}| and |\caption|\-|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 `bi' settings
%  {\small(|\captionsetup[bi]{|\ldots|}|)}
% \item Custom `bi-first' resp.~`bi-second' settings
%  {\small(|\usepackage[|\ldots|]{bicaption}| and
%          |\caption|\-|setup[bi-first]{|\ldots|}|
%    resp.~|\caption|\-|setup[bi-second]{|\ldots|}|)}
% \end{enumerate}
% 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}
%
% \bigskip
%
% To limit |bi|, |bi-first|, or |bi-second| options to specific environments one can use
% multiple optional arguments for |\caption|\-|setup|, e.g.:
% \begin{quote}
%   |\captionsetup[figure][bi-first]|\oarg{options}
% \end{quote}
% will limit the settings to the first heading of |figure| environments only.
% Please note that the environment name has to be specified as first optional argument
% while the bilingual selection as second one.
%
% \section{Additional options}
% \label{sec:additional-options}
%
% These options are available additional to the ones offered by the
% \package{caption} package:
%
% \begin{Options}{language=}
%   \item[lang=]
%   \DescribeMacro{language=}
%   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=]
%   \DescribeMacro{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=]
%   \DescribeMacro{bi-singlelinecheck=}
%   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=]
%   \DescribeMacro{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|.)
% \end{Options}
%
% \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.
%
% \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 \package{caption} package documentation,
% \cs{captionbox}.)
% \endgroup
%
% \bigskip
%
% If the \package{subcaption} package is loaded, these commands are available
% additionally:
%
% \smallskip
%
% \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.
%
% \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 \package{subcaption} package documentation,
% \cs{subcaptionbox}.)
% \endgroup
%
% \PageBreak
% \section{A sample document}
% \label{sec:example}
%
% \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=0}|\\
%   ||\\
%   |\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=0}|\\
%   ||\\
%   |\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
% \captionsetup[bi-first]{lang=german}
% \captionsetup[bi-second]{lang=english,font=it}
% \captionsetup[sub]{format=hang,list=on}
%
% \iffalse
% \listoffigures
% \bigskip
% \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=0}
%
% \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=0}
%
% \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}
%
% \PageBreak
% \section{Customising lists}
% \label{sec:lists}
%
% \DescribeMacro{list=}
% As default both caption texts will be insert into the List of Figures resp. List of Tables.
% To suppress the second entry just pass the option |list=off| to the \package{bicaption}
% package, e.g.:
% \begin{quote}
%   |\usepackage[lang=english,|\ldots|,list=off]{bicaption}|
% \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 \package{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 \package{newfloat} package, but some document classes
% or other packages offer macros for defining new floating environment types
% (and their corresponding lists) as well.
%
% 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 "figureEng" resp. "tableEng"|\\
%   |\usepackage[lang=english,listtype+=Eng]{bicaption}|\\
%   ||\\
%   |\usepackage{newfloat}|\\
%   |% Define the new floating environment type "figureEng"|\\
%   |\DeclareFloatingEnvironment[fileext=lof2]{figureEng}|\\
%   |                   [Figure][List of Figures]|\\
%   |% Define the new floating environment type "tableEng"|\\
%   |\DeclareFloatingEnvironment[fileext=lot2]{tableEng}|\\
%   |                   [Table][List of Tables]|\\
%   ||\\
%   |\begin{document}|\\
%   |\listoffigures      % typeset "Abbildungsverzeichnis"|\\
%   |\listoffigureEnges  % 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 \package{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 \package{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" resp. "table2"|\\
%   |\usepackage[lang=english,listtype+=2]{bicaption}|\\
%   ||\\
%   |% We load the titletoc package for customizing 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 customizing "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, e.g. |english| or |german|.
% If not set prior to loading \thispackage, \thispackage\ will try to obtain this setting from
% the \package{babel} or \package{polyglossia} package.
%
% So if you are using either \package{babel} or \package{polyglossia}, and want to adopt
% the main language setting from it, then just load \thispackage\ \emph{after} it,
% and simply forget about the |\caption|\-|main|\-|lan|\-|guage| stuff.
%
% Otherwise one can either define |\caption|\-|main|\-|lan|\-|guage| prior to
% loading \thispackage, e.g.:
% \begin{quote}
%   |\newcommand\captionmainlanguage{french}|\\
%   |\usepackage|\oarg{options}|{bicaption}|
% \end{quote}
% Or one can specify the main language via |\caption|\-|setup| after loading \thispackage, e.g.:
% \begin{quote}
%   |\usepackage|\oarg{options}|{bicaption}|\\
%   |\captionsetup[bi-first]{lang=french}|
% \end{quote}
% When not using the \package{babel} or \package{polyglossia} package both approaches
% will have exactly the same effect.
% But when using the \package{babel} or \package{polyglossia} package, and one want to
% specify the main caption language manually, the first approach is preferable since
% defining |\caption|\-|main|\-|lan|\-|guage| will suppress the automatic detection mechanism.
%
% \medskip
%
% \DescribeMacro\selectcaptionlanguage
% |\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) resp.~|\select|\-|lan|\-|guage| (list entry)
% offered by the \package{babel} and \package{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.
%
% \medskip
%
% Please note that all of this will only be relevant if the |lang=| option will be used.
% Otherwise |\select|\-|caption|\-|lan|\-|guage| won't be used by \thispackage\ at all.
%
% \iffalse
% --------------------------------------------------------------------------- %
% \fi
%
% \StopEventually{%^^A
% }
%
% \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{\@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{\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 \package{babel} package added}
%
% \newcommand*\Note[2][Note]{\par{\small\emph{#1:} #2}}
%
% \iffalse
% --------------------------------------------------------------------------- %
% \fi
%
% \clearpage
% \section{The implementation}
% \iffalse
%<*package>
% \fi
%
% \subsection{Identification}
%
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}[1994/12/01]
\ProvidesPackage{bicaption}[2018/08/26 v1.1-159 Bilingual Captions (AR)]
%    \end{macrocode}
%    \begin{macrocode}
\RequirePackage{caption}[2016/02/01] % needs v3.3-134 or newer
%    \end{macrocode}
% \changes{v1.0}{2011/09/01}{Compatibility error added}
%    \begin{macrocode}
\caption@AtBeginDocument{\caption@ifcompatibility{%
  \caption@Error{%
    The `bicaption' package does not work correctly\MessageBreak
    in compatibility mode}}{}}
%    \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}\bicaption@eh}
%\let\bicaption@KV@err\bicaption@Error
%    \end{macrocode}
%    \begin{macrocode}
\newcommand*\bicaption@eh{%
  If you do not understand this error, please take a closer look\MessageBreak
  at the documentation of the `bicaption' package.\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 |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 \package{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.
% The only option affected I'm aware off is the |name=| option, so this will be saved
% and set later on, too.
% (Since the user can declare own options it would be nice to have a new command for handling
% delayed option settings because of the language selection,
% e.g. |\DeclareCaptionLangOption|\marg{option key}.
% This will be offered by a future version of \thispackage.)
%    \begin{macrocode}
\DeclareCaptionOption{lang}{%
  \caption@ifundefined\bicaption@language
    {\let\KV@bicaption@name\KV@caption@name
     \def\KV@caption@name{\bicaption@KV{name}}}%
    {}%
  \def\bicaption@language{#1}%
  \let\bicaption@language@options\@empty}
%    \end{macrocode}
%    \begin{macrocode}
\let\KV@caption@language\KV@caption@lang
%    \end{macrocode}
%
% \begin{macro}{\bicaption@KV}
% \changes{v1.1}{2016/03/27}{This macro added}
% |\bicaption@KV|\marg{option key}\marg{option value}\par
% This macro do execute the given caption package option, and store it additionally for
% delayed execution after setting the language.
%    \begin{macrocode}
\newcommand\bicaption@KV[2]{%
  \@bicaption@KV{#1}{#2}%
  \l@addto@macro\bicaption@language@options{\@bicaption@KV{#1}{#2}}}
%    \end{macrocode}
%    \begin{macrocode}
\newcommand\@bicaption@KV[1]{%
  \@nameuse{KV@bicaption@#1}}
%    \end{macrocode}
% \end{macro}
%
% \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@options} 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@options}}
%    \end{macrocode}
% |\caption@beginhook| (of the \package{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| and |bi-singlelinecheck|.
%    \begin{macrocode}
\caption@ExecuteOptions{caption}{bi-lang=0,bi-slc=1,bi-swap=0}
%    \end{macrocode}
%
% Set the language for the first caption.
%    \begin{macrocode}
\ifcsname captionmainlanguage\endcsname
  \bicaption@InfoNoLine{main language is set to \captionmainlanguage}
\else\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
\else
  \bicaption@InfoNoLine{main language is not set}
\fi\fi\fi
%    \end{macrocode}
%    \begin{macrocode}
\ifcsname captionmainlanguage\endcsname
  \edef\@tempa{\noexpand\captionsetup[bi-first]{lang=\captionmainlanguage}}
  \@tempa
\fi
%    \end{macrocode}
% 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 \package{longtable} package added}
% We patch |\caption@add|\-|contents|\-|line| (of the \package{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}
% We redefine |\caption@@make| (of the \package{caption} package kernel)
% so |\bi|\-|caption@@make| will be used for bilingual captions instead.
%    \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}
  \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}}
% |\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
      {\caption@slc{#2}{#3}{}{\KV@caption@singlelinecheck0}%
       \caption@slc{#2}{#1}{}{\KV@caption@singlelinecheck0}}%
      {}%
  \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
    \global\let\caption@thelabel\relax
  \else
    \begingroup
      \caption@setoptions{bi-first}%
      \caption@@make@{#2}{#3}%
    \endgroup
  \fi
%    \end{macrocode}
% Typeset the second caption, if requested.
%    \begin{macrocode}
  \ifnum\bicaption@lang=1\relax
  \else
    \begingroup
      \caption@setoptions{bi-second}%
      \caption@@make@{#2}{#1}%
    \endgroup
  \fi
}
%    \end{macrocode}
% \end{macro}
%
% \pagebreak[3]
% \subsubsection{The \cs{bicaption} commands}
%
% \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}}
% |\@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{%
  \caption@getlabel#2\label{}\@nil
  \bicaption@ifswap
    {\bicaption@setup{#1}{#2}%
     \bicaption@cmd[{#3}]{#4}}%
    {\bicaption@setup{#3}{#4}%
     \bicaption@cmd[{#1}]{#2}}}
%    \end{macrocode}
%    \begin{macrocode}
\long\def\bicaption@star#1[#2]{#1*}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LT@bicaption}
% \changes{v1.1}{2016/01/31}{Adaption to \package{longtable} package added}
% Same as |\@bicaption| but for |longtable| (offered by the \package{longtable} package).
% |\bicaption@LTsetup| will be executed later on, inside |\LT@makecaption| offered by the \package{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{%
    \caption@getlabel#2\label{}\@nil
    \bicaption@LT@setup}%
  \gdef\bicaption@LT@setup{%
    \bicaption@ifswap
      {\bicaption@setup{#1}{#2}}%
      {\bicaption@setup{#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 \package{longtable} package added}
% Execute the stuff defined by \cs{LT@bicaption} to prepare the typesetting
% of the \package{longtable} bilingual caption.
%    \begin{macrocode}
\g@addto@macro\caption@LT@setup{%
  \bicaption@LTsetup
  \global\let\bicaption@LTsetup\relax}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\bicaption@setup}
% |\bicaption@setup|\marg{list-entry}\marg{text}\par
% Initiates the bilingual caption typesetting by storing the extra texts into
% |\bi|\-|caption@l|\-|entry| and |\bi|\-|caption@text|.
%    \begin{macrocode}
\newcommand\bicaption@setup[2]{%
  \def\bicaption@lentry{#1}%
  \def\bicaption@text{\ignorespaces#2}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\caption@freeze}
% \changes{v1.0}{2011/08/31}{Redefinition of \cs{caption@freeze} added}
% 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{%
        \@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}
%
% \begin{thebibliography}{9}
%   \bibitem{TLC2}
%   Frank Mittelbach and Michel Goossens:\\
%   \newblock {\em The {\LaTeX} Companion (2nd.~Ed.)},
%   \newblock Addison-Wesley, 2004.
% \end{thebibliography}
%
% \iffalse
%</package>
% \fi
%
% \iffalse
% --------------------------------------------------------------------------- %
% \fi
%
% \Finale
%
\endinput

