summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/caption/bicaption.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/caption/bicaption.dtx')
-rw-r--r--Master/texmf-dist/source/latex/caption/bicaption.dtx1132
1 files changed, 791 insertions, 341 deletions
diff --git a/Master/texmf-dist/source/latex/caption/bicaption.dtx b/Master/texmf-dist/source/latex/caption/bicaption.dtx
index 5bba05cb2ff..fba7724ff39 100644
--- a/Master/texmf-dist/source/latex/caption/bicaption.dtx
+++ b/Master/texmf-dist/source/latex/caption/bicaption.dtx
@@ -2,7 +2,7 @@
%
% This is file `bicaption.dtx'.
%
-% Copyright (C) 2010-2020 Axel Sommerfeldt (axel.sommerfeldt@f-m.fm)
+% Copyright (C) 2010-2021 Axel Sommerfeldt (axel.sommerfeldt@f-m.fm)
%
% --------------------------------------------------------------------------
%
@@ -27,17 +27,16 @@
% caption.sty, caption-light.sty, caption2.sty, caption3.sty,
% caption-ams-smf.sto, caption-beamer.sto, caption-elsarticle.sto,
% caption-koma.sto, caption-memoir.sto, caption-ntg.sto,
-% caption-thesis.sto, bicaption.sty, ltcaption.sty, subcaption.sty,
-% and the user manuals
-% caption-deu.tex, caption-eng.tex, caption-rus.tex.
+% caption-thesis.sto, bicaption.sty, ltcaption.sty, subcaption.sty.
%
% \fi
-% \CheckSum{457}
+%
+% \CheckSum{626}
%
% \iffalse
%<*driver>
\NeedsTeXFormat{LaTeX2e}[1994/12/01]
-\ProvidesFile{bicaption.drv}[2020/10/25 v1.3 Adds a bilingual caption feature to the caption package]
+\ProvidesFile{bicaption.drv}[2022/01/07 v1.5 Adds a bilingual caption feature to the caption package]
\hbadness=9999 \newcount\hbadness \hfuzz=74pt % Make TeX shut up.
%\errorcontextlines=3
%
@@ -54,7 +53,8 @@
%
\usepackage[T1]{fontenc}
\usepackage[german,english]{babel}
-\usepackage{selinput}\SelectInputMappings{adieresis={ä},germandbls={ß}}
+%\usepackage{selinput}\SelectInputMappings{adieresis={ä},germandbls={ß}}
+\usepackage[utf8]{inputenc}
%
\usepackage[bottom]{footmisc}
%
@@ -85,8 +85,11 @@
\newenvironment{background}{\par\bigskip\csname background*\endcsname}{\csname endbackground*\endcsname}
\newenvironment{background*}{\small\MARGINSYM{\Mountain}\ignorespaces}{\par}
%
+\makeatletter
\newcommand*\MARGINSYM[1]{\hskip 1sp \marginpar{\raggedleft\textcolor{blue}{{#1}}}}
-\newcommand*\NEW[2]{\MARGINSYM{\vskip2pt\footnotesize#1\\#2}}
+\newcommand*\NEW[1]{\@ifstar{\@NEW{#1}{\vskip2pt}}{\@NEW{#1}{}}}
+\newcommand*\@NEW[3]{\MARGINSYM{#2\footnotesize#1\\#3}}
+\makeatother
%
\newenvironment{Options}[1]%
{\list{}{\renewcommand\makelabel[1]{\texttt{##1}\hfil}%
@@ -135,7 +138,6 @@
% \section{Loading the package}
% \label{sec:loading}
%
-% \DescribeMacro{\usepackage}
% This package will be loaded by
% \begin{quote}
% |\usepackage|\oarg{options}|{bicaption}|\quad.
@@ -160,7 +162,7 @@
% \section{Setting options}
% \label{sec:options}
%
-% \DescribeMacro{\captionsetup}
+% \DescribeMacro\captionsetup
% The command
% \begin{quote}
% |\captionsetup[bi]|\marg{options}
@@ -266,14 +268,14 @@
% will swap the primary and secondary language,
% making the first language the second one and vice versa. (The default is |false|.)
%
-% \NEWfeature{v1.3}
% \item[bi-separator=]
% \begin{quote}|\captionsetup{bi-separator=|\meta{name}|}|\end{quote}
+% \NEWfeature{v1.3}
% will select a separator between first and second bilingual caption.
% You could choose one of the following: `none' (which is the default one
% and could also be addressed as `default'), `smallskip', `medskip',
% `largeskip', or a self-defined one using
-% \DescribeMacro{\DeclareBiCaptionSeparator}
+% \DescribeMacro{\DeclareBiCaption-\\Separator}
% \begin{quote}|\DeclareBiCaptionSeparator|\marg{name}\marg{code}\end{quote}
% Examples:
% \begin{quote}
@@ -321,9 +323,430 @@
% \cs{captionbox}.)
% \endgroup
%
-% \bigskip
+% \pagebreak[3]
+% \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 type "figureEng" and \listoffigureEng|\\
+% |\DeclareFloatingEnvironment[fileext=lof2]{figureEng}|\\
+% | [Figure][List of Figures]|\\
+% |% Define type "tableEng" and \listoftableEng|\\
+% |\DeclareFloatingEnvironment[fileext=lot2]{tableEng}|\\
+% | [Table][List of Tables]|\\
+% ||\\
+% |\begin{document}|\\
+% ||\\
+% |\listoffigures % typeset "Abbildungsverzeichnis"|\\
+% |\listoffigureEng % 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, for example
+% `french' or `german'.
+% If not set manually, \thispackage\ will try to obtain this setting from
+% the \package{babel} or \package{polyglossia} package after the preamble of
+% the document, i.e.~at |\begin{doc|\-|u|\-|ment}|.
+%
+% So if you are using either \package{babel} or \package{polyglossia}, and want to inherit
+% the main language setting from it, then simply forget about the
+% |\caption|\-|main|\-|lan|\-|guage| stuff and skip the rest of the section.
+%
+% \pagebreak[3]
+% Otherwise one can define |\caption|\-|main|\-|lan|\-|guage| manually, e.g.:
+% \begin{quote}
+% |\newcommand\captionmainlanguage{french}|\\
+% |\usepackage[lang=english]{bicaption}|
+% \end{quote}
+%
+% \pagebreak[3]
+% Note: Prior to \version{1.5} |\caption|\-|main|\-|language| needed to be defined
+% \emph{before} loading \thispackage. Since \version{1.5} is could be defined either
+% before or after loading \thispackage.
+%
+% \medskip
+%
+% \DescribeMacro\selectcaptionlanguage
+% \NEWfeature*{v1.1}
+% |\select|\-|caption|\-|lan|\-|guage| will be used internally to select the language:
+% \begin{quote}
+% |\selectcaptionlanguage|\marg{font-or-list-entry}\marg{language}
+% \end{quote}
+% For setting the language of the caption \meta{font-or-list-entry} will be |\@first|\-|of|\-|two|,
+% for setting the language of the list entry \meta{font-or-list-entry} will be
+% |\@second|\-|of|\-|two|.~\footnote{\cs{@firstoftwo} and \cs{@secondoftwo} are defined
+% in the \LaTeX\ kernel and simply pick either the 1st or 2nd argument.}
+% It defaults to |\select@lan|\-|guage| (caption) 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.
+%
+% \pagebreak[3]
+% Example document using \package{babel}:
+% \begin{quote}
+% |\documentclass[a4paper]{article}|\\
+% ||\\
+% |% Use "ngerman" as 1st language, "english" as 2nd one|\\
+% |\usepackage[english,ngerman]{babel}|\\
+% ||\\
+% |% Add custom translations to babel|\\
+% |\addto\captionsgerman{%|\\
+% |% \renewcommand\whatevername{Wasauchimmer}%|\\
+% |% |\ldots\\
+% |}|\\
+% |\addto\captionsenglish{%|\\
+% |% \renewcommand\whatevername{Whatever}%|\\
+% |% |\ldots\\
+% |}|\\
+% ||\\
+% |% Load the bicaption package with 2nd language set to|\\
+% |% "english"|\\
+% |\usepackage[lang=english]{bicaption}|\\
+% ||\\
+% |\begin{document}|\\
+% ||\\
+% |\begin{figure}|\\
+% | \centering|\\
+% | A placeholder for an image or whatever|\\
+% | \bicaption{Deutscher Text}{English text}|\\
+% |\end{figure}|\\
+% ||\\
+% |\end{document}|
+% \end{quote}
+%
+% \pagebreak[3]
+% The same example document but using a custom implementation of
+% |\caption|\-|main|\-|language| and |\select|\-|caption|\-|language|
+% instead of \package{babel}:
+% \begin{quote}
+% |\documentclass[a4paper]{article}|\\
+% ||\\
+% |% Load the bicaption package with 2nd language set to|\\
+% |% "english"|\\
+% |\usepackage[lang=english]{bicaption}|\\
+% ||\\
+% |% Set "german" as main bi-caption language|\\
+% |\newcommand\captionmainlanguage{german}|\\
+% ||\\
+% |% Declare an own language switching mechanism|\\
+% |% for bi-captions (instead of using babel)|\\
+% |\renewcommand\selectcaptionlanguage[2]{%|\\
+% | \csname captions#2\endcsname}|\\
+% |\newcommand\captionsgerman{%|\\
+% | \renewcommand\figurename{Abbildung}%|\\
+% | \renewcommand\tablename{Tabelle}%|\\
+% |% \renewcommand\whatevername{Wasauchimmer}%|\\
+% |% |\ldots\\
+% |}|\\
+% |\newcommand\captionsenglish{%|\\
+% | \renewcommand\figurename{Figure}%|\\
+% | \renewcommand\tablename{Table}%|\\
+% |% \renewcommand\whatevername{Whatever}%|\\
+% |% |\ldots\\
+% |}|\\
+% ||\\
+% |\begin{document}|\\
+% ||\\
+% |\begin{figure}|\\
+% | \centering|\\
+% | A placeholder for an image or whatever|\\
+% | \bicaption{Deutscher Text}{English text}|\\
+% |\end{figure}|\\
+% ||\\
+% |\end{document}|
+% \end{quote}
+%
+% \pagebreak[3]
+% \NEWfeature{v1.5}
+% Since \version{1.5} a warning is issued if the main language could neither be
+% detected automatically nor was it set explicitly by the user.
+% If you really don't want to set languages for bi-captions but are annoyed by
+% the warning you could trick the \package{bicaption} by defining a custom
+% dummy language-selection mechanism, e.g.:
+% \begin{quote}
+% |\newcommand\captionmainlanguage{dummy}|\\
+% |\renewcommand\selectcaptionlanguage[2]{}|\\
+% \end{quote}
+%
+% \medskip
+%
+% \DescribeMacro{\DeclareCaption-\\LangOption}
+% \NEWfeature*{v1.2}
+% For internal implementation reasons the selection of language will be done delayed,
+% i.e.~not done immediately at |lang=|\meta{language}. So if you do
+% \begin{quote}
+% |\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''.
+%
+% \section{Required packages}
+% \label{sec:caption}
+%
+% \NEWfeature{v1.4}
+% Starting with version $1.4$ the \package{bicaption} package requires at least version $3.2$
+% of the \package{caption} package and loads it automatically.
+% (Older versions of the \package{bicaption} package have required exactly the version of the
+% \package{caption} package which was released with it.)
+%
+% \pagebreak[3]
+% If you need to use a specific version of the \package{caption} package you need to load it
+% \emph{before} the \package{bicaption} package, e.g.:
+% \begin{quote}
+% |\usepackage[| \ldots |]{caption}[=v3.5]|\\
+% |\usepackage[| \ldots |]{bicaption}|
+% \end{quote}
+%
+% \pagebreak[3]
+% Note that there are limitations if an older version of the \package{caption} package
+% is used:
+% \begin{itemize}
+% \item Full support of list entries of the \env{lstlisting} environment
+% (offered by the \package{listings} package) needs at least \package{caption} \version{3.6}.
+% \end{itemize}
+%
+% \section{Supported packages}
+% \label{sec:packages}
+%
+% The \package{bicaption} package was adapted to the following packages which deals with captions, too:
+% \package{listings}~\cite{listings}, \package{longtable}~\cite{longtable}, and \package{subcaption}~\cite{subcaption}.
%
-% If the \package{subcaption} package is loaded, these commands are available
+% \subsection{Support of the listings package}
+% \label{sec:listings}
+%
+% \NEWfeature{v1.5}
+% If the \package{listings} package~\cite{listings} is loaded, the \package{listings} options \opt{caption1}
+% and \opt{caption2} are available additionally, where option \opt{caption1} specifies the
+% caption of the first language and \opt{caption2} of the second one.
+%
+% Example document, using distinctive lists for each language:
+% \begin{quote}
+% |\documentclass[a4paper]{article}|\\
+% |\usepackage{graphicx}|\\
+% ||\\
+% |% Use "ngerman" as 1st language, "english" as 2nd one|\\
+% |\usepackage[english,ngerman]{babel}|\\
+% ||\\
+% |% Load the bicaption package with 2nd language set to|\\
+% |% "english", and list type "figureEng" resp. "tableEng"|\\
+% |\usepackage[lang=english,listtype+=Eng,font=it]{bicaption}|\\
+% |\captionsetup{slc=off} % do not center short captions|\\
+% ||\\
+% |\usepackage{listings}|\\
+% ||\\
+% |% Set German names|\\
+% |\addto\captionsgerman{%|\\
+% | \renewcommand\lstlistingname{Quelltext}%|\\
+% | \renewcommand\lstlistlistingname{Quelltextverzeichnis}%|\\
+% |}|\\
+% |\AtBeginDocument{\captionsgerman}% or load listings before babel|\\
+% ||\\
+% |% Set English names|\\
+% |\addto\captionsenglish{%|\\
+% | \renewcommand\lstlistingname{Listing}%|\\
+% | \renewcommand\lstlistlistingname{List of Listings}%|\\
+% |}|\\
+% ||\\
+% |\usepackage{newfloat}|\\
+% |% Define the new floating environment type "lstlistingEng"|\\
+% |% (just to get an extra list for English listing captions)|\\
+% |\DeclareFloatingEnvironment[fileext=lol2]{lstlistingEng}|\\
+% | [Listing][List of Listings]|\\
+% ||\\
+% |\begin{document}|\\
+% ||\\
+% |\lstlistoflistings % German|\\
+% |\listoflstlistingEng % English|\\
+% ||\\
+% |\clearpage|\\
+% ||\\
+% |\begin{lstlisting}|\\
+% | [language=C,|\\
+% | caption1=Deutscher Titel,|\\
+% | caption2=English Title]|\\
+% | int main()|\\
+% | {|\\
+% | printf( "Hello world!\n" );|\\
+% | return 0;|\\
+% | }|\\
+% |\end{lstlisting}|\\
+% ||\\
+% |\end{document}|
+% \end{quote}
+%
+% \subsection{Support of the longtable package}
+% \label{sec:longtable}
+%
+% If the \package{longtable} package~\cite{longtable} is loaded, |\bicaption| is available
+% in the \env{longtable} environment as well, e.g.:
+% \begin{quote}
+% |\documentclass[a4paper]{article}|\\
+% ||\\
+% |% Use "ngerman" as 1st language, "english" as 2nd one|\\
+% |\usepackage[english,ngerman]{babel}|\\
+% ||\\
+% |% Load the bicaption package with 2nd language set to|\\
+% |% "english"|\\
+% |\usepackage[lang=english]{bicaption}|\\
+% ||\\
+% |\usepackage{longtable}|\\
+% ||\\
+% |\begin{document}|\\
+% ||\\
+% |\begin{longtable}{ll}|\\
+% | \bicaption{Deutscher Titel}{English Title}\\|\\
+% | A & B \\|\\
+% | C & D \\|\\
+% | |\ldots\\
+% |\end{longtable}|\\
+% ||\\
+% |\end{document}|
+% \end{quote}
+%
+% \subsection{Support of the subcaption package}
+% \label{sec:subcaption}
+%
+% If the \package{subcaption} package~\cite{subcaption} is loaded, these commands are available
% additionally:
%
% \smallskip
@@ -355,8 +778,7 @@
% \endgroup
%
% \pagebreak[3]
-% \section{A sample document}
-% \label{sec:example}
+% \subsubsection{A sample document}
%
% \begin{quote}
% |\documentclass[english,ngerman]{article}|\\
@@ -424,7 +846,7 @@
% | {Short English heading}|\\
% |\end{figure}|\\
% ||\\
-% |\captionsetup{bi-slc=0}|\\
+% |\captionsetup{bi-slc=off}|\\
% ||\\
% |\begin{figure}[!htb]|\\
% | \centering|\\
@@ -441,7 +863,7 @@
% | {Short English heading}|\\
% |\end{figure}|\\
% ||\\
-% |\captionsetup{slc=0}|\\
+% |\captionsetup{slc=off}|\\
% ||\\
% |\begin{figure}[!htb]|\\
% | \centering|\\
@@ -471,7 +893,8 @@
% \bigskip
% \fi
%
-% \begin{figure}[!htb]
+% \begin{minipage}{\linewidth}
+% \setcaptiontype{figure}
% \centering
% \bisubcaptionbox
% {Teilabbildung A\label{fig:test:A}}
@@ -482,12 +905,14 @@
% {Subfigure long title B}[0.4\textwidth]{IMAGE}%
% \bicaption{Deutscher Titel}{English Title}
% \label{fig:test}
-% \end{figure}
+% \end{minipage}
%
% \iffalse
+% \bigskip
% \captionsetup{bi-lang=2nd}
%
-% \begin{figure}[!htb]
+% \begin{minipage}{\linewidth}
+% \setcaptiontype{figure}
% \centering
% \bisubcaptionbox
% {Teilabbildung A\label{fig:test2:A}}
@@ -498,12 +923,14 @@
% {Subfigure long title B}[0.4\textwidth]{IMAGE}%
% \bicaption{Deutscher Titel}{English Title}
% \label{fig:test2}
-% \end{figure}
+% \end{minipage}
% \fi
%
+% \bigskip
% \captionsetup{bi-lang=both}
%
-% \begin{figure}[!htb]
+% \begin{minipage}{\linewidth}
+% \setcaptiontype{figure}
% \centering
% \bisubcaptionbox[A]
% {Und eine gaaaanz lange Caption: Teilabbildung A}
@@ -516,11 +943,13 @@
% {Und eine noch viel viel viel
% längere deutsche Beschriftung: Deutscher Titel}
% {Short English heading}
-% \end{figure}
+% \end{minipage}
%
-% \captionsetup{bi-slc=0}
+% \bigskip
+% \captionsetup{bi-slc=off}
%
-% \begin{figure}[!htb]
+% \begin{minipage}{\linewidth}
+% \setcaptiontype{figure}
% \centering
% \bisubcaptionbox[A]
% {Und eine gaaaanz lange Caption: Teilabbildung A}
@@ -533,11 +962,13 @@
% {Und eine noch viel viel viel
% längere deutsche Beschriftung: Deutscher Titel}
% {Short English heading}
-% \end{figure}
+% \end{minipage}
%
-% \captionsetup{slc=0}
+% \bigskip
+% \captionsetup{slc=off}
%
-% \begin{figure}[!htb]
+% \begin{minipage}{\linewidth}
+% \setcaptiontype{figure}
% \centering
% \bisubcaptionbox[A]
% {Und eine gaaaanz lange Caption: Teilabbildung A}
@@ -550,224 +981,40 @@
% {Und eine noch viel viel viel
% längere deutsche Beschriftung: Deutscher Titel}
% {Short English heading}
-% \end{figure}
-%
-% \pagebreak[3]
-% \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''.
+% \end{minipage}
%
% \iffalse
% --------------------------------------------------------------------------- %
% \fi
%
% \StopEventually{%^^A
+% \begin{thebibliography}{99}
+%
+% \bibitem{caption}
+% Axel Sommerfeldt:\\
+% \href{http://www.ctan.org/pkg/caption}%
+% {\emph{Customizing captions of floating environments}},\\
+% 2022/01/07
+%
+% \bibitem{listings}
+% Carsten Heinz \& Brooks Moses:\\
+% \href{http://www.ctan.org/pkg/listings}%
+% {\emph{The Listings Package}},\\
+% 2007/02/22
+%
+% \bibitem{longtable}
+% David Carlisle:\\
+% \href{http://www.ctan.org/pkg/longtable}%
+% {\emph{The longtable package}},\\
+% 2004/02/01
+%
+% \bibitem{subcaption}
+% Axel Sommerfeldt:\\
+% \href{http://www.ctan.org/pkg/subcaption}%
+% {\emph{The subcaption package}},\\
+% 2022/01/07
+%
+% \end{thebibliography}
% }
%
% \iffalse
@@ -796,6 +1043,7 @@
% \DoNotIndex{\hangindent,\hbox,\hfil,\hsize,\hskip,\hspace,\hss}
% \DoNotIndex{\ifcase,\ifdim,\ifnum,\ifodd,\ifvoid,\ifvmode}
% \DoNotIndex{\ifx,\ignorespaces,\itshape}
+% \DoNotIndex{\kernel@ifnextchar}
% \DoNotIndex{\Large,\large,\leavevmode,\leftmargini,\leftskip,\let,\linewidth}
% \DoNotIndex{\llap,\long,\m@ne,\margin,\mdseries,\message}
% \DoNotIndex{\newcommand,\newdimen,\newlength,\newline,\newif,\newsavebox}
@@ -840,18 +1088,38 @@
%
% \clearpage
% \section{The implementation}
+%
% \iffalse
%<*package>
% \fi
%
% \subsection{Identification}
%
+% We need at least \LaTeX2e\ version 1994/12/01.
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}[1994/12/01]
-\ProvidesPackage{bicaption}[2020/10/25 v1.3 Bilingual Captions (AR)]
% \end{macrocode}
+%
+% Bypass the release declarations in case the \LaTeX\ kernel doesn’t know how to deal with them
+% (as suggested by \url{https://www.latex-project.org/publications/2018-FMi-TUB-tb122mitt-version-rollback.pdf}).
+% \begin{macrocode}
+\providecommand\DeclareRelease[3]{}
+\providecommand\DeclareCurrentRelease[2]{}
+% \end{macrocode}
+%
+% Declare all supported releases.
+% \begin{macrocode}
+\DeclareCurrentRelease{v1}{2011/07/13}
+% \end{macrocode}
+%
+% Identify the current version of the package.
% \begin{macrocode}
-\RequirePackage{caption}[2020/08/23] % needs v3.5 or newer
+\ProvidesPackage{bicaption}[2021/05/02 v1.5b Bilingual Captions (AR)]
+% \end{macrocode}
+%
+% Since we base on the \package{caption} package we load it here.
+% \begin{macrocode}
+\RequirePackage{caption}[2011/11/10] % we need at least v3.2e
% \end{macrocode}
%
% \bigskip
@@ -892,7 +1160,7 @@
% \end{macrocode}
% \begin{macrocode}
\newcommand*\bicaption@wh{%
- See the bicaption package documentation for explanation.}
+ See the `bicaption' package documentation for explanation.}
% \end{macrocode}
% \end{macro}
%
@@ -900,37 +1168,13 @@
% |\bicaption@Error|\marg{message}
% \begin{macrocode}
\newcommand*\bicaption@Error[1]{%
- \PackageError{bicaption}{#1}\bicaption@eh}
-%\let\bicaption@KV@err\bicaption@Error
+ \PackageError{bicaption}{#1}{\caption@@eh{bicaption}}}
% \end{macrocode}
% \begin{macrocode}
-\newcommand*\bicaption@eh{%
+\providecommand*\caption@@eh[1]{%
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{Compatibility check}
-%
-% \begin{macro}{\bicaption@CheckCompatibility}
-% \changes{v1.0}{2011/09/01}{Compatibility error added}
-% \changes{v1.2a}{2020/08/01}{Error text adapted to \package{caption} package~\version{4.0}}
-% \begin{macrocode}
-\newcommand*\bicaption@CheckCompatibility{%
-% \end{macrocode}
-% \begin{macrocode}
- \caption@ifcompatibility{%
- \bicaption@Error
- {This package does not work with\MessageBreak
- caption option `compatibility=v1'}%
- \endinput}{}}
-% \end{macrocode}
-% \begin{macrocode}
-\bicaption@CheckCompatibility
-\caption@AtBeginDocument{%
- \bicaption@CheckCompatibility
- \let\bicaption@CheckCompatibility\@undefined}
+ at the documentation of the `#1' package, especially the\MessageBreak
+ section about errors.\MessageBreak\@ehc}
% \end{macrocode}
% \end{macro}
%
@@ -976,6 +1220,12 @@
\DeclareCaptionOption{bi-separator}[1]{%
\caption@set{biseparator}{#1}}
% \end{macrocode}
+% \begin{macrocode}
+\providecommand*\caption@set[2]{%
+ \@ifundefined{caption@#1@#2}%
+ {\caption@Error{Undefined #1 `#2'}}%
+ {\expandafter\let\csname caption@#1\expandafter\endcsname\csname caption@#1@#2\endcsname}}
+% \end{macrocode}
%
% \begin{macro}{\DeclareBiCaptionSeparator}
% \changes{v1.3}{2020/10/25}{This macro added}
@@ -985,6 +1235,10 @@
\caption@decl{biseparator}{#1}{#2}}
\@onlypreamble\DeclareBiCaptionSeparator
% \end{macrocode}
+% \begin{macrocode}
+\providecommand*\caption@decl[2]{%
+ \global\long\expandafter\def\csname caption@#1@#2\endcsname}
+% \end{macrocode}
% \end{macro}
%
% There are four pre-defined separators, called `none',
@@ -998,7 +1252,9 @@
%
% The default separator usually maps to `none'.
% \begin{macrocode}
-\SetCaptionDefault{biseparator}{none}
+\caption@ifundefined\SetCaptionDefault
+ {\def\caption@biseparator@default{\caption@biseparator@none}}
+ {\SetCaptionDefault{biseparator}{none}}
% \end{macrocode}
%
% The option |lang=|\meta{language} will setup the language of the caption.
@@ -1013,8 +1269,9 @@
\caption@ifundefined\bicaption@language
\bicaption@language@setupkeys
\relax
- \def\bicaption@language{#1}%
- \let\bicaption@language@setoptions\@empty}
+ \edef\bicaption@language{#1}%
+ \let\bicaption@language@setoptions\@empty
+ \global\let\bicaption@language@value\bicaption@language}
% \end{macrocode}
% Map |language=| to |lang=|.
% \begin{macrocode}
@@ -1107,29 +1364,51 @@
% \end{macrocode}
%
% Set the language for the first caption.
+% (Since \version{1.5a} we do this |\At|\-|Begin|\-|Document| so
+% |\caption|\-|main|\-|language| could be defined \emph{after} loading the
+% \package{bicaption} package resp.~\package{babel} or \package{polyglossia}
+% could be loaded \emph{after} the \package{bicaption} package.)
% \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
+\AtBeginDocument{%
+ \ifcsname captionmainlanguage\endcsname
+ \bicaption@InfoNoLine{%
+ Main language is set to \captionmainlanguage}%
+ \else
+ \bicaption@setmainlanguage
+ \fi
+% \end{macrocode}
+% \begin{macrocode}
+ \ifcsname captionmainlanguage\endcsname
+ \captionsetup[bi-first]{lang=\captionmainlanguage}%
+ \else
+ \ifcsname bicaption@language@value\endcsname % option "lang=" was used
+ \expandafter\bicaption@Warning
+ \else
+ \expandafter\bicaption@Info
+ \fi
+ {Main language is not set}%
+ \fi}
% \end{macrocode}
+%
+% \begin{macro}{\bicaption@setmainlanguage}
+% \changes{v1.5a}{2011/08/31}{This macro added as encapsulation of setting \cs{captionmainlanguage}}
+% |\bicaption@setmainlanguage| is used to define
+% |\caption|\-|main|\-|language| if not already done.
+% \begin{macrocode}
+\newcommand*\bicaption@setmainlanguage{%
+ \ifcsname bbl@main@language\endcsname
+ \bicaption@InfoNoLine{%
+ babel found, main language is \bbl@main@language}%
+ \let\captionmainlanguage\bbl@main@language
+ \else\ifcsname xpg@main@language\endcsname
+ \bicaption@InfoNoLine{%
+ polyglossia found, main language is \xpg@main@language}%
+ \let\captionmainlanguage\xpg@main@language
+ \fi\fi}
+\@onlypreamble\bicaption@setmainlanguage
+% \end{macrocode}
+% \end{macro}
+%
% We use |\caption@Process|\-|Options| here to add the options to the `|bi-second|' option
% list instead of executing them immediately.
% \begin{macrocode}
@@ -1208,9 +1487,15 @@
% \end{macro}
%
% \begin{macro}{\caption@@make}
+% \changes{v1.4}{2020/12/25}{Fallback code of \cs{caption@@make@} added}
% We redefine |\caption@@make| (of the \package{caption} package kernel)
% so |\bi|\-|caption@@make| will be used for bilingual captions instead.
% \begin{macrocode}
+\caption@ifundefined\caption@@make@
+ {\let\caption@@make@\caption@@make}
+ {}
+% \end{macrocode}
+% \begin{macrocode}
\renewcommand\caption@@make[2]{%
\caption@ifundefined\bicaption@text
{\begingroup
@@ -1221,13 +1506,15 @@
\global\let\bicaption@text\@undefined}%
% \end{macrocode}
% \begin{macrocode}
- \caption@@make@epilogue}
+ \@nameuse{caption@@make@epilogue}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\bicaption@@make}
% \changes{v1.1}{2015/09/16}{\cs{bicaption@label} replaced by \cs{caption@thelabel}}
% \changes{v1.3}{2020/10/25}{Usage of \cs{caption@biseparator} added}
+% \changes{v1.4}{2020/12/25}{Definitions of \cs{bicaption@slc} and \cs{caption@setsinglelinecheck} added (fallback)}
+% \changes{v1.4a}{2020/12/26}{Clearance of \cs{caption@thelabel} replaced by \cs{bicaption@clrlabel}}
% |\bicaption@@make|\marg{text \#2}\marg{label}\marg{text \#1}\par
% Typeset both captions using the original version of \cs{caption@@make}.
% \begin{macrocode}
@@ -1241,8 +1528,8 @@
% \begin{macrocode}
\ifnum\bicaption@lang=0\relax
\bicaption@ifslc
- {\caption@slc{#2}{#3}{}{\caption@setsinglelinecheck0}%
- \caption@slc{#2}{#1}{}{\caption@setsinglelinecheck0}}%
+ {\bicaption@slc{#2}{#3}{}{\caption@setsinglelinecheck0}%
+ \bicaption@slc{#2}{#1}{}{\caption@setsinglelinecheck0}}%
{}%
\fi
% \end{macrocode}
@@ -1251,7 +1538,6 @@
% \begin{macrocode}
\ifnum\bicaption@lang=2\relax
\caption@thelabel
- \global\let\caption@thelabel\relax
\let\bicaption@tempa\relax
\else
\begingroup
@@ -1271,11 +1557,22 @@
\caption@@make@{#2}{#1}%
\endgroup
\fi
-}
+% \end{macrocode}
+% \begin{macrocode}
+ \global\bicaption@clrlabel}
% \end{macrocode}
% \begin{macrocode}
\newcommand*\bicaption@separator{\par}
% \end{macrocode}
+% \begin{macrocode}
+\caption@ifundefined\caption@@slc
+ {\newcommand\bicaption@slc{\caption@slc}}
+ {\newcommand\bicaption@slc[2]{\caption@@slc{#1}{#2}{\captionwidth}}}
+% \end{macrocode}
+% \begin{macrocode}
+\providecommand*\caption@setsinglelinecheck{%
+ \caption@set@bool\caption@ifslc}
+% \end{macrocode}
% \end{macro}
%
% \pagebreak[3]
@@ -1317,6 +1614,7 @@
% \begin{macro}{\@bicaption}
% \changes{v1.0}{2011/08/31}{Optional parameter \meta{list entry \#2} added}
% \changes{v1.1}{2015/09/16}{\cs{bicaption@getlabel} replaced by \cs{caption@getlabel}}
+% \changes{v1.4}{2020/12/25}{Usage of \cs{caption@getlabel} replaced by \cs{bicaption@getlabel}}
% |\@bicaption|\marg{cmd}*\oarg{entry \#1}\marg{text \#1}\oarg{entry \#2}\marg{text \#2}\ldots
% \begin{macrocode}
\newcommand*\@bicaption[1]{%
@@ -1336,7 +1634,7 @@
% \end{macrocode}
% \begin{macrocode}
\long\def\@@@@bicaption#1#2[#3]#4{%
- \caption@getlabel{#2}%
+ \bicaption@getlabel{#2}%
\bicaption@ifswap
{\bicaption@setup{#1}{#2}%
\bicaption@cmd[{#3}]{#4}}%
@@ -1348,63 +1646,109 @@
% \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{macro}{\bicaption@getlabel}
+% \changes{v1.0}{2011/09/03}{\cs{label} can have optional arguments now}
+% \changes{v1.4}{2020/12/25}{This macro re-added}
+% |\bicaption@getlabel|\marg{text}\\
+% gets the label command out of the given caption text and stores it to |\caption@the|\-|label|.
+% It uses |\caption@get|\-|label| for this purpose which interface unfortunately has changed over time.
+% (Changing the interface was a bad idea in the first place but now it is as it is).
% \begin{macrocode}
-\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}[]}
+\@ifundefined{caption@getlabel}{%
% \end{macrocode}
% \begin{macrocode}
-\long\def\LT@@@bicaption[#1]#2{%
- \caption@dblarg{\LT@@@@bicaption{#1}{#2}}}
+ \newcommand\bicaption@getlabel[1]{% caption3 < v1.7
+ \bicaption@@getlabel#1\label{}\@nil}
% \end{macrocode}
% \begin{macrocode}
-\long\def\LT@@@@bicaption#1#2[#3]#4{%
- \gdef\bicaption@LTsetup{%
- \caption@getlabel{#2}%
- \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}}}
+ \long\def\bicaption@@getlabel#1\label#2#3\@nil{%
+ \def\@tempa{#2}%
+ \ifx\@tempa\@empty
+ \let\caption@thelabel\relax
+ \else
+ \def\@tempb{*}%
+ \ifx\@tempa\@tempb
+ \def\caption@thelabel{\label*}%
+ \bicaption@@@getlabel#3\@nil
+ \else
+ \def\caption@thelabel{\label}%
+ \bicaption@@@getlabel{#2}#3\@nil
+ \fi
+ \fi}
% \end{macrocode}
% \begin{macrocode}
-\let\bicaption@LTsetup\relax
-\let\bicaption@LT@setup\relax
+ \long\def\bicaption@@@getlabel#1#2\@nil{%
+ \def\@tempa{#1}%
+ \def\@tempb{[}%
+ \ifx\@tempa\@tempb
+ \bicaption@@@@getlabel#1#2\@nil
+ \else
+ \l@addto@macro\caption@thelabel{{#1}}%
+ \fi}
+% \end{macrocode}
+% \begin{macrocode}
+ \long\def\bicaption@@@@getlabel[#1]#2\@nil{%
+ \l@addto@macro\caption@thelabel{[{#1}]}%
+ \bicaption@@@getlabel#2\@nil}
+% \end{macrocode}
+% \begin{macrocode}
+}{\@ifundefined{caption@@@@getlabel}{%
+% \end{macrocode}
+% \begin{macrocode}
+ \newcommand\bicaption@getlabel[1]{% caption3 >= v1.7
+ \caption@getlabel#1\label{}\@nil}
+% \end{macrocode}
+% \begin{macrocode}
+}{%
+% \end{macrocode}
+% \begin{macrocode}
+ \newcommand*\bicaption@getlabel{% caption3 >= v2.0
+ \caption@getlabel}
+% \end{macrocode}
+% \begin{macrocode}
+}}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\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{macro}{\bicaption@clrlabel}
+% \changes{v1.4a}{2020/12/26}{This macro added}
+% |\bicaption@clrlabel|\\
+% resets |\caption@the|\-|label| to |\relax|.
+% \begin{macrocode}
+\@ifundefined{caption@clrlabel}{%
+% \end{macrocode}
+% \begin{macrocode}
+ \newcommand*\bicaption@clrlabel{\let\caption@thelabel\relax} % caption3 < v2.3
+% \end{macrocode}
% \begin{macrocode}
-\g@addto@macro\caption@LT@setup{%
- \bicaption@LTsetup
- \global\let\bicaption@LTsetup\relax}
+}{%
+% \end{macrocode}
+% \begin{macrocode}
+ \newcommand*\bicaption@clrlabel{\caption@clrlabel} % caption3 >= v2.3
+% \end{macrocode}
+% \begin{macrocode}
+}
% \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
+% |\bicaption@setup|\marg{list-entry}\marg{text}\\
+% initiates the bilingual caption typesetting by storing the extra texts into
% |\bi|\-|caption@l|\-|entry| and |\bi|\-|caption@text|.
% \begin{macrocode}
\newcommand\bicaption@setup[2]{%
\def\bicaption@lentry{#1}%
- \def\bicaption@text{\ignorespaces#2}}
+ \def\bicaption@text{\ignorespaces #2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bicaption@clear}
+% |\bicaption@clear|\\
+% clears the stuff stored by |\bicaption@setup|.
+% \begin{macrocode}
+\newcommand*\bicaption@clear{%
+ \let\bicaption@lentry\@undefined
+ \let\bicaption@text\@undefined}
% \end{macrocode}
% \end{macro}
%
@@ -1437,11 +1781,117 @@
%
% \changes{v1.1}{2013/05/02}{Definition of \cs{bicaption@listof} removed}
%
+% \subsection{Support of the listings package}
+% \changes{v1.5}{2021/01/04}{Support of the \package{listings} package added}
+%
+% \begin{macrocode}
+\caption@IfPackageLoaded{listings}[2004/02/13 v1.2]{%
+% \end{macrocode}
+%
+% If the \package{listings} package is loaded, we define the new options `caption1' and `caption2'.
+% \begin{macrocode}
+ \lst@Key{caption1}\relax{%
+ \lstKV@OptArg[{#1}]{#1}{%
+ \bicaption@ifswap
+ {\bicaption@setup{##1}{##2}}%
+ {\def\lst@@caption{##1}\def\lst@caption{##2}}}%
+ \let\lst@title\@empty}%
+% \end{macrocode}
+% \begin{macrocode}
+ \lst@Key{caption2}\relax{%
+ \lstKV@OptArg[{#1}]{#1}{%
+ \bicaption@ifswap
+ {\def\lst@@caption{##1}\def\lst@caption{##2}}%
+ {\bicaption@setup{##1}{##2}}}%
+ \let\lst@title\@empty}%
+% \end{macrocode}
+% \begin{macrocode}
+ \lst@AddToHookExe{TextStyle}{%
+ \bicaption@clear}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+}{}
+% \end{macrocode}
+%
+% \subsection{Support of the longtable package}
+%
+% \begin{macro}{\LT@bicaption}
+% \changes{v1.1}{2016/01/31}{Adaption to \package{longtable} package added}
+% Same as |\@bicaption| but for |longtable| (offered by the \package{longtable} package).
+% |\bi|\-|caption@LT|\-|setup| will be executed later on, inside |\LT@make|\-|caption|
+% 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{%
+ \bicaption@getlabel{#2}%
+ \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}
+% \changes{v1.4}{2020/12/25}{Fallback code for \package{caption} package \version{3.2} added}
+% Execute the stuff defined by \cs{LT@bicaption} to prepare the typesetting
+% of the \package{longtable} bilingual caption.
+% \begin{macrocode}
+\caption@ifundefined\caption@LT@setup{%
+ % Fallback code for caption v3.2
+ \captionsetup*[longtable]{bicaption-lt-setup}
+ \DeclareCaptionOptionNoValue{bicaption-lt-setup}{%
+ \bicaption@LTsetup
+ \global\let\bicaption@LTsetup\relax}
+}{%
+ \g@addto@macro\caption@LT@setup{%
+ \bicaption@LTsetup
+ \global\let\bicaption@LTsetup\relax}
+}
+% \end{macrocode}
+% \end{macro}
+%
% \begin{thebibliography}{9}
% \bibitem{TLC2}
% Frank Mittelbach and Michel Goossens:\\
-% \newblock {\em The {\LaTeX} Companion (2nd.~Ed.)},
+% \newblock {\em The {\LaTeX} Companion (2nd.~Ed.)},\\
% \newblock Addison-Wesley, 2004.
+%
+% \bibitem{listings}
+% Carsten Heinz \& Brooks Moses:\\
+% \href{http://www.ctan.org/pkg/listings}%
+% {\emph{The Listings Package}},\\
+% 2007/02/22
+%
+% \bibitem{longtable}
+% David Carlisle:\\
+% \href{http://www.ctan.org/pkg/longtable}%
+% {\emph{The longtable package}},\\
+% 2004/02/01
% \end{thebibliography}
%
% \iffalse