diff options
author | Norbert Preining <norbert@preining.info> | 2023-12-01 03:00:49 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2023-12-01 03:00:49 +0000 |
commit | cddec35d9b4df3b6e5a4ebb36db9bab6fd409269 (patch) | |
tree | c5c35e2bd772a5f43a4ed3ef3410a49bad1a6829 /macros/latex/contrib/ufrgscca | |
parent | ff7e60f3d1af3d5bbcc9c125c01a063391a30cc5 (diff) |
CTAN sync 202312010300
Diffstat (limited to 'macros/latex/contrib/ufrgscca')
18 files changed, 440 insertions, 221 deletions
diff --git a/macros/latex/contrib/ufrgscca/README.md b/macros/latex/contrib/ufrgscca/README.md index 02143ca5f7..9ce0b4dcf1 100644 --- a/macros/latex/contrib/ufrgscca/README.md +++ b/macros/latex/contrib/ufrgscca/README.md @@ -107,7 +107,13 @@ The Current Maintainer of this work is Alceu Frigeri ## Changelog -* Version 2.0 (this) +* Version 2.1 (this) + - A few typos corrected + - better error handling + - a bit of code clean up (private macro/functions only) + - added a few \...prof commands (-coord auxiliary ones) + +* Version 2.0 - fully rewritten as Expl3 class/packages - documentation - (a few) commands changed (mostly auxiliary/background ones) diff --git a/macros/latex/contrib/ufrgscca/doc/ufrgscca.pdf b/macros/latex/contrib/ufrgscca/doc/ufrgscca.pdf Binary files differindex 70e38ced7f..b6146a3339 100644 --- a/macros/latex/contrib/ufrgscca/doc/ufrgscca.pdf +++ b/macros/latex/contrib/ufrgscca/doc/ufrgscca.pdf diff --git a/macros/latex/contrib/ufrgscca/doc/ufrgscca.tex b/macros/latex/contrib/ufrgscca/doc/ufrgscca.tex index e274af87ed..3f27431154 100644 --- a/macros/latex/contrib/ufrgscca/doc/ufrgscca.tex +++ b/macros/latex/contrib/ufrgscca/doc/ufrgscca.tex @@ -15,7 +15,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version {2.0} {2023/11/23} +%% This is version {2.1} {2023/11/30} %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -92,7 +92,7 @@ \end{tsremark} \begin{tsremark}[Version 1.12a:] - In case you need the old version, for some odd \tsobj[pkg]{expl3} compatibility issue, you can find it at \tsverb{https://github.com/ alceu-frigeri/ufrgscca/releases/tag/v1.12} + In case you need the old version, for some odd \tsobj[pkg]{expl3} compatibility issue, you can find it at \tsverb{https://github.com/ alceu-frigeri/ufrgscca/releases/tag/v1.12a} \end{tsremark} \subsection{Current Version} @@ -649,6 +649,12 @@ These are, respectively, \tsobj{\starray_get_prop:nn, \starray_term_syntax:n,\st This is \tsobj{\starray_iterate_over:nn} from \tsobj[pack]{starray}. \tsobj[meta]{code} will be executed for every defined student. \end{codedescribe} +\begin{codedescribe}[code,new=2023/11/29]{\ActivityCalendarIterate} + \begin{codesyntax}% + \tsmacro{\ActivityCalendarIterate}{code} + \end{codesyntax} +This is \tsobj{\starray_iterate_over:nn} from \tsobj[pack]{starray}. \tsobj[meta]{code} will be executed for every defined calendar item. +\end{codedescribe} \subsection{Core Specific Commands}\label{core-specific-commands} @@ -1055,6 +1061,20 @@ These are a set of auxiliary conditionals, for instance, \tsobj{\StudentCase} wi \end{codedescribe} +\begin{codedescribe}[code,new=2023/11/30]{\professor,\advisorprof,\coadvisorprof,\examinerprof,\altexaminerprof} + \begin{codesyntax}% + \tsobj[code]{\professor}\tsargs[oarg]{prof-ref}\tsargs[marg]{last,first}\tsargs[oarg]{gender} + \tsmacro{\advisorprof}{prof-ref} + \tsmacro{\coadvisorprof}{prof-ref} + \tsmacro{\examinerprof}{prof-ref} + \tsmacro{\altexaminerprof}{prof-ref} + \end{codesyntax} +\tsobj{\professor} creates a \tsobj[oarg]{prof-ref} alias to a person's full name. \tsobj{\advisorprof} expands to a call for \tsobj{\advisor} using the properties stored by \tsobj{\professor}. Similarly, \tsobj{\coadvisorprof,\examinerprof,\altexaminerprof} results in call to \tsobj{\coadvisor,\examinerprof,\altexaminerprof} respectively. +\end{codedescribe} +\begin{tsremark} +\tsobj{\professor} creates/uses an auxiliary \tsobj[pkg]{starray}, just mapping names for users convenience. +\end{tsremark} + \begin{codedescribe}[code,new=2023/11/18]{\boardtitle,\boardobs,\semester} \begin{codesyntax}% @@ -1166,13 +1186,17 @@ This assigns the \tsobj[meta]{fate} of a student, for those cases that one canno \end{codedescribe} -\begin{codedescribe}[code,update=2023/11/18]{\timeslot} +\begin{codedescribe}[code,update=2023/11/29]{\timeslot} \begin{codesyntax}% \tsmacro{\timeslot}[local]{date,time} \end{codesyntax} -To set, for the Boards Report, the \tsobj[meta]{local}, \tsobj[meta]{date} and \tsobj[meta]{time} of a student's presentation work. +To set the \tsobj[meta]{local}, \tsobj[meta]{date} and \tsobj[meta]{time} of a student's presentation work. \end{codedescribe} +\begin{tsremark} +\tsobj[meta]{date} must be given in numerical form, either \tsmeta{day}/\tsmeta{month} or \tsmeta{day}/\tsmeta{month}/\tsmeta{year}. The day-of-the-week will be obtained using \tsobj[pkg]{pgfcalendar}. +\end{tsremark} + \begin{codedescribe}[code,update=2023/11/18]{\worktitle,\studentremark} @@ -1221,11 +1245,12 @@ Quite obvious, this set the grades given by an examiner (the one defined by the -\begin{codedescribe}{\setstudentlist} +\begin{codedescribe}[code,update=2023/11/29]{\setstudentlist} \begin{codesyntax}% \tsmacro{\setstudentlist}{listID,list} + \tsmacro{\setstudentlist*}{listID,list} \end{codesyntax} -This command will define/create a list named \tsobj[meta]{listID} composed of a csv \tsobj[meta]{list}~ of student names (as defined by \tsmacro{\Newstudent}{}). +This command will define/create a list named \tsobj[meta]{listID} composed of a csv \tsobj[meta]{list}~ of student names (as defined by \tsmacro{\Newstudent}{}). The star version sorts the list first (by student's name). \end{codedescribe} \begin{codedescribe}{\tcreports} diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-abnt.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-abnt.sty index eba4667270..dce7de584a 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-abnt.sty +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-abnt.sty @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version {2.0} {2023/11/23} +%% This is version {2.1} {2023/11/30} %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -27,8 +27,8 @@ \ProvidesExplPackage {ufrgscca-abnt} - {2023/11/23} - {2.0} + {2023/11/30} + {2.1} {UFRGS/CCA ABNT layout} @@ -42,8 +42,8 @@ { name .code:n = {ufrgscca-abnt} , prefix .code:n = {ufrgscca} , - date .code:n = {2023/11/23}, - version .code:n = {2.0} , + date .code:n = {2023/11/30}, + version .code:n = {2.1} , description .code:n = {UFRGS/CCA~ abnt~layout} } \cs_if_exist:NF \__codedesc_pkg_info:nn @@ -812,6 +812,20 @@ October\or November\or December \fi } + \cs_new_protected:Npn \__ufrgscca_weekday:n #1 + { + \int_case:nnF {#1} + { + {0}{Monday} + {1}{Tuesday} + {2}{Wednsday} + {3}{Thursday} + {4}{Friday} + {5}{Saturday} + {6}{Sunday} + } + {-none-} + } } { \def\today{\number\day\space de\space\monthname\space de\space\number\year} @@ -822,6 +836,20 @@ Outubro\or Novembro\or Dezembro \fi } + \cs_new_protected:Npn \__ufrgscca_weekday:n #1 + { + \int_case:nnF {#1} + { + {0}{Segunda} + {1}{Terça} + {2}{Quarta} + {3}{Quinta} + {4}{Sexta} + {5}{Sábado} + {6}{Domingo} + } + {-none-} + } } diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-base-en.def b/macros/latex/contrib/ufrgscca/latex/ufrgscca-base-en.def index 014860c78f..fcbb674815 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-base-en.def +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-base-en.def @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version {2.0} {2023/11/23} +%% This is version {2.1} {2023/11/30} %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-base-ptBR.def b/macros/latex/contrib/ufrgscca/latex/ufrgscca-base-ptBR.def index 8854c1ded8..a75f798851 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-base-ptBR.def +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-base-ptBR.def @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version {2.0} {2023/11/23} +%% This is version {2.1} {2023/11/30} %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-coord.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-coord.sty index ffb88727a4..a232b45891 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-coord.sty +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-coord.sty @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version {2.0} {2023/11/23} +%% This is version {2.1} {2023/11/30} %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -27,8 +27,8 @@ \ProvidesExplPackage {ufrgscca-coord} - {2023/11/23} - {2.0} + {2023/11/30} + {2.1} {UFRGS/CCA coord commands} @@ -42,8 +42,8 @@ { name .code:n = {ufrgscca-coord} , prefix .code:n = {ufrgscca} , - date .code:n = {2023/11/23}, - version .code:n = {2.0} , + date .code:n = {2023/11/30}, + version .code:n = {2.1} , description .code:n = {UFRGS/CCA~ coordination~ report~ commands} } \cs_if_exist:NF \__codedesc_pkg_info:nn @@ -118,6 +118,8 @@ \RequirePackage{longtable} \RequirePackage{multirow} +\RequirePackage{pgfcalendar} + \RequirePackage{ufrgscca-core} \RequirePackage{ufrgscca-forms} @@ -125,6 +127,57 @@ % + +\starray_new:n {prof} +\starray_def_from_keyval:nn {prof} + { + last = , + first = , + gender = , + } + +\NewDocumentCommand{\professor}{O{}mmO{}} + { + \starray_new_term:nn {prof}{#1} + \starray_set_from_keyval:nn {prof} + { + last = {#2}, + first = {#3}, + gender = {#4}, + } + } + +\cs_new_protected:Npn \__ufrgscca_prof_ref_set:nnnn #1#2#3#4 + { #1 {#2}{#3}[#4] } + +\cs_generate_variant:Nn \__ufrgscca_prof_ref_set:nnnn {eeee} + +\cs_new_protected:Npn \__ufrgscca_prof_ref:nn #1#2 + { + \starray_set_iter_from_hash:nnTF {prof}{#2} + { + \starray_term_syntax:n {prof} + \__ufrgscca_prof_ref_set:eeee {#1}{\starray_parsed_get_prop:n{last}}{\starray_parsed_get_prop:n{first}}{\starray_parsed_get_prop:n{gender}} + } + { + #1{definido:(#2)}{não} + } + } + +\NewDocumentCommand{\advisorprof}{m} + { \__ufrgscca_prof_ref:nn {\advisor}{#1} } + +\NewDocumentCommand{\coadvisorprof}{m} + { \__ufrgscca_prof_ref:nn {\coadvisor}{#1} } + +\NewDocumentCommand{\examinerprof}{m} + { \__ufrgscca_prof_ref:nn {\examiner}{#1} } + +\NewDocumentCommand{\altexaminerprof}{m} + { \__ufrgscca_prof_ref:nn {\altexaminer}{#1} } + + + \NewDocumentCommand{\ActivitySetNewEvent}{O{}mm}{ \tl_if_blank:nTF {#1} { @@ -205,6 +258,7 @@ } } { %% in case of none of above... + \emptytermifnone[3]{student.reviewer}[\starray_gset_prop:nnn {student}{flag-null}{\c_true_bool}] \__ufrgscca_studentgrade: } }%% @@ -215,62 +269,101 @@ \tl_new:N \l__ufrgscca_tmpd_tl \cs_new_protected:Npn \__ufrgscca_studentgrade: { - %(\DataFields{student}{name})\par - \starray_term_syntax:n {student.reviewer[1]} - \tl_set:Ne \l__ufrgscca_tmpa_tl {\starray_parsed_get_prop:n {grade}} - \starray_term_syntax:n {student.reviewer[2]} - \tl_set:Ne \l__ufrgscca_tmpb_tl {\starray_parsed_get_prop:n {grade}} - \starray_term_syntax:n {student.reviewer[3]} - \tl_set:Ne \l__ufrgscca_tmpc_tl {\starray_parsed_get_prop:n {grade}} - \int_case:nn {\starray_parsed_get_prop:n {gradetype}} + \starray_term_syntax:n {student} + \bool_if:nTF {\starray_parsed_get_prop:n {flag-null}} { - {1} - { - \tl_set:Ne \l__ufrgscca_tmpd_tl - {\fpeval{round(((\l__ufrgscca_tmpb_tl + \l__ufrgscca_tmpc_tl)/2),2,1)}} - } - {2} - { - \tl_set:Ne \l__ufrgscca_tmpd_tl - {\fpeval{round(((\l__ufrgscca_tmpa_tl + \l__ufrgscca_tmpb_tl + \l__ufrgscca_tmpc_tl)/3),2,1)}} - } - } - \starray_gset_prop:nne {student}{gradeavrg}{\l__ufrgscca_tmpd_tl} - \fp_compare:nNnTF {\l__ufrgscca_tmpd_tl} < {\UseConst{NgradeC}} - { % D - \starray_gset_prop:nnn {student}{grade}{D} + \starray_gset_prop:nnn {student}{grade}{D*} } { - \fp_compare:nNnTF {\l__ufrgscca_tmpd_tl} < {\UseConst{NgradeB}} - { % C - \starray_gset_prop:nnn {student}{grade}{C} - \starray_gset_prop:nnn {student}{flag-approved}{\c_true_bool} + %(\DataFields{student}{name})\par + \starray_term_syntax:n {student.reviewer[1]} + \tl_set:Ne \l__ufrgscca_tmpa_tl {\starray_parsed_get_prop:n {grade}} + \starray_term_syntax:n {student.reviewer[2]} + \tl_set:Ne \l__ufrgscca_tmpb_tl {\starray_parsed_get_prop:n {grade}} + \starray_term_syntax:n {student.reviewer[3]} + \tl_set:Ne \l__ufrgscca_tmpc_tl {\starray_parsed_get_prop:n {grade}} + \str_case:nnF {\starray_parsed_get_prop:n {gradetype}} + { + {1} + { + \tl_set:Ne \l__ufrgscca_tmpd_tl + {\fpeval{round(((\l__ufrgscca_tmpb_tl + \l__ufrgscca_tmpc_tl)/2),2,1)}} + } + {2} + { + \tl_set:Ne \l__ufrgscca_tmpd_tl + {\fpeval{round(((\l__ufrgscca_tmpa_tl + \l__ufrgscca_tmpb_tl + \l__ufrgscca_tmpc_tl)/3),2,1)}} + } + } + { \tl_set:Nn \l__ufrgscca_tmpd_tl {0} } + + \starray_gset_prop:nne {student}{gradeavrg}{\l__ufrgscca_tmpd_tl} + \fp_compare:nNnTF {\l__ufrgscca_tmpd_tl} < {\UseConst{NgradeC}} + { % D + \starray_gset_prop:nnn {student}{grade}{D} } { - \fp_compare:nNnTF {\l__ufrgscca_tmpd_tl} < {\UseConst{NgradeA}} - { % B - \starray_gset_prop:nnn {student}{grade}{B} + \fp_compare:nNnTF {\l__ufrgscca_tmpd_tl} < {\UseConst{NgradeB}} + { % C + \starray_gset_prop:nnn {student}{grade}{C} \starray_gset_prop:nnn {student}{flag-approved}{\c_true_bool} } - { % A - \starray_gset_prop:nnn {student}{grade}{A} - \starray_gset_prop:nnn {student}{flag-approved}{\c_true_bool} + { + \fp_compare:nNnTF {\l__ufrgscca_tmpd_tl} < {\UseConst{NgradeA}} + { % B + \starray_gset_prop:nnn {student}{grade}{B} + \starray_gset_prop:nnn {student}{flag-approved}{\c_true_bool} + } + { % A + \starray_gset_prop:nnn {student}{grade}{A} + \starray_gset_prop:nnn {student}{flag-approved}{\c_true_bool} + } } } } + \starray_gset_prop:nnn {student}{flag-graded}{\c_true_bool} + } + - \starray_gset_prop:nnn {student}{flag-graded}{\c_true_bool} +\cs_new_protected:Npn \__ufrgscca_set_timeslot:nnnn #1#2#3#4 + { + \starray_gset_from_keyval:nn {student} + { + board-local = {#1} , + board-time = {#2} , + board-date = {#3} , } -% + \SetConsts { + date:#3 = {\__ufrgscca_weekday:n {#4}} , + } + } +\cs_generate_variant:Nn \__ufrgscca_set_timeslot:nnnn {nnee} + + +\seq_new:N \l__ufrgscca_cal_seq +\newcount\l__ufrgscca_day_counter +\newcount\l__ufrgscca_weekday_counter \NewDocumentCommand{\timeslot}{O{}mm}{%% - \starray_gset_from_keyval:nn {student} + \seq_set_split:Nnn \l__ufrgscca_cal_seq {/} {#2} + \int_case:nnF {\seq_count:N \l__ufrgscca_cal_seq} + { + {2}{ \seq_put_right:Ne \l__ufrgscca_cal_seq {\number\year} } + {3}{} + } { - board-local = #1 , - board-date = #2 , - board-time = #3 , + \seq_clear:N \l__ufrgscca_cal_seq + \seq_put_right:Nn \l__ufrgscca_cal_seq {31} + \seq_put_right:Nn \l__ufrgscca_cal_seq {12} + \seq_put_right:Ne \l__ufrgscca_cal_seq {\number\year} } + \seq_reverse:N \l__ufrgscca_cal_seq + \pgfcalendardatetojulian{\seq_use:Nn \l__ufrgscca_cal_seq {-}}{\l__ufrgscca_day_counter} + \pgfcalendarjuliantoweekday{\the\l__ufrgscca_day_counter}{\l__ufrgscca_weekday_counter} + \seq_reverse:N \l__ufrgscca_cal_seq + \seq_pop_right:NN \l__ufrgscca_cal_seq \l_tmpa_tl + + \__ufrgscca_set_timeslot:nnee {#1}{#3}{\seq_use:Nn \l__ufrgscca_cal_seq {/}}{\the\l__ufrgscca_weekday_counter} }% -% @@ -337,12 +430,14 @@ } }% - -\NewDocumentCommand{\boarddate}{mm}{%% - \SetConsts{% - date:#1 = {#2} , - } -}% +%% +%% DEPRECATED, to be removed. +%% +%\NewDocumentCommand{\boarddate}{mm}{%% +% \SetConsts{% +% date:#1 = {#2} , +% } +%}% % \NewDocumentCommand{\semester}{m}{%% \SetTerms{% @@ -384,7 +479,10 @@ \NewDocumentCommand{\examinergrades}{mmmO{}}{ \tl_if_blank:nTF {#1} - { \starray_gset_prop:nnn {student.reviewer}{grade}{0} } + { + \starray_gset_prop:nnn {student.reviewer}{grade}{0} + \starray_gset_prop:nnn {student}{flag-null}{\c_true_bool} + } { \tl_if_blank:nTF {#4} { %% 3 grades, TCC II @@ -419,35 +517,64 @@ } +\tl_new:N \l__ufrgscca_sortA_tl +\tl_new:N \l__ufrgscca_sortB_tl + +\NewDocumentCommand{\setstudentlist}{sO{tcc}mm}{ + \seq_new:c {l__ufrgscca_#3_seq} + \seq_new:c {l__ufrgscca_#3_ff_seq} + \seq_new:c {l__ufrgscca_#3_dismiss_seq} + \seq_new:c {l__ufrgscca_#3_graded_seq} + + \clist_map_inline:nn {#4} + { + \starray_set_iter_from_hash:nnT {student}{##1} + { + \seq_put_right:cn {l__ufrgscca_#3_seq} {##1} + \emptytermifnone{student.advisor} + \emptytermifnone[3]{student.reviewer}[\starray_gset_prop:nnn {student}{flag-null}{\c_true_bool}] + \emptytermifnone{student.altreviewer} + } + } +% \seq_gset_from_clist:cn {l__ufrgscca_#3_seq}{#4} -\NewDocumentCommand{\setstudentlist}{O{tcc}mm}{ - \seq_new:c {l__ufrgscca_#2_seq} - \seq_new:c {l__ufrgscca_#2_ff_seq} - \seq_new:c {l__ufrgscca_#2_dismiss_seq} - \seq_new:c {l__ufrgscca_#2_graded_seq} + \bool_if:nT {#1} + { + \seq_gsort:cn {l__ufrgscca_#3_seq } + { + \starray_set_iter_from_hash:nn {student}{##1} + \starray_get_prop:nnN {student}{name} \l__ufrgscca_sortA_tl + \starray_set_iter_from_hash:nn {student}{##2} + \starray_get_prop:nnN {student}{name} \l__ufrgscca_sortB_tl + \str_compare:eNeTF { \l__ufrgscca_sortA_tl } > { \l__ufrgscca_sortB_tl } + { \sort_return_swapped: } + { \sort_return_same: } + } + } + - \seq_gset_from_clist:cn {l__ufrgscca_#2_seq}{#3} - \str_case:nn {#1} + + \str_case:nn {#2} { {tcc} { - \seq_map_tokens:cn {l__ufrgscca_#2_seq} {\__ufrgscca_grade:n} - \seq_map_tokens:cn {l__ufrgscca_#2_seq} {\__ufrgscca_listclassify:nn {#2}} + \seq_map_tokens:cn {l__ufrgscca_#3_seq} {\__ufrgscca_grade:n} + \seq_map_tokens:cn {l__ufrgscca_#3_seq} {\__ufrgscca_listclassify:nn {#3}} } {tccI} { - \seq_map_tokens:cn {l__ufrgscca_#2_seq} {\__ufrgscca_grade:n} - \seq_map_tokens:cn {l__ufrgscca_#2_seq} {\__ufrgscca_listclassify:nn {#2}} + \seq_map_tokens:cn {l__ufrgscca_#3_seq} {\__ufrgscca_grade:n} + \seq_map_tokens:cn {l__ufrgscca_#3_seq} {\__ufrgscca_listclassify:nn {#3}} } {tccII} { - \seq_map_tokens:cn {l__ufrgscca_#2_seq} {\__ufrgscca_grade:n} - \seq_map_tokens:cn {l__ufrgscca_#2_seq} {\__ufrgscca_listclassify:nn {#2}} + \seq_map_tokens:cn {l__ufrgscca_#3_seq} {\__ufrgscca_grade:n} + \seq_map_tokens:cn {l__ufrgscca_#3_seq} {\__ufrgscca_listclassify:nn {#3}} } {intern} { %% TO BE IMPLEMENTED !!! - \seq_map_tokens:cn {l__ufrgscca_#2_seq} {\__ufrgscca_grade:n} - \seq_map_tokens:cn {l__ufrgscca_#2_seq} {\__ufrgscca_listclassify:nn {#2}} + \seq_map_tokens:cn {l__ufrgscca_#3_seq} {\__ufrgscca_grade:n} + \seq_map_tokens:cn {l__ufrgscca_#3_seq} {\__ufrgscca_listclassify:nn {#3}} } } } @@ -455,7 +582,7 @@ \cs_new_protected:Npn \__ufrgscca_grade:n #1 { \starray_set_iter_from_hash:nn {student}{#1} - \starray_term_syntax:n {student[#1]} + \starray_term_syntax:n {student} \bool_if:nF {\starray_parsed_get_prop:n {flag-graded}} { \__ufrgscca_studentgrade: } } diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-core.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-core.sty index 1972c1d250..92b211cf5c 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-core.sty +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-core.sty @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version {2.0} {2023/11/23} +%% This is version {2.1} {2023/11/30} %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -27,8 +27,8 @@ \ProvidesExplPackage {ufrgscca-core} - {2023/11/23} - {2.0} + {2023/11/30} + {2.1} {UFRGS/CCA core commands} @@ -42,8 +42,8 @@ { name .code:n = {ufrgscca-core} , prefix .code:n = {ufrgscca} , - date .code:n = {2023/11/23}, - version .code:n = {2.0} , + date .code:n = {2023/11/30}, + version .code:n = {2.1} , description .code:n = {UFRGS/CCA~core~commands/data} } \cs_if_exist:NF \__codedesc_pkg_info:nn @@ -126,11 +126,12 @@ checklist = , %%% This shall be a property list of check items brief = \BlankLines{6} , reason = \BlankLines{6} , - board-local = {local ~da~ apresentação} , - board-date = {dia~ da~ apresentação} , - board-time = {hora~da~apresentação} , + board-local = {local} , + board-date = {dia} , + board-time = {hora} , gradeavrg = 0, grade = , + flag-null = \c_false_bool , %% IF no grade was given flag-graded = \c_false_bool , %%% IF gradeavrg AND finalgrade already calculated (or defined) flag-exam = \c_false_bool , flag-ff = \c_false_bool , @@ -336,6 +337,10 @@ \starray_get_prop:nn {activity.calendar}{date} & \starray_get_prop:nn {activity.calendar}{week} & \starray_get_prop:nn {activity.calendar}{event} } +\NewDocumentCommand{\ActivityCalendarIterate}{m}{ + \starray_iterate_over:nn{activity.calendar}{#1} +} + % \cs_new_protected:Npn \__ufrgscca_setgender:nn #1#2 @@ -490,6 +495,33 @@ } } +\cs_new_protected:Npn \__ufrgscca_emptyterm_if_none:nnn #1#2#3 + { + \starray_get_cnt:nN {#2} \l_tmpa_int + \int_while_do:nNnn {\l_tmpa_int} < {#1} + { + \starray_new_term:nn {#2}{} + #3 + \starray_get_cnt:nN {#2} \l_tmpa_int + } + } + +\NewDocumentCommand{\emptytermifnone}{O{1}mO{}} + { + \__ufrgscca_emptyterm_if_none:nnn {#1}{#2}{#3} + } + +\cs_new_protected:Npn \__ufrgscca_student_emptyfields_if_none: + { + \__ufrgscca_emptyterm_if_none:nnn {1}{student}{} + \__ufrgscca_emptyterm_if_none:nnn {1}{student.advisor}{} + \__ufrgscca_emptyterm_if_none:nnn {3}{student.reviewer}{} + \__ufrgscca_emptyterm_if_none:nnn {1}{student.altreviewer}{} + \__ufrgscca_emptyterm_if_none:nnn {1}{student.tutor}{} + \__ufrgscca_emptyterm_if_none:nnn {1}{student.supervisor}{} + \__ufrgscca_emptyterm_if_none:nnn {1}{student.internship}{} + } + \NewDocumentCommand{\advisor}{O{}mmO{}}{%% \starray_new_term:nn {student.advisor}{} @@ -518,12 +550,12 @@ }% -\NewDocumentCommand{\coadvisoremptyifnone}{}{%% - \starray_get_cnt:nN {student.coadvisor} \l_tmpa_int - \int_if_zero:nTF \l_tmpa_int - { \starray_new_term:nn {student.coadvisor}{} } - {} -}% +%%%\NewDocumentCommand{\coadvisoremptyifnone}{}{%% +%%% \starray_get_cnt:nN {student.coadvisor} \l_tmpa_int +%%% \int_if_zero:nTF \l_tmpa_int +%%% { \starray_new_term:nn {student.coadvisor}{} } +%%% {} +%%%}% \NewDocumentCommand{\tutor}{O{}mmO{}}{%% @@ -535,10 +567,12 @@ \__ufrgscca_set_prof_info:nnnnn {tutor}{#1}{#2}{#3}{#4} }% + \NewDocumentCommand{\supervisor}{O{}mmO{}}{%% \starray_new_term:nn {student.supervisor}{} \__ufrgscca_set_prof:nnnnn {supervisor}{#1}{#2}{#3}{#4} -}% +} + \NewDocumentCommand{\supervisorinfo}{mmmm}{%% \starray_gset_from_keyval:nn {student.supervisor} { @@ -548,6 +582,7 @@ phone = {#4} , } }% + \NewDocumentCommand{\internship}{mmmmm}{%% \starray_new_term:nn {student.internship}{} \starray_gset_from_keyval:nn {student.internship} @@ -564,6 +599,7 @@ \starray_new_term:nn {student.reviewer}{} \__ufrgscca_set_prof:nnnnn {reviewer}{#1}{#2}{#3}{#4} }% + \NewDocumentCommand{\examinerinfo}{mmmm}{%% \__ufrgscca_set_prof_info:nnnnn {reviewer}{#1}{#2}{#3}{#4} }% diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-cover-ptBR.tex b/macros/latex/contrib/ufrgscca/latex/ufrgscca-cover-ptBR.tex index cb385e9cc6..1cb8f47293 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-cover-ptBR.tex +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-cover-ptBR.tex @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version {2.0} {2023/11/23} +%% This is version {2.1} {2023/11/30} %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-cover.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-cover.sty index 9cfd99a620..5f33f07558 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-cover.sty +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-cover.sty @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version {2.0} {2023/11/23} +%% This is version {2.1} {2023/11/30} %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -27,8 +27,8 @@ \ProvidesExplPackage {ufrgscca-cover} - {2023/11/23} - {2.0} + {2023/11/30} + {2.1} {UFRGS/CCA cover commands} @@ -42,8 +42,8 @@ { name .code:n = {ufrgscca-cover} , prefix .code:n = {ufrgscca} , - date .code:n = {2023/11/23}, - version .code:n = {2.0} , + date .code:n = {2023/11/30}, + version .code:n = {2.1} , description .code:n = {UFRGS/CCA~ cover~pages} } \cs_if_exist:NF \__codedesc_pkg_info:nn @@ -92,6 +92,7 @@ \NewDocumentCommand{\MakeCoverPages}{m} { + \__ufrgscca_student_emptyfields_if_none: \seq_set_from_clist:Ne \l__ufrgscca_tmp_seq {\prop_item:Nn \l__ufrgscca_coverpages_prop {#1.clist} } \seq_map_inline:Nn \l__ufrgscca_tmp_seq diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-curr.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-curr.sty index 51dd5a43ef..c1d4745907 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-curr.sty +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-curr.sty @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version {2.0} {2023/11/23} +%% This is version {2.1} {2023/11/30} %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -27,8 +27,8 @@ \ProvidesExplPackage {ufrgscca-curr} - {2023/11/23} - {2.0} + {2023/11/30} + {2.1} {UFRGS/CCA curricula commands} %%%%%%% @@ -41,8 +41,8 @@ { name .code:n = {ufrgscca-curr} , prefix .code:n = {ufrgscca} , - date .code:n = {2023/11/23}, - version .code:n = {2.0} , + date .code:n = {2023/11/30}, + version .code:n = {2.1} , description .code:n = {UFRGS/CCA~ curricula~ commands} } \cs_if_exist:NF \__codedesc_pkg_info:nn diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.sty index c5f3afe8e9..38380a97c3 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.sty +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.sty @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version {2.0} {2023/11/23} +%% This is version {2.1} {2023/11/30} %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -27,8 +27,8 @@ \ProvidesExplPackage {ufrgscca-forms} - {2023/11/23} - {2.0} + {2023/11/30} + {2.1} {UFRGS/CCA forms commands} @@ -42,8 +42,8 @@ { name .code:n = {ufrgscca-forms} , prefix .code:n = {ufrgscca} , - date .code:n = {2023/11/23}, - version .code:n = {2.0} , + date .code:n = {2023/11/30}, + version .code:n = {2.1} , description .code:n = {UFRGS/CCA~ forms~commands} } \cs_if_exist:NF \__codedesc_pkg_info:nn @@ -160,6 +160,7 @@ \NewDocumentCommand{\tcforms}{m}{% + \__ufrgscca_student_emptyfields_if_none: \SetKeys[forms]{#1}% } diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.tex b/macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.tex index 9f822247c9..e6e47ec34e 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.tex +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.tex @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version {2.0} {2023/11/23} +%% This is version {2.1} {2023/11/30} %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -194,22 +194,18 @@ Data de Início: {\bf \DataFields{student.internship}{start}}\hfill Previsão de \SetForm{calendar-I}{opening}{} %%% - \ExplSyntaxOn - \bool_new:N \l__ufrgscca_tmp_bool + \SetForm{calendar-I}{body}{% - \starray_set_iter_from_hash:nn {activity}{tccI} - \starray_reset_iter:n {activity.calendar} - \bool_set_true:N \l__ufrgscca_tmp_bool + \ActivitySelect{tccI} { \footnotesize% \begin{center} % \resizebox{\textwidth}{!}{%% \begin{tabular}{ccp{11.5cm}}% Data/Período & Semana~ Letiva & Evento\\\hline - \bool_do_while:Nn \l__ufrgscca_tmp_bool + \ActivityCalendarIterate { - \textbf{\starray_get_prop:nn {activity.calendar}{date}} & \starray_get_prop:nn {activity.calendar}{week} & \starray_get_prop:nn {activity.calendar}{event}\\\hline - \starray_next_iter:nF {activity.calendar}{\bool_set_false:N \l__ufrgscca_tmp_bool} + \textbf{\DataFields{activity.calendar}{date}} & \DataFields{activity.calendar}{week} & \DataFields{activity.calendar}{event}\\\hline } \end{tabular}}% % @@ -217,7 +213,6 @@ Data de Início: {\bf \DataFields{student.internship}{start}}\hfill Previsão de \scriptsize \UseTerm{notes.calendarI} }% } - \ExplSyntaxOff %%% \SetForm{calendar-I}{closing}{\vfill}% @@ -229,30 +224,24 @@ Data de Início: {\bf \DataFields{student.internship}{start}}\hfill Previsão de \SetForm{calendar-II}{opening}{} %%% - \ExplSyntaxOn -% \bool_new:N \l__ufrgscca_tmp_bool \SetForm{calendar-II}{body}{% - \starray_set_iter_from_hash:nn {activity}{tccII} - \starray_reset_iter:n {activity.calendar} - \bool_set_true:N \l__ufrgscca_tmp_bool + \ActivitySelect{tccII} { \footnotesize% \begin{center} % \resizebox{\textwidth}{!}{%% \begin{tabular}{ccp{11.5cm}}% - Data/Período & Semana~ Letiva & Evento\\\hline - \bool_do_while:Nn \l__ufrgscca_tmp_bool - { - \textbf{\starray_get_prop:nn {activity.calendar}{date}} & \starray_get_prop:nn {activity.calendar}{week} & \starray_get_prop:nn {activity.calendar}{event}\\\hline - \starray_next_iter:nTF {activity.calendar}{}{\bool_set_false:N \l__ufrgscca_tmp_bool} - } + Data/Período & Semana~ Letiva & Evento\\\hline + \ActivityCalendarIterate + { + \textbf{\DataFields{activity.calendar}{date}} & \DataFields{activity.calendar}{week} & \DataFields{activity.calendar}{event}\\\hline + } \end{tabular}}% % \end{center}% \scriptsize \UseTerm{notes.calendarII} }% } - \ExplSyntaxOff %%% \SetForm{calendar-II}{closing}{\vfill}% @@ -316,7 +305,7 @@ Data de Início: {\bf \DataFields{student.internship}{start}}\hfill Previsão de \SetForm{coadvisor-I}{opening}{% \UseTerm{opening.requestform} - \coadvisoremptyifnone + \emptytermifnone{student.coadvisor} } %%% @@ -364,7 +353,6 @@ Data de Início: {\bf \DataFields{student.internship}{start}}\hfill Previsão de \UseLabel{board} \end{center}% -%%% TODO: That's do be done... convert it to starray!!! \BoardDescSignature{Avaliador\DataFields{student.reviewer[2]}{narticle}}{student.reviewer[2]} @@ -554,39 +542,39 @@ Outras considerações, parecer (se necessário): \BlankLines{6} %%%%%%%%%%%%%%% \SetForm{coadvisor-II}{heading}{\UseTerm{title.tccII}} \SetForm{coadvisor-II}{title}{\UseTerm{title.coadvisorform}} -\SetForm{coadvisor-II}{opening}{% +\SetForm{coadvisor-II}{opening}{ \UseTerm{opening.requestform} - \coadvisoremptyifnone + \emptytermifnone{student.coadvisor} } %%% -\SetForm{coadvisor-II}{body}{% +\SetForm{coadvisor-II}{body}{ \UseTerm{desc.coadvisorform} \vfill% - \UseLabel{worktitle.temp}: \DataFields{student}{worktitle}%\@title % + \UseLabel{worktitle.temp}: \DataFields{student}{worktitle} \UseLabel{advisor}: \DataFields{student.advisor}{name} - \UseLabel{coadvisor}: \DataFields{student.coadvisor}{name}% + \UseLabel{coadvisor}: \DataFields{student.coadvisor}{name} - \UseLabel{coadvisor.email}: {\bf \DataFields{student.coadvisor}{email}}% - \hfill \UseLabel{phone}: {\bf \DataFields{student.coadvisor}{phone}}\\% + \UseLabel{coadvisor.email}: {\bf \DataFields{student.coadvisor}{email}} + \hfill \UseLabel{phone}: {\bf \DataFields{student.coadvisor}{phone}}\\ - {\bf Justificativa}:% + {\bf Justificativa}: \vfill \DataFields{student.coadvisor}{reason} } %%% -\SetForm{coadvisor-II}{closing}{% +\SetForm{coadvisor-II}{closing}{ \SignatureDate{\UseLabel{signature.student}} - \parbox[t]{.45\textwidth}{\SignatureDate{\UseLabel{signature.advisor}}}\hfill% - \parbox[t]{.45\textwidth}{\SignatureDate{\UseLabel{signature.coadvisor}}}% + \parbox[t]{.45\textwidth}{\SignatureDate{\UseLabel{signature.advisor}}}\hfill + \parbox[t]{.45\textwidth}{\SignatureDate{\UseLabel{signature.coadvisor}}} } %%%%%%%%%%%%%%% %%%%%%%%%%%%%%% @@ -602,9 +590,9 @@ Outras considerações, parecer (se necessário): \BlankLines{6} \SetForm{boardapproval-II}{opening}{\UseTerm{desc.studentwork.full}} %%% -\SetForm{boardapproval-II}{body}{% +\SetForm{boardapproval-II}{body}{ \begin{center} - \UseLabel{board}% + \UseLabel{board} \end{center}% \BoardDescSignature{Avaliador\DataFields{student.reviewer[1]}{narticle}}{student.reviewer[1]} @@ -615,9 +603,9 @@ Outras considerações, parecer (se necessário): \BlankLines{6} \BoardDescSignature{Suplente}{student.altreviewer[1]} - \vfill% + \vfill - Indicamos a nominata da Banca Examinadora acima relacionada.% + Indicamos a nominata da Banca Examinadora acima relacionada. } %%% @@ -646,10 +634,10 @@ Outras considerações, parecer (se necessário): \BlankLines{6} %%% \SetForm{advisorsapproval-II}{closing}{% - \SignatureDate{\UseLabel{signature.advisor}}% + \SignatureDate{\UseLabel{signature.advisor}} \vfill% - \SignatureDate{\UseLabel{signature.student}}% + \SignatureDate{\UseLabel{signature.student}} } %%%%%%%%%%%%%%% %%%%%%%%%%%%%%% @@ -663,20 +651,20 @@ Outras considerações, parecer (se necessário): \BlankLines{6} \SetForm{receipts-II}{footnote}{\UseTerm{footnote.receipts}} %%% -\SetForm{receipts-II}{opening}{% - \UseTerm{desc.studentwork.full}\\% +\SetForm{receipts-II}{opening}{ + \UseTerm{desc.studentwork.full}\\ - \noindent Membro da Banca : {\bf \DataFields{student.reviewer}{name} }% + \noindent Membro da Banca : {\bf \DataFields{student.reviewer}{name} } } %%% -\SetForm{receipts-II}{body}{ % +\SetForm{receipts-II}{body}{ Declaro que encontra-se em minha posse cópia da versão final do \Activity[tccII]{name} em \Activity[course]{name} d\DataFields{student}{article} alun\DataFields{student}{article} \textbf{\DataFields{student}{name}}. \vfill% - \SignatureDate{\UseLabel{signature.board}}% + \SignatureDate{\UseLabel{signature.board}} } @@ -706,22 +694,22 @@ A nota (variando de zero a dez) atribuída por cada membro da banca examinadora \vfill% \begin{center} - \begin{tabular}{|c|c|c|}% + \begin{tabular}{|c|c|c|} \hline% \UseLabel{TCC-II.pointA} & \UseLabel{TCC-II.pointB} & \UseLabel{TCC-II.pointC} \\\hline% & & \\\hline - \end{tabular}% - \end{center}% + \end{tabular} + \end{center} } %%% \SetForm{examinersform-II}{closing}{ - \SignatureDate{\UseLabel{signature.reviewer}}% + \SignatureDate{\UseLabel{signature.reviewer}} \vfill% \begin{description} \item[Observações:] \ \\A nota final, de cada membro da banca examinadora, será calculada conforme:\\[2mm] {\bf Nota Final = \UseConst{TCC-II.weightA}\ x \UseLabel{TCC-II.pointA}\ + \UseConst{TCC-II.weightB}\ x \UseLabel{TCC-II.pointB}\ + \UseConst{TCC-II.weightC}\ x \UseLabel{TCC-II.pointC}\ }\\[2mm] A média final da atividade será dada pela média das notas finais atribuidas por cada um dos membros da banca examinadora. - \end{description}% + \end{description} } %%%%%%%%%%%%%%% %%%%%%%%%%%%%%% @@ -742,7 +730,7 @@ A nota (variando de zero a dez) atribuída por cada membro da banca examinadora } %%% -\SetForm{correctionsform-II}{body}{ \resizebox{0.9\textwidth}{!}{%% +\SetForm{correctionsform-II}{body}{ \resizebox{0.9\textwidth}{!}{ O texto submetido: \parbox[t]{.75\textwidth}{ \begin{itemize}[tcc,nosep] @@ -776,12 +764,12 @@ O texto submetido: ~\\\hline ~\\\hline \end{tabular}\\[-1mm] - \end{itemize}} }% - \footnotetext[2]{Neste caso \DataFields{student}{article} alun\DataFields{student}{article} estará em EXAME e receberá conceito final C ou D, conforme revisão final do texto.}% + \end{itemize}} } + \footnotetext[2]{Neste caso \DataFields{student}{article} alun\DataFields{student}{article} estará em EXAME e receberá conceito final C ou D, conforme revisão final do texto.} } %%% -\SetForm{correctionsform-II}{closing}{ \SignatureDate{\UseLabel{signature.reviewer}}% +\SetForm{correctionsform-II}{closing}{ \SignatureDate{\UseLabel{signature.reviewer}} } %%%%%%%%%%%%%%% %%%%%%%%%%%%%%% @@ -796,17 +784,17 @@ O texto submetido: \SetForm{rectifyapproval-II}{opening}{\UseTerm{desc.studentwork.full}} %%% -\SetForm{rectifyapproval-II}{body}{ % +\SetForm{rectifyapproval-II}{body}{ \SetTerms{temp.formrefname = {Formulário de Correções}} \UseTerm{desc.rectifyapproval} - \vfill% + \vfill \ApprovalSignature[\UseLabel{advisor}]{\DataFields{student.advisor}{name}} } %%% -\SetForm{rectifyapproval-II}{closing}{% +\SetForm{rectifyapproval-II}{closing}{ \studentDistinctBoardCase { \SetReviewer{1} @@ -832,32 +820,32 @@ O texto submetido: \SetForm{referral-I}{opening}{\UseTerm{desc.sacad}} %%% -\SetForm{referral-I}{body}{ % +\SetForm{referral-I}{body}{ \studentCase% { \DataFields{student}{Article} alun\DataFields{student}{article} \emph{\DataFields{student}{name}}\ submeteu o trabalho intitulado \emph{\DataFields{student}{worktitle}}, tendo sido APROVAD\DataFields{student}{Article} com conceito final \textbf{\DataFields{student}{grade}}, conforme quadro de notas abaixo.\\[2em] \studentBoardGradedI - }% + } { \DataFields{student}{Article} alun\DataFields{student}{article} \emph{\DataFields{student}{name}}\ submeteu o trabalho intitulado \emph{\DataFields{student}{worktitle}}, tendo sido REAPROVAD\DataFields{student}{Article} com conceito final \textbf{\DataFields{student}{grade}}, conforme quadro de notas abaixo.\\[2em] \studentBoardGradedI - }% + } { \DataFields{student}{Article} alun\DataFields{student}{article} \emph{\DataFields{student}{name}}\ submeteu o trabalho intitulado \emph{\DataFields{student}{worktitle}}, não tendo sido considerad\DataFields{student}{article} apt\DataFields{student}{article} pela banca listada abaixo. Posto em exame, \DataFields{student}{article} mesm\DataFields{student}{article} foi APROVAD\DataFields{student}{Article} com conceito final \DataFields{student}{grade}.\\[2em] \studentBoardI - }% + } { \DataFields{student}{Article} alun\DataFields{student}{article} \emph{\DataFields{student}{name}}\ submeteu o trabalho intitulado \emph{\DataFields{student}{worktitle}}, não tendo sido considerad\DataFields{student}{article} apt\DataFields{student}{article} pela banca listada abaixo. Posto em exame, \DataFields{student}{article} mesm\DataFields{student}{article} foi REPROVAD\DataFields{student}{Article} com conceito final \DataFields{student}{grade}.\\[2em] \studentBoardI - }% + } { \DataFields{student}{Article} alun\DataFields{student}{article} \emph{\DataFields{student}{name}}\ não concluiu o trabalho de conclusão de Curso tendo sido REPROVAD\DataFields{student}{Article} com conceito final \textbf{FF}. } } %%% -\SetForm{referral-I}{closing}{% +\SetForm{referral-I}{closing}{ \begin{flushright} Porto Alegre, \UseConst{publ.day} de \UseConst{publ.month} de \UseConst{publ.year}.\\[2em] @@ -870,8 +858,8 @@ O texto submetido: } -\NewDocumentCommand{\studentCoadvLabelCase}{}{%% - \studentCoadvCase{\UseLabel{advisors} : \DataFields{student.advisor}{name} / \DataFields{student.coadvisor}{name}}{\UseLabel{advisor} : \DataFields{student.advisor}{name}}%% +\NewDocumentCommand{\studentCoadvLabelCase}{}{ + \studentCoadvCase{\UseLabel{advisors} : \DataFields{student.advisor}{name} / \DataFields{student.coadvisor}{name}}{\UseLabel{advisor} : \DataFields{student.advisor}{name}} } \NewDocumentCommand{\studentBoardI}{}{ @@ -880,9 +868,10 @@ O texto submetido: \begin{center}% \begin{tabular}{p{\UseConst{report.tabA*}}@{\ }p{\UseConst{report.tabB*}}@{\ }c}%\hline% & \UseLabel{board} \\\hline% - \multirow{2}={\DataFields{student}{name}} % + \multirow{3}={\DataFields{student}{name}} % &\DataFields{student.reviewer[2]}{name}\\% &\DataFields{student.reviewer[3]}{name}\\% + & ~\\[-2.5ex] \multicolumn{2}{l}{\ \ \studentCoadvLabelCase} \\\hline% \end{tabular}% \end{center}% @@ -908,9 +897,10 @@ O texto submetido: \UseLabel{Ngrade} & \UseLabel{grade}\\\hline% } \NewDocumentCommand{\studentLineI}{}{% - \multirow{2}={\textbf{\DataFields{student}{name}}} % + \multirow{3}={\textbf{\DataFields{student}{name}}} % \ReviewerLineI{2}\\*% \ReviewerLineI{3}\\*% + \nopagebreak & ~\\[-2.5ex] \multicolumn{6}{l}{\ \ \ \studentCoadvLabelCase} & \textbf{\DataFields{student}{gradeavrg}} & \textbf{\DataFields{student}{grade}}%\\* \hline% } @@ -919,9 +909,9 @@ O texto submetido: } -\NewDocumentCommand{\studentExtLine}{m}{% +\NewDocumentCommand{\studentExtLine}{mm}{% \\[-1em]% - \multicolumn{#1}{l}{\ \ \ \UseLabel{worktitle}: \DataFields{student}{worktitle}}\\* + \multicolumn{#1}{p{#2}}{\ \ \ \UseLabel{worktitle}: \DataFields{student}{worktitle}}\\* \multicolumn{#1}{l}{\ \ \ (\UseLabel{Nproc}: \DataFields{student}{Nproc}) \UseLabel{student.ID}: \DataFields{student}{ID} / \DataFields{student}{email}}\\* \multicolumn{#1}{l}{\ \ \ \UseLabel{remarks}: \DataFields{student}{remarks}}%\\ \hline } @@ -985,10 +975,11 @@ O texto submetido: \begin{center}% \begin{tabular}{p{\UseConst{report.tabA*}}@{\ }p{\UseConst{report.tabB*}}@{\ }c}%\hline% & \UseLabel{board} \\\hline% - \multirow{3}={\DataFields{student}{name}} % + \multirow{4}={\DataFields{student}{name}} % &\DataFields{student.reviewer[1]}{name}\\% &\DataFields{student.reviewer[2]}{name}\\% &\DataFields{student.reviewer[3]}{name}\\% + & ~\\[-2.5ex] \multicolumn{2}{l}{\ \ \studentCoadvLabelCase} \\\hline% \end{tabular}% \end{center}% @@ -1013,10 +1004,11 @@ O texto submetido: \UseLabel{Ngrade} & \UseLabel{grade}\\\hline% } \NewDocumentCommand{\studentLineII}{}{% - \multirow{3}={\textbf{\DataFields{student}{name}}} % + \multirow{4}={\textbf{\DataFields{student}{name}}} % \ReviewerLineII{1}\\*% \ReviewerLineII{2}\\*% \ReviewerLineII{3}\\*% + \nopagebreak & ~\\[-2.5ex] \multicolumn{5}{l}{\ \ \ \studentCoadvLabelCase} & \textbf{\DataFields{student}{gradeavrg}} & \textbf{\DataFields{student}{grade}}%\\ \hline% } @@ -1030,6 +1022,8 @@ O texto submetido: +\ExplSyntaxOn + %%%%%%%%%%%%%%% %% report TCC - I @@ -1038,17 +1032,16 @@ O texto submetido: \SetForm{report-I}{title}{Relatório Acompanhamento - \UseTerm{semester}} \SetForm{report-I}{opening}{} -\ExplSyntaxOn %%% \SetForm{report-I}{opening}{ % { \tiny \begin{longtable}{p{\UseConst{report.tabA}}@{\ }p{\UseConst{report.tabB}}@{\ }p{\UseConst{report.tabC}}@{\ }p{\UseConst{report.tabD}}@{\ }p{\UseConst{report.tabE}}@{\ }p{\UseConst{report.tabEx}}@{\ }p{\UseConst{report.tabF}}@{\ }p{\UseConst{report.tabG}}}% \HeaderLineI - \seq_map_inline:cn {l__ufrgscca_baselist_graded_seq} + \seq_map_inline:Nn \l__ufrgscca_baselist_graded_seq { - \starray_set_iter_from_hash:nn {student} {#1} + \studentselect{#1} \studentLineI\\*\hline - \studentExtLine{8}\\\hline + \studentExtLine{8}{\UseConst{report.tabMult.I}}\\\hline } \reportMissCase{8}{\l__ufrgscca_baselist_ff_seq}{Desistentes~ com~ conceito~ (2o ~ semestre)} \reportMissCase{8}{\l__ufrgscca_baselist_dismiss_seq}{Desistentes~ sem~ conceito~ (1o ~ semestre)}[magenta] @@ -1076,8 +1069,6 @@ O texto submetido: } } -\ExplSyntaxOff - %%%%%%%%%%%%%%% @@ -1087,17 +1078,16 @@ O texto submetido: \SetForm{report-II}{title}{Relatório Acompanhamento - \UseTerm{semester}} \SetForm{report-II}{opening}{} -\ExplSyntaxOn %%% \SetForm{report-II}{opening}{ % { \tiny \begin{longtable}{p{\UseConst{report.tabA}}@{\ }p{\UseConst{report.tabB}}@{\ }p{\UseConst{report.tabC}}@{\ }p{\UseConst{report.tabD}}@{\ }p{\UseConst{report.tabE}}@{\ }p{\UseConst{report.tabF}}@{\ }p{\UseConst{report.tabG}}}% \HeaderLineII - \seq_map_inline:cn {l__ufrgscca_baselist_graded_seq} + \seq_map_inline:Nn \l__ufrgscca_baselist_graded_seq { - \starray_set_iter_from_hash:nn {student} {#1} + \studentselect{#1} \studentLineII\\*\hline - \studentExtLine{7}\\\hline + \studentExtLine{7}{\UseConst{report.tabMult.II}}\\\hline } \reportMissCase{7}{\l__ufrgscca_baselist_ff_seq}{Desistentes~ com~ conceito~ (2o ~ semestre)} \reportMissCase{7}{\l__ufrgscca_baselist_dismiss_seq}{Desistentes~ sem~ conceito~ (1o ~ semestre)}[magenta] @@ -1173,10 +1163,6 @@ O texto submetido: %%% \SetForm{checklist-II}{closing}{} -\ExplSyntaxOff - - - @@ -1187,7 +1173,6 @@ O texto submetido: \SetForm{boards}{title}{\UseTerm{board.title}} \SetForm{boards}{opening}{} -\ExplSyntaxOn %%% \SetForm{boards}{opening}{ % {\footnotesize @@ -1202,8 +1187,6 @@ O texto submetido: \starray_term_syntax:n {student} \tl_gset:Ne \l__ufrgscca_daytmpb_tl {\starray_parsed_get_prop:n{board-date}} \tl_gset:Ne \l__ufrgscca_daytmpc_tl {\UseConst{date:\l__ufrgscca_daytmpb_tl}} - %\tl_gset:Ne \l__ufrgscca_daytmpD_tl {date:\l__ufrgscca_daytmpb_tl} - %\tl_gset:Ne \l__ufrgscca_daytmpc_tl {\UseConst{\l__ufrgscca_daytmpD_tl}} \studentNewPageCase {\kill\pagebreak\tl_gset:Nn \l__ufrgscca_daytmpa_tl {}} {} @@ -1217,13 +1200,14 @@ O texto submetido: && \DataFields{student.reviewer[2]}{name} \\* && \DataFields{student.reviewer[3]}{name} \\* && (\DataFields{student.altreviewer[1]}{name}) \\* - \multicolumn{4}{l}{\textsc{Título:}\ \emph{\DataFields{student}{worktitle}}}\\\hline + \multicolumn{4}{p{\UseConst{board.tabAll}}}{\textsc{Título:}\ \emph{\DataFields{student}{worktitle}}}\\\hline } \end{longtable} {\scriptsize\UseTerm{board.obs}} } } + \ExplSyntaxOff %%% diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-lists.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-lists.sty index 3d34c7c927..0e00613fe4 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-lists.sty +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-lists.sty @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version {2.0} {2023/11/23} +%% This is version {2.1} {2023/11/30} %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -27,8 +27,8 @@ \ProvidesExplPackage {ufrgscca-lists} - {2023/11/23} - {2.0} + {2023/11/30} + {2.1} {UFRGS/CCA auxiliary lists commands} @@ -42,8 +42,8 @@ { name .code:n = {ufrgscca-lists} , prefix .code:n = {ufrgscca} , - date .code:n = {2023/11/23} , - version .code:n = {2.0} , + date .code:n = {2023/11/30} , + version .code:n = {2.1} , description .code:n = {UFRGS/CCA~Auxiliary~ lists~ commands} } \cs_if_exist:NF \__codedesc_pkg_info:nn diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-ppc.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-ppc.sty index 34939ff17e..4a176fd236 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-ppc.sty +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-ppc.sty @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version {2.0} {2023/11/23} +%% This is version {2.1} {2023/11/30} %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -27,8 +27,8 @@ \ProvidesExplPackage {ufrgscca-ppc} - {2023/11/23} - {2.0} + {2023/11/30} + {2.1} {UFRGS/CCA PPC commands} %%%%%%% @@ -41,8 +41,8 @@ { name .code:n = {ufrgscca-ppc} , prefix .code:n = {ufrgscca} , - date .code:n = {2023/11/23}, - version .code:n = {2.0} , + date .code:n = {2023/11/30}, + version .code:n = {2.1} , description .code:n = {UFRGS/CCA~ auxiliary~ PPC-related~ (indicators)~ commands} } \cs_if_exist:NF \__codedesc_pkg_info:nn diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-terms-en.tex b/macros/latex/contrib/ufrgscca/latex/ufrgscca-terms-en.tex index 04f3fa11d0..c061c01555 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-terms-en.tex +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-terms-en.tex @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version {2.0} {2023/11/23} +%% This is version {2.1} {2023/11/30} %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-terms-ptBR.tex b/macros/latex/contrib/ufrgscca/latex/ufrgscca-terms-ptBR.tex index 187a58ebf0..d8cd5d3b24 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-terms-ptBR.tex +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-terms-ptBR.tex @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version {2.0} {2023/11/23} +%% This is version {2.1} {2023/11/30} %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -239,7 +239,7 @@ \SetConsts{% - report.tabA = {32mm} , + report.tabA = {34mm} , report.tabA* = {42mm} , report.tabB = {42mm} , report.tabB* = {62mm} , @@ -249,6 +249,8 @@ report.tabEx = {15mm} , report.tabF = {8mm} , report.tabG = {12mm} , + report.tabMult.II = {141mm} , % A+B+C+D+E+F+G + report.tabMult.I = {156mm} , % A+B+C+D+E+F+G + Ex } \SetConsts{% @@ -256,6 +258,7 @@ board.tabB = {38mm} , board.tabC = {60mm} , board.tabD = {13mm} , + board.tabAll = {148mm} , } \SetConsts{% diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca.cls b/macros/latex/contrib/ufrgscca/latex/ufrgscca.cls index dd87d1ea35..4aa296e5c4 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca.cls +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca.cls @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version {2.0} {2023/11/23} +%% This is version {2.1} {2023/11/30} %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -27,8 +27,8 @@ \ProvidesExplClass {ufrgscca} - {2023/11/23} - {2.0} + {2023/11/30} + {2.1} {UFRGS/CCA class} @@ -42,8 +42,8 @@ { name .code:n = {ufrgscca} , prefix .code:n = {ufrgscca} , - date .code:n = {2023/11/23}, - version .code:n = {2.0} , + date .code:n = {2023/11/30}, + version .code:n = {2.1} , description .code:n = {UFRGS/CCA~a~report~based~class~bundle} } \cs_if_exist:NF \__codedesc_pkg_info:nn @@ -133,6 +133,14 @@ \prop_put_from_keyval:Nn \l__ufrgscca_const_prop {#1} } +\cs_generate_variant:Nn \prop_put:Nnn {Nee} +\NewDocumentCommand{\eSetConst}{mm} + { + \prop_put:Nee \l__ufrgscca_const_prop {#1}{#2} + } + + + \cs_generate_variant:Nn \prop_item:Nn {Ne} %% |