diff --git a/lecture.cls b/lecture.cls index fa32f62..9bd834f 100644 --- a/lecture.cls +++ b/lecture.cls @@ -25,6 +25,7 @@ \RequirePackage{bookmark} \RequirePackage{wasysym} \RequirePackage{environ} +\RequirePackage{stackrel} \usetikzlibrary{quotes, angles} @@ -134,8 +135,8 @@ % better stackrel \let\oldstackrel\stackrel -\renewcommand{\stackrel}[2]{% - \oldstackrel{\mathclap{#1}}{#2} +\renewcommand{\stackrel}[3][]{% + \oldstackrel[\mathclap{#1}]{\mathclap{#2}}{#3} }% % integral d sign @@ -183,6 +184,7 @@ \box_new:N \l_tmp_box \dim_new:N \l_tmp_dim_a \dim_new:N \l_tmp_dim_b +\dim_new:N \l_tmp_dim_c \dim_new:N \l_tmp_dim_needed % function to insert padding according to widest stackrel @@ -190,7 +192,7 @@ { \tl_set:Nn \l__lec_text_tl { #1 } % 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 \int_set:Nn \l_stackrel_count_int { \seq_count:N \l_lec_stackrels_seq } \int_set:Nn \l_idx_int { 1 } @@ -201,30 +203,28 @@ % calculate width of text \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} - % calculate width of relation symbol \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} % check if 0.5*(a-b) > minimum padding, if yes updated minimum padding \dim_compare:nNnTF { 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 } } } { } - \quad % 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 } % replace all relations with align characters (&) and add the needed padding \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} } \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 } \cs_generate_variant:Nn \lec_insert_padding:n { V }