summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/conteq/conteq.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/conteq/conteq.sty')
-rw-r--r--macros/latex/contrib/conteq/conteq.sty233
1 files changed, 233 insertions, 0 deletions
diff --git a/macros/latex/contrib/conteq/conteq.sty b/macros/latex/contrib/conteq/conteq.sty
new file mode 100644
index 0000000000..1b7f88a6de
--- /dev/null
+++ b/macros/latex/contrib/conteq/conteq.sty
@@ -0,0 +1,233 @@
+%%
+%% This is file `conteq.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% conteq.dtx (with options: `package')
+%% conteq.dtx (with options: `layouts')
+%% ----------------------------------------------------------------
+%% conteq --- continued equalities
+%% E-mail: mail@joachim-breitner.de
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% ----------------------------------------------------------------
+%%
+\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{expl3}[2012/07/02]
+\ProvidesExplPackage
+ {conteq} % Package name
+ {2015/07/17} % Release date
+ {0.1.1} % Release version
+ {Various layouts for continued equalities} % Description
+
+\RequirePackage{amsmath}
+\RequirePackage{environ}
+\msg_new:nnn
+ { conteq }
+ { empty }
+ { Empty~conteq~environment~\msg_line_context: }
+
+\msg_new:nnn
+ { conteq }
+ { ignoreddata }
+ { Ignored~text~\msg_line_context: }
+
+\msg_new:nnn
+ { conteq }
+ { undefined layout }
+ { Undefined~layout~``#1''~\msg_line_context: }
+
+\tl_new:N \l__conteq_default_layout_tl
+\tl_new:N \l__conteq_layout_tl
+\tl_new:N \l__conteq_body_tl
+\tl_new:N \l__conteq_lines_seq
+\tl_new:N \l__conteq_cells_seq
+\tl_new:N \l__conteq_head_tl
+\tl_new:N \l__conteq_lastline_tl
+\tl_new:N \l__conteq_rhs_tl
+\tl_new:N \l__conteq_expl_tl
+\tl_new:N \l__conteq_result_tl
+
+\cs_new_protected:Nn \__conteq_set_default_layout:n
+ {
+ \tl_set:Nn \l__conteq_default_layout_tl {#1}
+ }
+\cs_new_eq:NN \ConteqSetDefaultLayout \__conteq_set_default_layout:n
+\tl_const:Nn \c__conteq_prefix_tl { __conteq_layouts }
+
+\cs_new_protected:Nn \__conteq_define_layout:nnnnnnn
+ {
+ \cs_new_protected:cn { \c__conteq_prefix_tl _ #1 _begin: } { #2 }
+ \cs_new_protected:cn { \c__conteq_prefix_tl _ #1_lhs:n } { #3 }
+ \cs_new_protected:cn { \c__conteq_prefix_tl _ #1_rhs_only:n } { #4 }
+ \cs_new_protected:cn { \c__conteq_prefix_tl _ #1_rhs_expl:nn } { #5 }
+ \cs_new_protected:cn { \c__conteq_prefix_tl _ #1_nl: } { #6 }
+ \cs_new_protected:cn { \c__conteq_prefix_tl _ #1_end: } { #7 }
+ }
+\cs_new_eq:NN \ConteqDefineLayout \__conteq_define_layout:nnnnnnn
+\cs_new:Npn \__conteq_args_once:Nn #1#2
+ {
+ \exp_not:o { #1 {#2} }
+ }
+\cs_generate_variant:Nn \__conteq_args_once:Nn { NV }
+
+\cs_new:Npn \__conteq_args_once:Nnn #1#2#3
+ {
+ \exp_not:o { #1 { #2 }{ #3 } }
+ }
+\cs_generate_variant:Nn \__conteq_args_once:Nnn { NVV }
+\cs_new_protected:Npn \__conteq_print_line:Nnn #1#2#3
+ {
+ \seq_set_split:Nnn \l__conteq_cells_seq { & } { #2 }
+ \seq_pop_left:NN \l__conteq_cells_seq \l__conteq_rhs_tl
+ \tl_clear:N \l__conteq_expl_tl
+ \seq_if_empty:NF \l__conteq_cells_seq
+ {
+\seq_pop_left:NN \l__conteq_cells_seq \l__conteq_expl_tl
+ }
+ \tl_if_blank:VTF \l__conteq_expl_tl
+ {
+\tl_put_right:Nx #1
+ {
+ \__conteq_args_once:NV \__conteq_rhs_only:n \l__conteq_rhs_tl
+ }
+ }
+ {
+\tl_set:Nx \l_tmpa_tl { \exp_not:N \text { \exp_not:N \ConteqExplStyle { \exp_not:V \l__conteq_expl_tl } } }
+\tl_put_right:Nx #1
+ {
+ \__conteq_args_once:NVV \__conteq_rhs_expl:nn \l__conteq_rhs_tl \l_tmpa_tl
+ }
+ }
+ \seq_if_empty:NF \l__conteq_cells_seq
+{
+ \msg_warning:nn{conteq}{ignoreddata}
+}
+ \tl_put_right:Nn #1 {#3}
+ }
+\cs_generate_variant:Nn \__conteq_print_line:Nnn { Nno, NVn }
+
+\NewEnviron{ conteq }[1][ \l__conteq_default_layout_tl ]{
+ \tl_set:NV \l__conteq_body_tl \BODY
+
+ \tl_if_blank:oT \l__conteq_body_tl
+ {
+ \msg_warning:nn{conteq}{empty}
+ }
+
+ \tl_set:Nn \l__conteq_layout_tl { #1 }
+ \cs_if_exist:cTF { \c__conteq_prefix_tl _ \l__conteq_layout_tl _ begin: }
+ {
+ \clist_map_inline:nn{ begin:, lhs:n,rhs_only:n, rhs_expl:nn, nl:, end: }
+ {
+ \cs_set_eq:cc { __conteq_ ##1 }{ \c__conteq_prefix_tl _ \l__conteq_layout_tl _ ##1 }
+ }
+ }{
+ \msg_critical:nnx{conteq}{undefined layout}{\l__conteq_layout_tl}
+ }
+
+ \seq_set_split:NnV \l__conteq_lines_seq { \\ } \l__conteq_body_tl
+
+ \tl_clear:N \l__conteq_result_tl
+
+
+ \int_case:nnF { \seq_count:N \l__conteq_lines_seq }
+ {
+ {1}
+ {
+ \tl_put_right:Nx \l__conteq_result_tl { \exp_not:o \__conteq_begin: }
+ \tl_put_right:NV \l__conteq_result_tl \l__conteq_body_tl
+ \tl_put_right:Nx \l__conteq_result_tl { \exp_not:o \__conteq_end: }
+ }
+ }
+ {
+
+ \seq_pop_left:NN \l__conteq_lines_seq \l__conteq_head_tl
+ \seq_pop_right:NN \l__conteq_lines_seq \l__conteq_lastline_tl
+
+ \tl_put_right:Nx \l__conteq_result_tl { \exp_not:o \__conteq_begin: }
+ \tl_put_right:Nx \l__conteq_result_tl
+ {
+ \__conteq_args_once:NV \__conteq_lhs:n \l__conteq_head_tl
+ }
+ \seq_map_inline:Nn \l__conteq_lines_seq
+ {
+ \__conteq_print_line:Nno \l__conteq_result_tl { ##1 } { \__conteq_nl: }
+ }
+ \__conteq_print_line:NVn \l__conteq_result_tl \l__conteq_lastline_tl {}
+ \tl_put_right:Nx \l__conteq_result_tl { \exp_not:o \__conteq_end: }
+ }
+ % Use this for debugging
+ %\tl_show:N \l__conteq_result_tl
+ \tl_use:N \l__conteq_result_tl
+ }
+
+
+\ConteqDefineLayout
+ {plain}
+ {\begin{align*}}
+ { #1 }
+ { & #1 }
+ { & #1 && #2 }
+ { \\ }
+ {\end{align*}}
+\ConteqSetDefaultLayout{plain}
+
+\ConteqDefineLayout
+ {explline}
+ {\begin{align*}}
+ { #1 }
+ { & #1 }
+ { & #1 \\ & \mathrel{\phantom{=}} #2 }
+ { \\ }
+ {\end{align*}}
+
+\ConteqDefineLayout
+ {headline}
+ {\begin{align*}}
+ { &\mathrel{\phantom{=}} #1 \\ }
+ { & #1 }
+ { & #1 && #2 }
+ { \\ }
+ {\end{align*}}
+
+\ConteqDefineLayout
+ {onecolumn}
+ {\begin{align*}}
+ { &\mathrel{\phantom{=}} #1 \\ }
+ { & #1 }
+ { & #1 \\ & \mathrel{\phantom{=}} #2 }
+ { \\ }
+ {\end{align*}}
+
+\ConteqDefineLayout
+ {oneline}
+ {\[}
+ { #1 }
+ { #1 }
+ { #1 }
+ {}
+ {\]}
+
+\newcommand{\ConteqExplStyle}[1]{\{~#1~\}}
+%%
+%% Copyright (C) 2013,2015 by Joachim Breitner <mail@joachim-breitner.de>
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License (LPPL), either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Joachim Breitner.
+%%
+%% This work consists of the file conteq.dtx
+%% and the derived files conteq.ins,
+%% conteq.pdf and
+%% conteq.sty.
+%%
+%%
+%% End of file `conteq.sty'.