%% %% 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 %% %% 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'.