summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/caption/bicaption.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/caption/bicaption.dtx
Initial commit
Diffstat (limited to 'macros/latex/contrib/caption/bicaption.dtx')
-rw-r--r--macros/latex/contrib/caption/bicaption.dtx1384
1 files changed, 1384 insertions, 0 deletions
diff --git a/macros/latex/contrib/caption/bicaption.dtx b/macros/latex/contrib/caption/bicaption.dtx
new file mode 100644
index 0000000000..49c9d1f508
--- /dev/null
+++ b/macros/latex/contrib/caption/bicaption.dtx
@@ -0,0 +1,1384 @@
+% \iffalse meta-comment
+%
+% This is file `bicaption.dtx'.
+%
+% Copyright (C) 2010-2018 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{427}
+%
+% \iffalse
+%<*driver>
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+\ProvidesFile{bicaption.drv}[2016/03/27 v1.2 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}[2016/03/27]
+\usepackage{subcaption}[2016/02/21]
+%
+\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]{\MARGINSYM{\vskip2pt\footnotesize#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
+% \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}
+%
+% \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 (|figure|, |table|, \ldots) has to be specified
+% as first optional argument while the bilingual selection (|bi|, |bi-first|, or |bi-second|)
+% 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
+% \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) 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
+%
+% \DescribeMacro\DeclareCaptionLangOption
+% \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}
+% |\captionsetup[bi-second]{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|.
+%
+% 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}
+% |\captionsetup[bi-second]{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.
+%
+% 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}
+% |\captionsetup[bi-second]{lang=ngerman,name=Bild}|
+% \end{quote}
+% will give the expected result, i.e. the environment name is typeset as ``Bild''.
+%
+% \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}[2016/03/27 v1.2 Bilingual Captions (AR)]
+% \end{macrocode}
+% \begin{macrocode}
+\RequirePackage{caption}[2018/05/11] % needs v3.4 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. 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
+ \def\bicaption@language{#1}%
+ \let\bicaption@language@setoptions\@empty}
+% \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 \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
+