diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/conteq/conteq.sty |
Initial commit
Diffstat (limited to 'macros/latex/contrib/conteq/conteq.sty')
-rw-r--r-- | macros/latex/contrib/conteq/conteq.sty | 233 |
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'. |