| @@ -25,6 +25,7 @@ | |||||
| \RequirePackage{bookmark} | \RequirePackage{bookmark} | ||||
| \RequirePackage{wasysym} | \RequirePackage{wasysym} | ||||
| \RequirePackage{environ} | \RequirePackage{environ} | ||||
| \RequirePackage{stackrel} | |||||
| \usetikzlibrary{quotes, angles} | \usetikzlibrary{quotes, angles} | ||||
| @@ -134,8 +135,8 @@ | |||||
| % better stackrel | % better stackrel | ||||
| \let\oldstackrel\stackrel | \let\oldstackrel\stackrel | ||||
| \renewcommand{\stackrel}[2]{% | |||||
| \oldstackrel{\mathclap{#1}}{#2} | |||||
| \renewcommand{\stackrel}[3][]{% | |||||
| \oldstackrel[\mathclap{#1}]{\mathclap{#2}}{#3} | |||||
| }% | }% | ||||
| % integral d sign | % integral d sign | ||||
| @@ -183,6 +184,7 @@ | |||||
| \box_new:N \l_tmp_box | \box_new:N \l_tmp_box | ||||
| \dim_new:N \l_tmp_dim_a | \dim_new:N \l_tmp_dim_a | ||||
| \dim_new:N \l_tmp_dim_b | \dim_new:N \l_tmp_dim_b | ||||
| \dim_new:N \l_tmp_dim_c | |||||
| \dim_new:N \l_tmp_dim_needed | \dim_new:N \l_tmp_dim_needed | ||||
| % function to insert padding according to widest stackrel | % function to insert padding according to widest stackrel | ||||
| @@ -190,7 +192,7 @@ | |||||
| { | { | ||||
| \tl_set:Nn \l__lec_text_tl { #1 } | \tl_set:Nn \l__lec_text_tl { #1 } | ||||
| % get all stackrels in this align environment | % get all stackrels in this align environment | ||||
| \regex_extract_all:nnN { \c{stackrel}{(.*?)}{(.*?)} } { #1 } \l_lec_stackrels_seq | |||||
| \regex_extract_all:nnN { \c{stackrel}(\[.*?\])?{(.*?)}{(.*?)} } { #1 } \l_lec_stackrels_seq | |||||
| % get number of stackrels | % get number of stackrels | ||||
| \int_set:Nn \l_stackrel_count_int { \seq_count:N \l_lec_stackrels_seq } | \int_set:Nn \l_stackrel_count_int { \seq_count:N \l_lec_stackrels_seq } | ||||
| \int_set:Nn \l_idx_int { 1 } | \int_set:Nn \l_idx_int { 1 } | ||||
| @@ -201,30 +203,28 @@ | |||||
| % calculate width of text | % calculate width of text | ||||
| \hbox_set:Nn \l_tmp_box {$\seq_item:Nn \l_lec_stackrels_seq { \l_idx_int + 1 }$} | \hbox_set:Nn \l_tmp_box {$\seq_item:Nn \l_lec_stackrels_seq { \l_idx_int + 1 }$} | ||||
| \dim_set:Nn \l_tmp_dim_a {\box_wd:N \l_tmp_box} | \dim_set:Nn \l_tmp_dim_a {\box_wd:N \l_tmp_box} | ||||
| % calculate width of relation symbol | |||||
| \hbox_set:Nn \l_tmp_box {$\seq_item:Nn \l_lec_stackrels_seq { \l_idx_int + 2 }$} | \hbox_set:Nn \l_tmp_box {$\seq_item:Nn \l_lec_stackrels_seq { \l_idx_int + 2 }$} | ||||
| \dim_set:Nn \l_tmp_dim_c {\box_wd:N \l_tmp_box} | |||||
| \dim_set:Nn \l_tmp_dim_a {\dim_max:nn{ \l_tmp_dim_c} {\l_tmp_dim_a}} | |||||
| % calculate width of relation symbol | |||||
| \hbox_set:Nn \l_tmp_box {$\seq_item:Nn \l_lec_stackrels_seq { \l_idx_int + 3 }$} | |||||
| \dim_set:Nn \l_tmp_dim_b {\box_wd:N \l_tmp_box} | \dim_set:Nn \l_tmp_dim_b {\box_wd:N \l_tmp_box} | ||||
| % check if 0.5*(a-b) > minimum padding, if yes updated minimum padding | % check if 0.5*(a-b) > minimum padding, if yes updated minimum padding | ||||
| \dim_compare:nNnTF | \dim_compare:nNnTF | ||||
| { 1pt * \dim_ratio:nn { \l_tmp_dim_a - \l_tmp_dim_b } { 2pt } } > { \l_tmp_dim_needed } | { 1pt * \dim_ratio:nn { \l_tmp_dim_a - \l_tmp_dim_b } { 2pt } } > { \l_tmp_dim_needed } | ||||
| { \dim_set:Nn \l_tmp_dim_needed { 1pt * \dim_ratio:nn { \l_tmp_dim_a - \l_tmp_dim_b } { 2pt } } } | { \dim_set:Nn \l_tmp_dim_needed { 1pt * \dim_ratio:nn { \l_tmp_dim_a - \l_tmp_dim_b } { 2pt } } } | ||||
| { } | { } | ||||
| \quad | |||||
| % increment list index by three, as every stackrel produces three list entries | % increment list index by three, as every stackrel produces three list entries | ||||
| \int_incr:N \l_idx_int | \int_incr:N \l_idx_int | ||||
| \int_incr:N \l_idx_int | \int_incr:N \l_idx_int | ||||
| \int_incr:N \l_idx_int | \int_incr:N \l_idx_int | ||||
| \int_incr:N \l_idx_int | |||||
| } | } | ||||
| % replace all relations with align characters (&) and add the needed padding | % replace all relations with align characters (&) and add the needed padding | ||||
| \regex_replace_all:nnN | \regex_replace_all:nnN | ||||
| { (\c{iff}&|&\c{iff}|\c{impliedby}&|&\c{impliedby}|\c{implies}&|&\c{implies}|\c{approx}&|&\c{approx}|\c{equiv}&|&\c{equiv}|=&|&=|\c{le}&|&\c{le}|\c{ge}&|&\c{ge}|&\c{stackrel}{.*?}{.*?}|\c{stackrel}{.*?}{.*?}&|&\c{neq}|\c{neq}&|>&|&>|<&|&<) } | |||||
| { (\c{iff}&|&\c{iff}|\c{impliedby}&|&\c{impliedby}|\c{implies}&|&\c{implies}|\c{approx}&|&\c{approx}|\c{equiv}&|&\c{equiv}|=&|&=|\c{le}&|&\c{le}|\c{ge}&|&\c{ge}|&\c{stackrel}(\[.*?\])?{.*?}{.*?}|\c{stackrel}(\[.*?\])?{.*?}{.*?}&|&\c{neq}|\c{neq}&|>&|&>|<&|&<) } | |||||
| { \c{kern} \u{l_tmp_dim_needed} \1 \c{kern} \u{l_tmp_dim_needed} } | { \c{kern} \u{l_tmp_dim_needed} \1 \c{kern} \u{l_tmp_dim_needed} } | ||||
| \l__lec_text_tl | \l__lec_text_tl | ||||
| % replace all parantheses with \left( \right) | |||||
| %\regex_replace_all:nnN { \( } { \c{left}( } \l__lec_text_tl | |||||
| %\regex_replace_all:nnN { \) } { \c{right}) } \l__lec_text_tl | |||||
| %\regex_replace_all:nnN { \[ } { \c{left}[ } \l__lec_text_tl | |||||
| %\regex_replace_all:nnN { \] } { \c{right}] } \l__lec_text_tl | |||||
| \l__lec_text_tl | \l__lec_text_tl | ||||
| } | } | ||||
| \cs_generate_variant:Nn \lec_insert_padding:n { V } | \cs_generate_variant:Nn \lec_insert_padding:n { V } | ||||