summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/cascade/cascade.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/cascade/cascade.dtx')
-rw-r--r--macros/latex/contrib/cascade/cascade.dtx506
1 files changed, 370 insertions, 136 deletions
diff --git a/macros/latex/contrib/cascade/cascade.dtx b/macros/latex/contrib/cascade/cascade.dtx
index a69a812212..33aaa5b8a9 100644
--- a/macros/latex/contrib/cascade/cascade.dtx
+++ b/macros/latex/contrib/cascade/cascade.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2018 by F. Pantigny
+% Copyright (C) 2018-2020 by F. Pantigny
% -----------------------------------
%
% This file may be distributed and/or modified under the
@@ -15,8 +15,8 @@
%
% \fi
% \iffalse
-\def\myfileversion{1.01}
-\def\myfiledate{2018/07/12}
+\def\myfileversion{1.1}
+\def\myfiledate{2020/07/05}
%
%
%<*batchfile>
@@ -26,7 +26,7 @@
\usedir{tex/latex/cascade}
\preamble
-Copyright (C) 2018 by F. Pantigny
+Copyright (C) 2018-2020 by F. Pantigny
-----------------------------------
This file may be distributed and/or modified under the
@@ -60,21 +60,53 @@ version 2005/12/01 or later.
\fvset{commandchars=\~\#\@,formatcom={\color{gray}}}
\parindent 0pt
\skip\footins = 2\bigskipamount
-\DisableCrossrefs
+
+
+\EnableCrossrefs
+\makeatletter
+\ExplSyntaxOn
+\DoNotIndex{\begin,\end}
+\DoNotIndex{\c@iRow,\c@jCol,\theiRow,\thejCol}
+\DoNotIndex{\pgfpicture,\endpgfpicture,\tikzpicture,\endtikzpicture}
+\DoNotIndex{\pgfpoint,\pgfnode,\pgfnodealias,\pgfcoordinate}
+\DoNotIndex{\pgf@x,\pgf@y}
+\DoNotIndex{\int_add:Nn,\int_case:nnTF,\int_compare:nNnTF,\int_compare:nTF,
+ \int_compare_p:nNn,\int_decr:N,\int_eval:n,\int_add:Nn,\int_gdecr:N,\int_gincr:N
+ \int_gset:Nn,\int_gset_eq:NN,\int_gzero:N,\int_gzero_new:N,\int_if_odd:nTF,
+ \int_max:nn,\int_new:N,\int_set:Nn,\int_set_eq:NN,\int_step_inline:nnn,
+ \int_step_variable:nNn,\int_step_variable:nnNn,\int_sub:Nn,\int_use:N,\int_zero:N,
+ \int_zero_new:N,\g_tmpa_int,\l_tmpa_int,\l_tmpb_int
+}
+\DoNotIndex{\dim_abs:n,\dim_add:Nn,\dim_compare:nNnTF,\dim_compare_p:nNn,
+\dim_const:Nn,\dim_eval:n,\dim_gadd:Nn,\dim_gset:Nn,\dim_gset_eq:NN,
+\dim_gset:Nn,\dim_gset_eq:NN,\dim_gsub:Nn,\dim_gzero_new:N,\dim_max:nn,
+\dim_min:nn,\dim_new:N,\dim_ration:nn,\dim_set:Nn,\dim_set_eq:NN,\dim_sub:Nn,
+\dim_use:N,\dim_zero:N,\dim_zero_new:N,\g_tmpa_dim,\l_tmpa_dim,\l_tmpb_dim,
+\c_zero_dim}
+\DoNotIndex{\cs_new_protected:Npn,\cs_new:Npn,\cs_set_eq:NN,
+\cs_set_protected:Npn}
+\DoNotIndex{\bool_if:NTF,\bool_new:N,\bool_set_false:N,\bool_set_true:N,\l_tmpa_bool}
+\DoNotIndex{\group_begin:,\group_end:,\c_math_toggle_token}
+\DoNotIndex{\tl_set:Nn,\l_tmpa_tl}
+\ExplSyntaxOff
+\makeatother
+
+
\begin{document}
\DocInput{cascade.dtx}
\end{document}
%</driver>
% \fi
-% \title{The package \pkg{cascade}\thanks{This document corresponds to the version~\myfileversion\space of
-% \pkg{cascade}, at the date of~\myfiledate.}}
+% \title{The package \pkg{cascade}\thanks{This document corresponds to the
+% version~\myfileversion\space of \pkg{cascade}, at the date of~\myfiledate.}}
% \author{F. Pantigny \\ \texttt{fpantigny@wanadoo.fr}}
%
% \maketitle
%
% \begin{abstract}
-% The LaTeX package \pkg{cascade} provides a command |\Cascade| to do constructions to present mathematical
-% demonstrations with successive braces for the deductions.
+% The LaTeX package \pkg{cascade} provides a command |\Cascade| to do
+% constructions to present mathematical demonstrations with successive braces
+% for the deductions.
% \end{abstract}
%
%
@@ -82,8 +114,9 @@ version 2005/12/01 or later.
% \vspace{1cm}
% \section{Presentation}
%
-% The package \pkg{cascade} gives a command |\Cascade| which allows constructions like the following where the size
-% of the right brace is computed on only a part of the LaTeX elements composed on the left.
+% The package \pkg{cascade} provides a command |\Cascade| which allows
+% constructions like the following where the size of the right brace is computed
+% on only a part of the LaTeX elements composed on the left.
% \begin{center}
% \Cascade{$\det(A) = \begin{vmatrix}3&4\\ -1&7\end{vmatrix}\neq 0$}%
% {and, therefore, $A$ is inversible}%
@@ -122,12 +155,15 @@ version 2005/12/01 or later.
% \end{center}
%
% \interitem
-% For the lisibility of such constructions, a simplified version of |\Cascade| is available, named |\ShortCascade|.
+% For the lisibility of such constructions, a simplified version of |\Cascade|
+% is available, named |\ShortCascade|.
%
-% The code |\ShortCascade{X}{Y}| is merely a shortcut for the code |\Cascade{}{X}{}{Y}|.
+% The code |\ShortCascade{X}{Y}| is merely a shortcut for the code
+% |\Cascade{}{X}{}{Y}|.
%
% \medskip
-% The preceding example can be coded with two commands |\ShortCascade| and an encompassing command |\Cascade| :
+% The preceding example can be coded with two commands |\ShortCascade| and an
+% encompassing command |\Cascade|:
% \begin{Verbatim}
% ~emphase#\Cascade@{~emphase#\ShortCascade@{$(BH) \perp (AC)$}
% {$(OC) \perp (AC)$}}
@@ -140,17 +176,51 @@ version 2005/12/01 or later.
%
%
% \bigskip
-% \section{The options}
+% \section{The option t}
+%
+% With the option |t| in the encompassing command |\Cascade|, a whole strucutre
+% of nested commands |\Cascade| is aligned on the top line.
+%
+% When the key |t| is used, if we wish to add some text after the structure, we
+% have to put that text between angle brackets in order to have that text
+% aligned with the last brace.
+%
+% \begin{Verbatim}
+% \begin{enumerate}
+% \item \Cascade~emphase#[t]@{\ShortCascade{$(BH) \perp (AC)$}{$(OC) \perp (AC)$}}
+% {hence\enskip $(BH) \parallel (OC)$}
+% {\Cascade{}{$(CH) \perp (AB)$}{}{$(OB) \perp (AB)$}}
+% {hence\enskip $(CH) \parallel (OB)$}
+% ~emphase#<hence $(OBHC)$ is a parallelogram>@
+% \end{enumerate}
+% \end{Verbatim}
+%
+%
+% \begin{enumerate}
+% \item \Cascade[t]{\ShortCascade{$(BH) \perp (AC)$}{$(OC) \perp (AC)$}}
+% {hence\enskip $(BH) \parallel (OC)$}
+% {\Cascade{}{$(CH) \perp (AB)$}{}{$(OB) \perp (AB)$}}
+% {hence\enskip $(CH) \parallel (OB)$}
+% <hence $(OBHC)$ is a parallelogram>
+% \end{enumerate}
+%
+%
+%
+% \bigskip
+% \section{Other options}
%
% \begin{itemize}
-% \item The option |space-between| is a TeX dimension described on the following figure. Its default value is
-% $0.5$~em. It applies to the current command |\Cascade| but also to the possible nested commands.
+% \item The option |space-between| is a TeX dimension described on the following
+% figure. Its initial value is $0.5$~em. It applies to the current command
+% |\Cascade| but also to the possible nested commands.
%
-% \item The option |interline| can be used to \emph{increase} the ``interline'' showed in the following picture.
-% The default value of |interline| is $0$~pt and applies only to the current command |\Cascade|.
+% \item The option |interline| can be used to \emph{increase} the ``interline''
+% showed in the following picture. The initial value of |interline| is $0$~pt
+% and applies only to the current command |\Cascade|.
%
-% \item The option |interline-all| changes the default value of |interline| used by the current command |Cascade|
-% and all the possible nested commands |\Cascade|.
+% \item The option |interline-all| changes the default value of |interline| used
+% by the current command |\Cascade| and all the possible nested commands
+% |\Cascade|.
% \end{itemize}
%
% \vspace{1cm}
@@ -164,8 +234,6 @@ version 2005/12/01 or later.
% {\fbox{\vbox{\hbox{\tikz[remember picture] \coordinate (four) at (0,0) ;}%
% \hbox to 2.5cm{\vrule height 15 pt depth 14 pt width 0pt\hfil \texttt{\#3}\hfil}}}}%
% {\fbox{\hbox to 1.7cm{\vrule height 12 pt depth 5 pt width 0pt\hfil \texttt{\#4}\hfil}}}
-% \end{center}
-%
% \begin{tikzpicture}[remember picture,overlay,blue]
% \draw (one) to ++(0,1cm) coordinate (A) to ++(0,2mm) ;
% \draw (two) to ++(0,1cm) coordinate (B) to ++(0,2mm) ;
@@ -180,6 +248,7 @@ version 2005/12/01 or later.
% \draw[<-] (D) -- ++(0,-1mm) ;
% \path ($(C)!0.5!(D)$) node [left=2mm] {the ``interline''} ;
% \end{tikzpicture}
+% \end{center}
%
% \begin{Verbatim}
% \Cascade[~emphase#interline=4mm@]{\ShortCascade{A}{B}}{E}{\ShortCascade{C}{D}}{F} G
@@ -199,15 +268,17 @@ version 2005/12/01 or later.
% \end{center}
%
% \interitem
-% The options can also be given at the document level with the command |\CascadeOptions|. In this case, the scope
-% of the declarations is the current TeX group (these declarations are ``semi-global'').
+% The options can also be given at the document level with the command
+% |\CascadeOptions|. In this case, the scope of the declarations is the current
+% TeX group (these declarations are ``semi-global'').
%
%
% \bigskip
% \section{Technical remark}
%
-% The package |\Cascade| is designed to give by default results similar to the those given by the environments of
-% \pkg{amsmath} --- and \pkg{mathtools} --- especially |{aligned}|.
+% The package |\Cascade| is designed to provide by default results similar to the
+% those given by the environments of \pkg{amsmath} --- and \pkg{mathtools} ---
+% especially |{aligned}|.
%
% \bigskip
% \begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -229,8 +300,9 @@ version 2005/12/01 or later.
% \ShortCascade{$\displaystyle A = \sqrt{a^2+b^2}$}{$B = \dfrac{ax+b}{cx+d}$}
%
% \interitem
-% The package \pkg{cascade} constructs the braces with the classical pair |\left|-|\right| of TeX. However, the
-% extensible delimiters, in TeX, cannot take all sizes. We give, in the following example, the braces obtained when
+% The package \pkg{cascade} constructs the braces with the classical pair
+% |\left|-|\right| of TeX. However, the extensible delimiters, in TeX, cannot
+% take all sizes. We give, in the following example, the braces obtained when
% surrounding vertical rules from $6$~mm to $17$~mm (the code is in |expl3|).
%
% \begin{Verbatim}
@@ -269,20 +341,26 @@ version 2005/12/01 or later.
%% The following macro is the same as the macro of amsmath
% \fi
% \DescribeMacro{\spread@equation}
-% We will use the command |\spread@equation| of \pkg{amsmath} to increase the interline in the commands |\Cascade|.
-% When used, this command becomes no-op (in the current TeX group).
+% We will use the command |\spread@equation| of \pkg{amsmath} to increase the
+% interline in the commands |\Cascade|. When used, this command becomes no-op
+% (in the current TeX group).
%
-% Nevertheless, we want the extension \pkg{cascade} available without \pkg{amsmath}. That's why we give a
-% definition of |\spread@equation| (this definition will be loaded only if \pkg{amsmath} --- or \pkg{mathtools} --- has
+% Nevertheless, we want the extension \pkg{cascade} available without
+% \pkg{amsmath}. That's why we give a definition of |\spread@equation| (this
+% definition will be loaded only if \pkg{amsmath} --- or \pkg{mathtools} --- has
% not been loaded yet).
% \begin{macrocode}
\cs_if_free:NT \spread@equation
- {\cs_set_protected:Npn \spread@equation
- {\openup\jot
- \cs_set_protected:Npn \spread@equation {}}}
+ {
+ \cs_set_protected:Npn \spread@equation
+ {
+ \openup \jot
+ \cs_set_protected:Npn \spread@equation { }
+ }
+ }
% \end{macrocode}
-% Don't put |\cs_set_eq:NN \spread@equation \prog_do_nothing:| in the last line because this would raise errors
-% with nested environments.
+% Don't put |\cs_set_eq:NN \spread@equation \prog_do_nothing:| in the last line
+% because this would raise errors with nested environments.
%
%
% \iffalse
@@ -290,28 +368,37 @@ version 2005/12/01 or later.
%% The following registers will be used for the options.
% \fi
% \interitem
-% The dimension |\l_@@_interline_dim| will be the value of the vertical space added between the two boxes connected
-% by the brace.
+% The dimension |\l_@@_interline_dim| will be the value of the vertical space
+% added between the two boxes connected by the brace.
% \begin{macrocode}
\dim_new:N \l_@@_interline_dim
% \end{macrocode}
%
-% \medskip
-% The dimension |\l_@@_interline_all_dim| is the default value of |\l_@@_interline_dim|. This default value can be
-% modified with the option |interline-all|. Therefore, when modified in the options of a command |\Cascade|, this
-% value will affect all the possible nested commands.
+% \medskip
+% The dimension |\l_@@_interline_all_dim| is the default value of
+% |\l_@@_interline_dim|. This default value can be modified with the option
+% |interline-all|. Therefore, when modified in the options of a command
+% |\Cascade|, this value will affect all the possible nested commands.
% \begin{macrocode}
\dim_new:N \l_@@_interline_all_dim
% \end{macrocode}
%
% \medskip
-% The dimension |\l_@@_space_between_dim| is the horizontal space inserted between the two elements of the same row
-% of the construction.
+% The dimension |\l_@@_space_between_dim| is the horizontal space inserted
+% between the two elements of the same row of the construction.
% \begin{macrocode}
\dim_new:N \l_@@_space_between_dim
-\dim_set:Nn \l_@@_space_between_dim {0.5 em}
+\dim_set:Nn \l_@@_space_between_dim { 0.5 em }
% \end{macrocode}
%
+% \medskip
+% \begin{macrocode}
+\bool_new:N \l_@@_t_bool
+\bool_new:N \l_@@_main_command_bool
+\bool_new:N \l_@@_nested_command_bool
+\bool_new:N \l_@@_first_argument_bool
+% \end{macrocode}
+%
% \interitem
% \iffalse
%%
@@ -319,29 +406,42 @@ version 2005/12/01 or later.
% \fi
% The set of keys |cascade/command| will be used for the commands |\Cascade|.
% \begin{macrocode}
-\keys_define:nn {cascade/command}
+\keys_define:nn { cascade / command }
{
% \end{macrocode}
-% The option |interline| is the vertical space added between the two items connected by a~brace.
+% The key |t| means that the command |\Cascade| will be aligned upwards.
+% \begin{macrocode}
+ t .code:n =
+ \bool_if:NTF \l_@@_t_bool
+ { \msg_error:nn { cascade } { t~option~already~set } }
+ { \bool_set_true:N \l_@@_t_bool } ,
+ t .value_forbidden:n = true ,
+% \end{macrocode}
+% The option |interline| is the vertical space added between the two items
+% connected by a~brace.
% \begin{macrocode}
- interline .dim_set:N = \l_@@_interline_dim,
- interline .value_required:n = true ,
+ interline .dim_set:N = \l_@@_interline_dim,
+ interline .value_required:n = true ,
% \end{macrocode}
%
-% The option |interline-all| will change the value of |interline| for all the commands |\Cascade|, even the nested
-% commands.
+% The option |interline-all| will change the value of |interline| for all the
+% commands |\Cascade|, even the nested commands.
% \begin{macrocode}
- interline-all .code:n = { \dim_set:Nn \l_@@_interline_all_dim {#1}
- \dim_set:Nn \l_@@_interline_dim {#1} },
- interline-all .value_required:n = true,
+ interline-all .code:n =
+ {
+ \dim_set:Nn \l_@@_interline_all_dim { #1 }
+ \dim_set:Nn \l_@@_interline_dim { #1 }
+ } ,
+ interline-all .value_required:n = true ,
% \end{macrocode}
%
% \medskip
-% The option |space-between| is the horizontal space inserted between the two elements of the same row
-% of the construction.
+% The option |space-between| is the horizontal space inserted between the two
+% elements of the same row of the construction.
% \begin{macrocode}
- space-between .dim_set:N = \l_@@_space_between_dim,
- space-between .value_required:n = true}
+ space-between .dim_set:N = \l_@@_space_between_dim ,
+ space-between .value_required:n = true
+ }
% \end{macrocode}
%
% \iffalse
@@ -349,24 +449,27 @@ version 2005/12/01 or later.
%% This set of options will be used by \CascadeOptions
% \fi
% \medskip
-% The set of keys |cascade/global| will be used for the command |\CascadeOptions| (which fixes the options at a
-% ``global'' level).
+% The set of keys |cascade/global| will be used for the command
+% |\CascadeOptions| (which fixes the options at a ``global'' level).
%
% \begin{macrocode}
-\keys_define:nn {cascade/global}
- {interline-all .dim_set:N = \l_@@_interline_all_dim,
- interline-all .value_required:n = true,
- space-between .dim_set:N = \l_@@_space_between_dim,
- space-between .value_required:n = true}
+\keys_define:nn { cascade / global }
+ {
+ interline-all .dim_set:N = \l_@@_interline_all_dim ,
+ interline-all .value_required:n = true ,
+ space-between .dim_set:N = \l_@@_space_between_dim ,
+ space-between .value_required:n = true
+ }
% \end{macrocode}
%
% \medskip
% \DescribeMacro{\CascadeOptions}
-% The command |\CascadeOptions| is the command to set the options of the \pkg{cascade} at the document level (these
-% options are set in a local way in the sense of the TeX groups).
+% The command |\CascadeOptions| is the command to set the options of the
+% \pkg{cascade} at the document level (these options are set in a local way in
+% the sense of the TeX groups).
% \begin{macrocode}
-\NewDocumentCommand \CascadeOptions {m}
- {\keys_set:nn {cascade/global} {#1}}
+\NewDocumentCommand \CascadeOptions { m }
+ { \keys_set:nn { cascade / global } { #1 } }
% \end{macrocode}
%
% \iffalse
@@ -378,101 +481,232 @@ version 2005/12/01 or later.
% The command |\Cascade| is the main command of this package.
%
% \begin{macrocode}
-\NewDocumentCommand \Cascade {O{} mmmm}
- { \if_mode_math:
- \msg_error:nn {cascade} {Cascade~in~math~mode}
- \fi:
- \mode_leave_vertical:
- \group_begin:
- \spread@equation
- \dim_set_eq:NN \l_@@_interline_dim \l_@@_interline_all_dim
- \keys_set:nn {cascade/command} {#1}
- \box_clear_new:N \l_@@_box_one
- \box_clear_new:N \l_@@_box_two
- \box_clear_new:N \l_@@_box_three
- \box_clear_new:N \l_@@_box_four
- \hbox_set:Nn \l_@@_box_one {#2}
- \hbox_set:Nn \l_@@_box_two {#3}
- \hbox_set:Nn \l_@@_box_three {#4}
- \hbox_set:Nn \l_@@_box_four {#5}
+\NewDocumentCommand \Cascade { O { } m m m m D < > { } }
+ {
+ \if_mode_math:
+ \msg_error:nn { cascade } { Cascade~in~math~mode }
+ \fi:
+ \mode_leave_vertical:
+% \end{macrocode}
+% The dimension |\g_@@_yoffset_dim| will be used by the option~|t|.
+% \begin{macrocode}
+ \bool_if:NF \l_@@_nested_command_bool
+ {
+ \dim_gzero_new:N \g_@@_yoffset_dim
+ \bool_set_true:N \l_@@_first_argument_bool
+ }
+ \group_begin:
+
+ \spread@equation
+ \dim_set_eq:NN \l_@@_interline_dim \l_@@_interline_all_dim
+ \keys_set:nn { cascade / command } { #1 }
+ \box_clear_new:N \l_@@_box_one
+ \box_clear_new:N \l_@@_box_two
+ \box_clear_new:N \l_@@_box_three
+ \box_clear_new:N \l_@@_box_four
+ \hbox_set:Nn \l_@@_box_one
+ {
+ \bool_set_true:N \l_@@_first_argument_bool
+ \bool_set_true:N \l_@@_nested_command_bool
+ #2
+ }
+ \hbox_set:Nn \l_@@_box_two { #3 }
+ \hbox_set:Nn \l_@@_box_three
+ {
+ \bool_set_false:N \l_@@_first_argument_bool
+ \bool_set_true:N \l_@@_nested_command_bool
+ #4
+ }
+ \hbox_set:Nn \l_@@_box_four { #5 }
% \end{macrocode}
%
% \medskip
-% The dimension |\l_@@_top_dim| is the space that we will have to add before the main construction to make up for the
-% ``|\smash[t]|'' of the box |#1|.
+% The dimension |\l_@@_top_dim| is the space that we will have to add before the
+% main construction to make up for the ``|\smash[t]|'' of the box |#1|.
% \begin{macrocode}
- \dim_zero_new:N \l_@@_top_dim
- \dim_set:Nn \l_@@_top_dim
- {\dim_max:nn \c_zero_dim
- {\box_ht:N \l_@@_box_one - \box_ht:N \l_@@_box_two}}
+ \dim_zero_new:N \l_@@_top_dim
+ \dim_set:Nn \l_@@_top_dim
+ {
+ \dim_max:nn
+ \c_zero_dim
+ { \box_ht:N \l_@@_box_one - \box_ht:N \l_@@_box_two }
+ }
% \end{macrocode}
-% The dimension |\l_@@_bottom_dim| is the space that we will have to add after the main construction to make up for
-% the ``|\smash[b]|'' of the box |#3|.
+% The dimension |\l_@@_bottom_dim| is the space that we will have to add after
+% the main construction to make up for the ``|\smash[b]|'' of the box |#3|.
% \begin{macrocode}
- \dim_zero_new:N \l_@@_bottom_dim
- \dim_set:Nn \l_@@_bottom_dim
- {\dim_max:nn \c_zero_dim
- {\box_dp:N \l_@@_box_three - \box_dp:N \l_@@_box_four}}
+ \dim_zero_new:N \l_@@_bottom_dim
+ \dim_set:Nn \l_@@_bottom_dim
+ {
+ \dim_max:nn
+ \c_zero_dim
+ { \box_dp:N \l_@@_box_three - \box_dp:N \l_@@_box_four }
+ }
% \end{macrocode}
%
% \medskip
% We do the ``|\smash[t]|'' of box |#1| and the ``|\smash[b]|'' of box |#3|.
% \begin{macrocode}
- \box_set_ht:Nn \l_@@_box_one \c_zero_dim
- \box_set_dp:Nn \l_@@_box_three \c_zero_dim
+ \box_set_ht:Nn \l_@@_box_one \c_zero_dim
+ \box_set_dp:Nn \l_@@_box_three \c_zero_dim
% \end{macrocode}
%
% \medskip
% We can now construct the box.
% \begin{macrocode}
- \vbox:n
- {\skip_vertical:N \l_@@_top_dim
- \vbox_top:n
- {\hbox:n
- {$\left.
- \vcenter {\halign{\hfil##\cr
- \hbox:n{\tl_if_empty:nF {#2}
- {\box_use_drop:N \l_@@_box_one
- \skip_horizontal:n \l_@@_space_between_dim}
- \box_use_drop:N \l_@@_box_two \strut} \cr
- \noalign{\skip_vertical:n \l_@@_interline_dim}
- \hbox:n{\tl_if_empty:nF {#4}
- {\box_use_drop:N \l_@@_box_three
- \skip_horizontal:n \l_@@_space_between_dim}
- \box_use_drop:N \l_@@_box_four \strut} \cr
- }
- }
- \right\}$
+ \vbox_set:Nn \l_tmpa_box
+ {
+ \skip_vertical:N \l_@@_top_dim
+ \vbox_top:n
+ {
+ \@@_the_vcenter:nn { #2 } { #4 }
+% \end{macrocode}
+% We update |\g_@@_yoffset_dim|.
+% \begin{macrocode}
+ \bool_if:NT \l_@@_first_argument_bool
+ {
+ \dim_set:Nn \l_tmpa_dim
+ { \box_ht:N \l_tmpb_box + \box_dp:N \l_tmpb_box }
+ \l_tmpa_dim = 0.5\l_tmpa_dim
+ \dim_add:Nn \l_tmpa_dim { \the \fontdimen 22 \textfont2 }
+ \dim_sub:Nn \l_tmpa_dim
+ { \dim_max:nn { \box_ht:N \l_@@_box_two } { \box_ht:N \strutbox } }
+ \dim_gadd:Nn \g_@@_yoffset_dim \l_tmpa_dim
+ }
+% \end{macrocode}
+% \begin{macrocode}
+ \hbox:n
+ {
+ \c_math_toggle_token
+ \left .
+ \box_use_drop:N \l_tmpb_box
+ \right \}
+ \c_math_toggle_token
+ \bool_if:NT \l_@@_t_bool
+ {
+ \bool_if:NF \l_@@_nested_command_bool
+ {
+ \tl_if_empty:nF { #6 }
+ {
+ \skip_horizontal:n \l_@@_space_between_dim
+ #6
+ }
+ }
+ }
+ }
+ \skip_vertical:N \l_@@_bottom_dim
}
- \skip_vertical:N \l_@@_bottom_dim
- }
}
- \group_end:
-}
+ \bool_if:NTF \l_@@_nested_command_bool
+ { \box_use_drop:N \l_tmpa_box }
+ {
+% \end{macrocode}
+% We are in the main command |\Cascade| and, if the option~|t| is in force, we
+% have now to take into account that key.
+% \begin{macrocode}
+ \bool_if:NTF \l_@@_t_bool
+ { \box_move_down:nn \g_@@_yoffset_dim { \box_use:N \l_tmpa_box } }
+ { \box_use_drop:N \l_tmpa_box }
+ }
+ \group_end:
+ }
% \end{macrocode}
%
-%
% \bigskip
+% The following macro is only for the lisibility of the code.
% \begin{macrocode}
-\msg_new:nnn {cascade}
- {Cascade~in~math~mode}
- {The~commands~\token_to_str:N \Cascade\
- and~\token_to_str:N \ShortCascade\
- should~be~used~in~text~mode~only.~However,~you~can~
- go~on~for~this~time.}
+\cs_new_protected:Npn \@@_the_vcenter:nn #1 #2
+ {
+ \hbox_set:Nn \l_tmpb_box
+ {
+ \c_math_toggle_token
+ \vcenter
+ {
+ \halign
+ {
+ \hfil ## \cr
+ \hbox:n
+ {
+ \tl_if_empty:nF { #1 }
+ {
+ \box_use_drop:N \l_@@_box_one
+ \skip_horizontal:n \l_@@_space_between_dim
+ }
+ \box_use:N \l_@@_box_two
+ \strut
+ }
+ \cr
+ \noalign { \skip_vertical:n \l_@@_interline_dim }
+ \hbox:n
+ {
+ \tl_if_empty:nF { #2 }
+ {
+ \box_use_drop:N \l_@@_box_three
+ \skip_horizontal:n \l_@@_space_between_dim
+ }
+ \box_use_drop:N \l_@@_box_four
+ \strut
+ }
+ \cr
+ }
+ }
+ \c_math_toggle_token
+ }
+ }
+% \end{macrocode}
+%
+% \bigskip
+% \begin{macrocode}
+\msg_new:nnn
+ { cascade }
+ { Cascade~in~math~mode }
+ {
+ The~commands~\token_to_str:N \Cascade\
+ and~\token_to_str:N \ShortCascade\
+ should~be~used~in~text~mode~only.~However,~you~can~
+ go~on~for~this~time.
+ }
% \end{macrocode}
%
+% \begin{macrocode}
+\msg_new:nnn
+ { cascade }
+ { t~option~already~set }
+ {
+ You~can't~use~the~key~'t'~here~because~it~has~been~set~
+ in~an~encompassing~command.~If~you~go~on,~this~key~will~be~
+ ignored.
+ }
+% \end{macrocode}
+%
% \bigskip
% \DescribeMacro{\ShortCascade}
-% The command |\ShortCascade| is a version simplified of |\Cascade| with only two arguments.
+% The command |\ShortCascade| is a simplified version of |\Cascade| with only
+% two arguments.
% \begin{macrocode}
-\NewDocumentCommand \ShortCascade {O{}mm}
- {\Cascade[#1]{}{#2}{}{#3}}
+\NewDocumentCommand \ShortCascade { O { } m m }
+ { \Cascade [ #1 ] { } { #2 } { } { #3 } }
% \end{macrocode}
-% \endinput
%
+% \vspace{1cm}
+% \section{History}
+%
+% \subsection*{Changes between versions 1.0 and 1.1}
+%
+% New option |t|.
+%
+%
+%
+% \PrintIndex
+% \tableofcontents
+%
+% \end{document}
+%
% Local Variables:
-% TeX-fold-mode: nil
+% TeX-fold-mode: t
+% TeX-fold-preserve-comments: nil
+% flyspell-mode: nil
+% fill-column: 80
% End: