summaryrefslogtreecommitdiff
path: root/macros
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2023-11-25 03:03:12 +0000
committerNorbert Preining <norbert@preining.info>2023-11-25 03:03:12 +0000
commitad976e54f48605a66054bc56e945dabc425c956a (patch)
treef3905ec1ab486d1cf12b064887e311f2ea10bebf /macros
parentac5a5e57a4c9b3c436c3bac327fe885acea28ba4 (diff)
CTAN sync 202311250303
Diffstat (limited to 'macros')
-rw-r--r--macros/latex/contrib/pdfannotations/3.1.README.tex267
-rw-r--r--macros/latex/contrib/pdfannotations/README.txt236
-rw-r--r--macros/latex/contrib/pdfannotations/pdfannotations.cls33
-rw-r--r--macros/latex/contrib/pdfannotations/pdfannotations.sty136
-rw-r--r--macros/latex/contrib/pdfannotations/pdfannotations.tex70
-rw-r--r--macros/latex/contrib/simplebnf/simplebnf-doc.pdfbin156004 -> 80558 bytes
-rw-r--r--macros/latex/contrib/simplebnf/simplebnf-doc.tex645
-rw-r--r--macros/latex/contrib/simplebnf/simplebnf.sty577
-rw-r--r--macros/latex/contrib/ufrgscca/README.md45
-rw-r--r--macros/latex/contrib/ufrgscca/doc/ufrgscca.pdfbin632430 -> 586726 bytes
-rw-r--r--macros/latex/contrib/ufrgscca/doc/ufrgscca.tex1020
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-abnt.sty894
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-base-en.def (renamed from macros/latex/contrib/ufrgscca/latex/ufrgscca-en-base.def)13
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-base-ptBR.def (renamed from macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-base.def)11
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-coord.sty1629
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-core.sty775
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-cover-ptBR.tex322
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-cover.sty567
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-curr-graph.sty101
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-curr-tab.sty163
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-curr.sty743
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-en-coord.def101
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-en-core.def68
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-en-forms.def183
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.sty883
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.tex1277
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-formsTR.sty313
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-formsintern.sty148
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-gen.sty120
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-lists.sty133
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-ppc.sty977
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-coord.def167
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-core.def95
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-forms.def319
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-terms-en.tex103
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca-terms-ptBR.tex267
-rw-r--r--macros/latex/contrib/ufrgscca/latex/ufrgscca.cls398
37 files changed, 7962 insertions, 5837 deletions
diff --git a/macros/latex/contrib/pdfannotations/3.1.README.tex b/macros/latex/contrib/pdfannotations/3.1.README.tex
new file mode 100644
index 0000000000..5173442f6b
--- /dev/null
+++ b/macros/latex/contrib/pdfannotations/3.1.README.tex
@@ -0,0 +1,267 @@
+\documentclass{article}
+\usepackage{hyperref}
+\usepackage{geometry}
+\usepackage{enumitem}
+\geometry{margin=1in}
+
+\title{README FOR pdfannotations PACKAGE}
+\date{Version: 3.1\\Date: 2023-11-22}
+\author{}
+
+\begin{document}
+\maketitle
+
+\section*{Overview}
+pdfannotations is a \LaTeX{} package designed for annotating PDF slides with \LaTeX{} elements, adding interludes, and including code snippets. In its latest version, the package has been enhanced with improved error handling and debug logging for more robust and informative user interaction. It offers a flexible way to enhance PDF presentation slides with additional \LaTeX{} content. The package utilizes \LaTeX3 syntax and requires the pdf\LaTeX{} compiler.
+
+\section*{Features and Usage}
+The pdfannotations package includes the following commands and environments:
+\begin{enumerate}
+ \item \textbf{slideannotate:}
+ \begin{itemize}
+ \item Syntax: \texttt{\textbackslash begin\{slideannotate\}\{PDF Number-Slide Number\} ... \textbackslash end\{slideannotate\}}
+ \item Allows annotations directly onto PDF slides.
+ \item Supports math and \LaTeX{} markup.
+ \item Limitation: Content does not extend to multiple pages.
+ \end{itemize}
+ \item \textbf{slideinterlude:}
+ \begin{itemize}
+ \item Syntax: \texttt{\textbackslash begin\{slideinterlude\}\{PDF Number-Slide Number\} ... \textbackslash end\{slideinterlude\}}
+ \item Inserts interludes between slides for additional content.
+ \item Supports math, \LaTeX{} markup, and programming code.
+ \item For short code snippets, \texttt{\{verbatim\}} can be used.
+ \end{itemize}
+ \item \textbf{\textbackslash annotatepdf:}
+ \begin{itemize}
+ \item Syntax: \texttt{\textbackslash annotatepdf\{PDF Number\}}
+ \item Invokes the annotation process for a specified PDF.
+ \end{itemize}
+ \item \textbf{\textbackslash labelgraphics:}
+ \begin{itemize}
+ \item Syntax: \texttt{\textbackslash labelgraphics[options]\{filename\}}
+ \item Includes graphics with filename labels.
+ \end{itemize}
+ \item \textbf{\textbackslash suppressslide:}
+ \begin{itemize}
+ \item Syntax: \texttt{\textbackslash suppressslide\{PDF Number-Slide Number\}}
+ \item Suppresses specific slides.
+ \end{itemize}
+ \item \textbf{\textbackslash includecode:}
+ \begin{itemize}
+ \item Syntax: \texttt{\textbackslash includecode[options]\{filename\}}
+ \item Includes external code with syntax highlighting.
+ \item Auto-detects language formatting by file extension.
+ \item \texttt{\{verbatim\}} recommended for short snippets within \texttt{\{slideinterlude\}}.
+ \end{itemize}
+ \item \textbf{\textbackslash listpdfs:}
+ \begin{itemize}
+ \item Lists all PDFs and their index numbers as specified in the user configuration.
+ \end{itemize}
+\end{enumerate}
+
+\section*{User Configuration}
+Customize document metadata and settings by modifying the variables in the user configuration section at the top of the package code.
+
+Here are the descriptions for each part of the user configuration section of your script:
+\begin{itemize}
+ \item \texttt{\textbackslash newcommand\{\textbackslash MyTitle\}\{...\}}: Defines the document's title.
+ \item \texttt{\textbackslash newcommand\{\textbackslash MyAuthor\}\{...\}}: Sets the author's name for the document.
+ \item \texttt{\textbackslash newcommand\{\textbackslash MyDate\}\{...\}}: Defines the date associated with the document.
+ \item \texttt{\textbackslash newcommand\{\textbackslash FirstSectionName\}\{...\}}: Sets the name of the first section or chapter.
+ \item \texttt{\textbackslash newcommand\{\textbackslash PDFMaxWidth\}\{0.80\textbackslash textwidth\}}: Specifies the maximum width for included PDF pages.
+ \item \texttt{\textbackslash newcommand\{\textbackslash MaxInterludes\}\{20\}}
+
+: Sets the maximum number of interludes allowed in the document.
+ \item \texttt{\textbackslash newcommand\{\textbackslash PDFList\}\{"Career.pdf"\}}: Creates a list of PDF files to be used in the document.
+\end{itemize}
+
+\section*{System Requirements}
+\begin{itemize}
+ \item \LaTeX3 syntax.
+ \item pdf\LaTeX{} compiler.
+\end{itemize}
+
+\section*{Successfully Tested With Packages}
+\begin{itemize}
+ \item \texttt{mathtools} - Enhances mathematical content presentation and formatting.
+ \item \texttt{cancel} - Allows simple cancellation lines in math formulas.
+ \item \texttt{booktabs} - For professional-looking tables.
+ \item \texttt{array} - Extends options for table column formats.
+ \item \texttt{longtable} - For creating multi-page tables.
+ \item \texttt{mathrsfs} - Provides mathematical script font.
+ \item \texttt{scrlayer-scrpage} - For creating and managing headers and footers.
+ \item \texttt{xcolor} - For driver-independent use of color.
+ \item \texttt{listings} - For formatting source code listings.
+ \item \texttt{seqsplit} - For splitting long sequences of characters.
+ \item \texttt{enumitem} - For customizing layout of lists.
+ \item \texttt{adjustbox} - For dynamic sizing of content.
+\end{itemize}
+
+\section*{Minimal Example}
+\begin{verbatim}
+\documentclass{article}
+\usepackage{pdfannotations}
+
+% Start of User configuration section
+% -----------------------------------
+
+% Document metadata
+\newcommand{\MyTitle}{UCSanDiegoX Probability and Statistics in Data Science using Python: Topic 3: Counting}
+\newcommand{\MyAuthor}{Chevan Nanayakkara}
+\newcommand{\MyDate}{November 2023}
+\newcommand{\FirstSectionName}{Lecture Notes: Topic 3 Counting}
+
+% User variables
+\newcommand{\PDFMaxWidth}{0.80\textwidth}
+\newcommand{\MaxInterludes}{20}
+\newcommand{\PDFList}{"Career.pdf"}
+
+% Variable Documentation:
+% PDFMaxWidth: a user-configurable command in LaTeX that sets a global
+% PDFMaxWidth: maximum width for included PDF documents, ensuring they are scaled
+% PDFMaxWidth: appropriately to fit within the specified width of the text area.
+% PDFMaxWidth: This command is particularly useful for consistently resizing
+% PDFMaxWidth: larger PDF pages to maintain a uniform and visually appealing
+% PDFMaxWidth: layout in the document.
+
+% MaxInterludes: Define the maximum number of interludes
+
+% PDFList: User-defined list of PDFs
+% PDFList: Ensure there are no spaces between the commas and each filename
+% PDFList: Ensure each filename ends in .pdf
+% PDFList: An empty string {""} is not supported and the document will not compile
+% PDFList: No string is supported {}
+
+% Define expandable commands for title, author, and date to use in headers/footers
+\NewExpandableDocumentCommand{\thetitle}{}{\MyTitle}
+\NewExpandableDocumentCommand{\theauthor}{}{\MyAuthor}
+\NewExpandableDocumentCommand{\thedate}{}{\MyDate}
+
+% --------------------------
+% End of User configuration section
+
+\begin{document}
+
+\begin{slideannotate}{1-2}
+Annotation for slide 2 of the first PDF.
+\end{slideannotate}
+
+\begin{slideinterlude}{1-3}
+Interlude with \LaTeX{} markup and math like \( E = mc^2 \).
+\includecode{example.py}
+\end{slideinterlude}
+
+\annotatepdf{1}
+\listpdfs
+
+\end{document}
+\end{verbatim}
+(Replace "example.py" with a real file path.)
+
+\subsection*{GitHub Repository}
+\url{https://github.com/chevannanayakkara/pdfannotations}
+
+\subsection*{License}
+Free with no warranty under the LaTeX Project Public License (LPPL) version 1.3c.
+
+\section*{Changelog}
+
+\begin{itemize}
+ \item \textbf{Version 3.1 (2023-11-22):}
+ \begin{itemize}
+ \item Introduced `PDFMaxWidth` for dynamic scaling of included PDF documents.
+ \end{itemize}
+
+ \item \textbf{Version 3.0 (2023-11-21):}
+ \begin{itemize}
+ \item Improved error trapping and messages for empty or malformed PDF List.
+ \item Provided verbose messages in the document for out of bounds indexes for \texttt{\textbackslash annotatepdf} and \texttt{\textbackslash listpdfs}.
+ \item Added detailed debug log information, search for "PDFAnnotations".
+ \end{itemize}
+
+ \item \textbf{Version 2.4.1 (2023-11-15):}
+ \begin{itemize}
+ \item Added new command \texttt{\textbackslash listpdfs} that shows all PDFs and their index number for use with the \texttt{\textbackslash annotatepdf} command.
+ \end{itemize}
+
+ \item \textbf{Version 2.3 (2023-11-10):}
+ \begin{itemize}
+ \item Brought all user-specified variables to the top of the preamble for easier customization.
+ \item Added \texttt{\textbackslash listpdfs} command to list all PDFs and their index numbers.
+ \end{itemize}
+
+ \item \textbf{Version 2.2.3 (2023-11-08):}
+ \begin{itemize}
+ \item Added packages booktabs and longtable for table environment support.
+ \item Reformatted the entire document for improved readability and structure.
+ \end{itemize}
+
+ \item \textbf{Version 2.2.2 (2023-11-07):}
+ \begin{itemize}
+ \item Removed the changelog from the code to be included in the README file instead.
+ \end{itemize}
+
+ \item \textbf{Version 2.2.1 (2023-11-06):}
+ \begin{itemize}
+ \item Modified when \texttt{\textbackslash clearpage} is invoked to make slide transitions more natural.
+ \end{itemize}
+
+ \item \textbf{Version 2.2:}
+ \begin{itemize}
+ \item Moved title, author, and date to user-specified variables.
+ \item Ensured that full text is used without stripping spaces.
+ \item Reorganized the code and added comments to sections for clarity.
+ \end{itemize}
+
+ \item \textbf{Version 2.1:}
+ \begin{itemize}
+ \item Added syntax highlighting and line numbers for included Python code blocks.
+ \item Language formatting is auto-detected by the included file's extension.
+ \end{itemize}
+
+ \item \textbf{Version 2.0:}
+ \begin{itemize}
+ \item Added functionality to include multi-line code from an external file into the \{slideinterlude\} environment.
+ \end{itemize}
+
+ \item \textbf{Version 1.9.1:}
+ \begin{itemize}
+ \item Fixed a bug in \texttt{\textbackslash labelgraphics} where the interlude format was not preserved.
+ \end{itemize}
+
+ \item \textbf{Version 1.9:}
+ \begin{itemize}
+ \item Introduced \texttt{\textbackslash suppressslide\{x-y\}} command to exclude specific slides from being displayed.
+ \end{itemize}
+
+ \item \textbf{Version 1.8:}
+ \begin{itemize}
+ \item Introduced \texttt{\textbackslash labelgraphics} to auto-display image filename below the image.
+ \end{itemize}
+
+ \item \textbf{Version 1.7.1:}
+ \begin{itemize}
+ \item Changed interlude slide labels to: "Slide Interlude".
+ \end{itemize}
+
+ \item \textbf{Version 1.7:}
+ \begin{itemize}
+ \item Added auto-detection of the number of pages in PDFs.
+ \end{itemize}
+
+ \item \textbf{Version 1.6:}
+ \begin{itemize}
+ \item Grouped user-specified variables.
+ \item Cleaned up code and eliminated redundant elements.
+ \end{itemize}
+
+ \item \textbf{Version 1.5:}
+ \begin{itemize}
+ \item Converted \texttt{\textbackslash begin\{slideannotate\}} command to slideannotate environment.
+ \end{itemize}
+\end{itemize}
+
+
+Note: This README complements the full documentation available on GitHub.
+
+\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/pdfannotations/README.txt b/macros/latex/contrib/pdfannotations/README.txt
new file mode 100644
index 0000000000..16ae666d21
--- /dev/null
+++ b/macros/latex/contrib/pdfannotations/README.txt
@@ -0,0 +1,236 @@
+README FOR pdfannotations PACKAGE
+=================================
+
+Version: 3.1
+Date: 2023-11-22
+
+Overview
+--------
+pdfannotations is a LaTeX package designed for annotating PDF slides with LaTeX elements, adding interludes, and including code snippets. In its latest version, the package has been enhanced with improved error handling and debug logging for more robust and informative user interaction. It offers a flexible way to enhance PDF presentation slides with additional LaTeX content. The package utilizes LaTeX3 syntax and requires the pdfLaTeX compiler.
+
+Features and Usage
+------------------
+The pdfannotations package includes the following commands and environments:
+
+1. slideannotate:
+ - Syntax: \begin{slideannotate}{PDF Number-Slide Number} ... \end{slideannotate}
+ - Allows annotations directly onto PDF slides.
+ - Supports math and LaTeX markup.
+ - Limitation: Content does not extend to multiple pages.
+
+2. slideinterlude:
+ - Syntax: \begin{slideinterlude}{PDF Number-Slide Number} ... \end{slideinterlude}
+ - Inserts interludes between slides for additional content.
+ - Supports math, LaTeX markup, and programming code.
+ - For short code snippets, {verbatim} can be used.
+
+3. \annotatepdf:
+ - Syntax: \annotatepdf{PDF Number}
+ - Invokes the annotation process for a specified PDF.
+
+4. \labelgraphics:
+ - Syntax: \labelgraphics[options]{filename}
+ - Includes graphics with filename labels.
+
+5. \suppressslide:
+ - Syntax: \suppressslide{PDF Number-Slide Number}
+ - Suppresses specific slides.
+
+6. \includecode:
+ - Syntax: \includecode[options]{filename}
+ - Includes external code with syntax highlighting.
+ - Auto-detects language formatting by file extension.
+ - {verbatim} recommended for short snippets within {slideinterlude}.
+
+7. \listpdfs:
+ - Lists all PDFs and their index numbers as specified in the user configuration.
+
+
+
+User Configuration
+------------------
+Customize document metadata and settings by modifying the variables in the user configuration section at the top of the package code.
+
+Here are the descriptions for each part of the user configuration section of your script:
+
+- `\newcommand{\MyTitle}{...}`: This command defines the title of your document.
+
+- `\newcommand{\MyAuthor}{...}`: This command sets the author's name for the document.
+
+- `\newcommand{\MyDate}{...}`: This command defines the date associated with the document.
+
+- `\newcommand{\FirstSectionName}{...}`: This command sets the name of the first section or chapter in your document.
+
+- `\newcommand{\PDFMaxWidth}{0.80\textwidth}`: This command specifies the maximum width for included PDF pages as a percentage of the text width of the document. Here, it's set to 80% of the text width. This ensures that included PDFs are scaled appropriately to fit within this width.
+
+- `\newcommand{\MaxInterludes}{20}`: This command sets the maximum number of interludes (breaks or separate sections) allowed in the document. The value `20` can be adjusted based on the number of interludes you plan to include.
+
+- `\newcommand{\PDFList}{"Career.pdf"}`: This command creates a list of PDF files to be used in the document. It's currently set to include only one file, "Career.pdf." This list can be modified to include multiple PDFs by separating the filenames with commas within the curly braces.
+
+These commands provide a customizable framework for your document, allowing you to easily adjust key elements like the title, author, date, and specific document settings.
+
+System Requirements
+-------------------
+- LaTeX3 syntax.
+- pdfLaTeX compiler.
+
+Successfully Tested With Packages
+---------------------------------
+{mathtools} - Enhances the presentation and formatting of mathematical content in documents. Provides various tools and utilities that extend the capabilities of amsmath.
+
+{cancel} - Allows for the placement of simple cancellation lines through parts of mathematics formulas. Useful for demonstrating the process of simplifying expressions.
+
+{booktabs} - Provides additional commands to enhance the quality of tables in LaTeX documents. Known for enabling the creation of more professional-looking tables without vertical separators.
+
+{array} - Extends the options for column formats within tables, offering greater flexibility and control over the layout and presentation of table content.
+
+{longtable} - Facilitates the creation of tables that continue over multiple pages. This package is essential for handling large tables that do not fit on a single page.
+
+{mathrsfs} - Offers access to the mathematical script font for use in LaTeX documents. Ideal for typesetting script-style mathematical expressions.
+
+{mathtools} (listed twice, so the same description applies) - Enhances the presentation and formatting of mathematical content in documents.
+
+{scrlayer-scrpage} - Provides user-friendly interfaces for creating and managing headers and footers in documents. It's a component of the KOMA-Script bundle.
+
+{xcolor} - Allows for easy driver-independent use of color in LaTeX documents. It supports various color models and offers a range of utilities for color manipulation.
+
+{listings} - Used for formatting source code listings with syntax highlighting. Supports a wide range of programming languages and offers customization options.
+
+{seqsplit} - Useful for splitting long sequences of characters, typically in situations where long strings need to be broken down to fit into the layout without overflowing the margins.
+
+{enumitem} - Provides control over the layout of itemize, enumerate, and description environments. It allows for easy customization of labels and spacing in lists.
+
+{adjustbox} - Offers an environment and macros to adjust general content (boxes). Particularly useful for scaling, resizing, trimming, or constraining content dimensions such as images or tables.
+
+Minimal Example
+---------------
+\documentclass{article}
+\usepackage{pdfannotations}
+
+% Start of User configuration section
+% -----------------------------------
+
+% Document metadata
+\newcommand{\MyTitle}{UCSanDiegoX Probability and Statistics in Data Science using Python: Topic 3: Counting}
+\newcommand{\MyAuthor}{Chevan Nanayakkara}
+\newcommand{\MyDate}{November 2023}
+\newcommand{\FirstSectionName}{Lecture Notes: Topic 3 Counting}
+
+% User variables
+\newcommand{\PDFMaxWidth}{0.80\textwidth}
+\newcommand{\MaxInterludes}{20}
+\newcommand{\PDFList}{"Career.pdf"}
+
+% Variable Documentation:
+% PDFMaxWidth: a user-configurable command in LaTeX that sets a global
+% PDFMaxWidth: maximum width for included PDF documents, ensuring they are scaled
+% PDFMaxWidth: appropriately to fit within the specified width of the text area.
+% PDFMaxWidth: This command is particularly useful for consistently resizing
+% PDFMaxWidth: larger PDF pages to maintain a uniform and visually appealing
+% PDFMaxWidth: layout in the document.
+
+% MaxInterludes: Define the maximum number of interludes
+
+% PDFList: User-defined list of PDFs
+% PDFList: Ensure there are no spaces between the commas and each filename
+% PDFList: Ensure each filename ends in .pdf
+% PDFList: An empty string {""} is not supported and the document will not compile
+% PDFList: No string is supported {}
+
+% Define expandable commands for title, author, and date to use in headers/footers
+\NewExpandableDocumentCommand{\thetitle}{}{\MyTitle}
+\NewExpandableDocumentCommand{\theauthor}{}{\MyAuthor}
+\NewExpandableDocumentCommand{\thedate}{}{\MyDate}
+
+% --------------------------
+% End of User configuration section
+
+\begin{document}
+
+\begin{slideannotate}{1-2}
+Annotation for slide 2 of the first PDF.
+\end{slideannotate}
+
+\begin{slideinterlude}{1-3}
+Interlude with \LaTeX{} markup and math like \( E = mc^2 \).
+\includecode{example.py}
+\end{slideinterlude}
+
+\annotatepdf{1}
+\listpdfs
+
+\end{document}
+(Replace "example.py" with a real file path.)
+
+GitHub Repository: https://github.com/chevannanayakkara/pdfannotations
+
+License
+-------
+Free with no warranty under the LaTeX Project Public License (LPPL) version 1.3c.
+
+Note: This README complements the full documentation available on GitHub.
+
+Changelog
+---------
+
+Version 3.1 (2023-11-22):
+- Introduced `PDFMaxWidth` for dynamic scaling of included PDF documents.
+
+Version 3.0 (2023-11-21):
+- Improved error trapping and messages for empty or malformed PDF List.
+- Provided verbose messages in the document for out of bounds indexes for \annotatepdf and \listpdfs
+- Added detailed debug log information, search for "PDFAnnotations"
+
+
+Version 2.4.1 (2023-11-15):
+- Added new command \listpdfs that shows all PDFs and their index number for use with the \annotatepdf command.
+
+Version 2.3 (2023-11-10):
+- Brought all user-specified variables to the top of the preamble for easier customization.
+- Added \listpdfs command to list all PDFs and their index numbers.
+
+Version 2.2.3 (2023-11-08):
+- Added packages booktabs and longtable for table environment support.
+- Reformatted the entire document for improved readability and structure.
+
+Version 2.2.2 (2023-11-07):
+- Removed the changelog from the code to be included in the README file instead.
+
+Version 2.2.1 (2023-11-06):
+- Modified when \clearpage is invoked to make slide transitions more natural.
+
+Version 2.2:
+- Moved title, author, and date to user-specified variables.
+- Ensured that full text is used without stripping spaces.
+- Reorganized the code and added comments to sections for clarity.
+
+Version 2.1:
+- Added syntax highlighting and line numbers for included Python code blocks.
+- Language formatting is auto-detected by the included file's extension.
+
+Version 2.0:
+- Added functionality to include multi-line code from an external file into the {slideinterlude} environment.
+
+Version 1.9.1:
+- Fixed a bug in \labelgraphics where the interlude format was not preserved.
+
+Version 1.9:
+- Introduced \suppressslide{x
+
+-y} command to exclude specific slides from being displayed.
+
+Version 1.8:
+- Introduced \labelgraphics to auto-display image filename below the image.
+
+Version 1.7.1:
+- Changed interlude slide labels to: "Slide Interlude".
+
+Version 1.7:
+- Added auto-detection of the number of pages in PDFs.
+
+Version 1.6:
+- Grouped user-specified variables.
+- Cleaned up code and eliminated redundant elements.
+
+Version 1.5:
+- Converted \begin{slideannotate} command to slideannotate environment. \ No newline at end of file
diff --git a/macros/latex/contrib/pdfannotations/pdfannotations.cls b/macros/latex/contrib/pdfannotations/pdfannotations.cls
new file mode 100644
index 0000000000..dd91a6d146
--- /dev/null
+++ b/macros/latex/contrib/pdfannotations/pdfannotations.cls
@@ -0,0 +1,33 @@
+% pdfannotations.cls
+\ProvidesClass{pdfannotations}[2023/11/22 v3.1 PDF Annotations Document Class]
+
+% This class file extends the standard 'article' class
+% to integrate the 'pdfannotations' package functionalities.
+% It is designed to facilitate easy annotation of PDF slides,
+% inclusion of interludes, and rendering of code snippets
+% within LaTeX documents, particularly for academic and
+% presentation purposes.
+
+% Load base class (article, report, book, etc.)
+% The 'article' class is chosen for its versatility and
+% general applicability for a wide range of documents.
+\LoadClass{article}
+
+% Load your package
+% The 'pdfannotations' package provides the core functionality
+% for this document class. It should be kept up-to-date with
+% the latest version of the package.
+\RequirePackage{pdfannotations}
+
+% Additional settings or modifications for the document class
+% This section can be used to define class-specific settings
+% such as default margins, header/footer styles, or any other
+% global settings that should be applied to documents using
+% this class.
+
+% Example customization (uncomment to use):
+% \setlength{\parindent}{0pt} % Remove paragraph indentation
+% \setlength{\parskip}{1em} % Add space between paragraphs
+
+% End of pdfannotations.cls
+
diff --git a/macros/latex/contrib/pdfannotations/pdfannotations.sty b/macros/latex/contrib/pdfannotations/pdfannotations.sty
new file mode 100644
index 0000000000..c9c46537cb
--- /dev/null
+++ b/macros/latex/contrib/pdfannotations/pdfannotations.sty
@@ -0,0 +1,136 @@
+% pdfannotations.sty
+% Provides the pdfannotations package for annotating PDF slides with LaTeX elements.
+\ProvidesPackage{pdfannotations}[2023/11/22 v3.1 PDF Annotations Package]
+
+% Essential Packages
+% ------------------
+
+% Graphics and design
+\RequirePackage{graphicx} % For including graphics
+\RequirePackage{xcolor} % For defining custom colors
+\RequirePackage{listings} % For code formatting in documents
+
+% LaTeX3 Programming Syntax
+% -------------------------
+\RequirePackage{xparse} % For defining LaTeX commands
+\RequirePackage{expl3} % For LaTeX3 syntax
+
+% PDF Handling and Hyperlinking
+% -----------------------------
+\RequirePackage[bookmarksopen=true, colorlinks=true, linkcolor=blue, citecolor=blue, urlcolor=blue]{hyperref} % For hyperlinking
+\RequirePackage{pdfpages} % For including PDF pages
+
+% Custom Colors Definition
+% ------------------------
+% These colors are used for syntax highlighting and other styling purposes.
+\definecolor{codegreen}{rgb}{0,0.6,0}
+\definecolor{codegray}{rgb}{0.5,0.5,0.5}
+\definecolor{codepurple}{rgb}{0.58,0,0.82}
+\definecolor{backcolour}{rgb}{0.95,0.95,0.92}
+\definecolor{codeblue}{rgb}{0.25,0.5,0.5}
+
+% Python Code Style Configuration
+% -------------------------------
+% This style is applied for Python code listings.
+\lstdefinestyle{pythonstyle}{
+ language=Python,
+ backgroundcolor=\color{backcolour},
+ commentstyle=\color{codegreen},
+ keywordstyle=\color{codeblue},
+ numberstyle=\tiny\color{codegray},
+ stringstyle=\color{codepurple},
+ basicstyle=\ttfamily\small,
+ breakatwhitespace=false,
+ breaklines=true,
+ captionpos=b,
+ keepspaces=true,
+ numbers=left,
+ numbersep=5pt,
+ showspaces=false,
+ showstringspaces=false,
+ showtabs=false,
+ tabsize=2
+}
+\lstset{style=pythonstyle}
+
+% LaTeX3 Syntax Activation
+\ExplSyntaxOn
+
+% Internal Variables and Counters
+% -------------------------------
+\newcounter{currentslide}
+\newcounter{totalpdfpages}
+\newcounter{currentpdfindex}
+\newcommand{\currentpdfname}{}
+\prop_new:N \g_slide_annotations_prop
+\prop_new:N \g_interludes_prop
+\tl_new:N \l_slideinterlude_content_tl
+\tl_new:N \l_slideannotate_content_tl
+\prop_new:N \g_suppressed_slides_prop
+\int_new:N \g_max_interludes_int
+\seq_new:N \g_pdf_pages_seq
+\seq_new:N \g_pdf_files_seq
+\fp_new:N \g_pdf_max_width_fp
+
+% Setting the Global Variable for Maximum PDF Width
+\fp_gset:Nn \g_pdf_max_width_fp { \dim_to_fp:n {\PDFMaxWidth} }
+
+% Log Function for Sequence Contents
+\cs_new_protected:Nn \__log_seq_contents:n
+{
+ \seq_map_inline:Nn #1
+ {
+ \iow_log:n { PDFAnnotations:~--~\tl_to_str:n {#1} }
+ }
+}
+
+% Populate PDF Sequence from User-Defined List
+\clist_if_empty:NTF \PDFList
+ {
+ \iow_log:n { PDFAnnotations:~\PDFList~is~genuinely~empty. }
+ \seq_clear:N \g_pdf_files_seq
+ \seq_clear:N \g_pdf_pages_seq
+ }
+ {
+ \iow_log:n { PDFAnnotations:~\PDFList~contains~items,~processing. }
+ \clist_map_inline:Nn \PDFList
+ {
+ \tl_set:Nn \l_tmpa_tl {#1}
+ \tl_trim_spaces:N \l_tmpa_tl
+ \tl_if_empty:NF \l_tmpa_tl
+ {
+ \seq_gput_right:Nx \g_pdf_files_seq {\exp_args:No \detokenize \l_tmpa_tl}
+ \iow_log:n { PDFAnnotations:~added~file:~\tl_to_str:n {\l_tmpa_tl} }
+ }
+ }
+ \iow_log:n { PDFAnnotations:~\g_pdf_files_seq~final~contents: }
+ \__log_seq_contents:n \g_pdf_files_seq
+ }
+
+% Auto-Detection of PDF Pages
+\cs_new_protected:Nn \__get_pdf_pages:n
+{
+ \
+
+iow_log:n { PDFAnnotations:~getting~page~count~for~file:~#1 }
+ \exp_args:Nx \pdfximage {#1}
+ \seq_gput_right:Nx \g_pdf_pages_seq {\the\pdflastximagepages}
+ \iow_log:n { PDFAnnotations:~file~#1~has~\the\pdflastximagepages~pages. }
+}
+
+% Process Each File in the Sequence
+\seq_map_inline:Nn \g_pdf_files_seq
+{
+ \iow_log:n { PDFAnnotations:~processing~file:~#1 }
+ \__get_pdf_pages:n {#1}
+ \iow_log:n { PDFAnnotations:~processed~file:~#1 }
+}
+
+\iow_log:n { PDFAnnotations:~\g_pdf_files_seq~final~contents: }
+\__log_seq_contents:n \g_pdf_files_seq
+\iow_log:n { PDFAnnotations:~\g_pdf_pages_seq~final~contents: }
+\__log_seq_contents:n \g_pdf_pages_seq
+
+\ExplSyntaxOff
+
+% End of pdfannotations.sty \ No newline at end of file
diff --git a/macros/latex/contrib/pdfannotations/pdfannotations.tex b/macros/latex/contrib/pdfannotations/pdfannotations.tex
new file mode 100644
index 0000000000..f33a5ed963
--- /dev/null
+++ b/macros/latex/contrib/pdfannotations/pdfannotations.tex
@@ -0,0 +1,70 @@
+% LaTeX3, pdfLaTeX
+% Version: 3.1
+% Date: 2023-11-22
+
+% Start of User configuration section
+% -----------------------------------
+
+% Document metadata
+\newcommand{\MyTitle}{Your Title Here}
+\newcommand{\MyAuthor}{Your Name Here}
+\newcommand{\MyDate}{Document Date Here}
+\newcommand{\FirstSectionName}{First Section Title Here}
+
+% PDF Max Width settings
+\newcommand{\PDFMaxWidth}{0.80\textwidth} % Sets max width for included PDFs
+
+% Maximum number of interludes in the document
+\newcommand{\MaxInterludes}{20}
+
+% List of PDFs to be included in the document
+\newcommand{\PDFList}{"document1.pdf","document2.pdf"}
+
+% User configuration documentation
+% ...
+
+% End of User configuration section
+% ----------------------------------
+
+% Using the custom pdfannotations document class
+\documentclass[10pt,letterpaper]{pdfannotations}
+
+\begin{document}
+
+% Setting up the title, author, and date
+\title{\MyTitle}
+\author{\MyAuthor}
+\date{\MyDate}
+
+% Generating the title
+\maketitle
+
+% Customizing list labels
+\renewcommand{\labelitemii}{$\square$}
+\renewcommand{\labelitemiii}{$\ast$}
+
+% Setting page style
+\pagestyle{empty}
+
+% Generating the table of contents
+\setcounter{secnumdepth}{0}
+\tableofcontents
+\newpage
+
+% Listing the included PDFs
+\section{List of PDFs}
+\listpdfs
+
+\newpage
+
+% Starting the main content section
+\section{\FirstSectionName}
+% Your main content goes here
+\annotatepdf{1}
+\annotatepdf{2}
+
+% Concluding section
+\section{Conclusion or Final Remarks}
+
+% End of the document
+\end{document}
diff --git a/macros/latex/contrib/simplebnf/simplebnf-doc.pdf b/macros/latex/contrib/simplebnf/simplebnf-doc.pdf
index f0b419d363..c8fb4b8444 100644
--- a/macros/latex/contrib/simplebnf/simplebnf-doc.pdf
+++ b/macros/latex/contrib/simplebnf/simplebnf-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/simplebnf/simplebnf-doc.tex b/macros/latex/contrib/simplebnf/simplebnf-doc.tex
index 72fa982e24..1181d3f203 100644
--- a/macros/latex/contrib/simplebnf/simplebnf-doc.tex
+++ b/macros/latex/contrib/simplebnf/simplebnf-doc.tex
@@ -1,18 +1,78 @@
-\documentclass[a4paper]{article}
+\documentclass[11pt]{article}
+\usepackage{geometry}
+\geometry{a4paper,top=1in,bottom=1in,left=1.2in,right=1.2in}
-\usepackage{simplebnf}
-\usepackage{hyperref}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Font setup %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Works for pdfLaTeX, XeLaTeX, and LuaLaTeX
+\usepackage{libertine}
+
+% Math/Mono font setup
+\ExplSyntaxOn
+\bool_if:nTF { \sys_if_engine_xetex_p: || \sys_if_engine_luatex_p: }
+ {
+ % Load mathtools before unicode-math
+ \usepackage{mathtools}
+ \usepackage[
+ math-style=ISO,
+ warnings-off={mathtools-colon, mathtools-overbracket},
+ ]{unicode-math}
+ \setmathfont{LibertinusMath-Regular.otf}[Scale = MatchUppercase]
+ \setmathfont{Garamond-Math.otf}[
+ Scale = MatchUppercase,
+ range = {\Coloneq}
+ ]
+
+ \setmonofont{Inconsolatazi4}[
+ Extension = .otf,
+ UprightFont = *-Regular,
+ BoldFont = *-Bold,
+ Scale=MatchLowercase,
+ AutoFakeSlant = 0.2,
+ ]
+ }
+ {
+ \usepackage[libertine]{newtxmath}
+ \usepackage{inconsolata}
+ }
+\ExplSyntaxOff
+
+% Some fancy symbols (prevent being overwritten by math fonts)
+\AtBeginDocument{%
+ \usepackage[
+ only, fatsemi, fatslash, talloblong, rightarrowtriangle
+ ]{stmaryrd}%
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Presentations %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{tcolorbox}
\tcbuselibrary{listings,breakable}
-\tcbset{listing engine=listings,colframe=black,colback=white,size=small}
+\tcbset{listing engine=listings, colframe=black, colback=white, size=small}
+
+\NewTCBListing { example } { !O{} !s }
+ {
+ sharp corners,
+ IfBooleanTF = { #2 }
+ { listing above text }
+ { listing side text },
+ fontlower = \small,
+ #1
+ }
+
+\NewTCBListing { listing } { !O{} }
+ { sharp corners, listing only, #1 }
+
\NewDocumentEnvironment {exampleside} {}
- { \tcblisting{listing side text,righthand width=.55\textwidth} }
+ { \tcblisting{listing side text,righthand width=.5\textwidth} }
{ \endtcblisting }
-\NewDocumentCommand \cmd { m } {\texttt{\textbackslash#1}}
-
\NewDocumentEnvironment { presentcommand } { b }
{%
\vspace*{0.5\baselineskip}\noindent\fbox{%
@@ -22,84 +82,432 @@
}
{ }
+
+\NewDocumentCommand \cmd { m } {\texttt{\char`\\#1}}
\NewDocumentCommand \env { m m }
{
\texttt{%
- \textbackslash begin\{#1\} \textrm{#2}%
- \textbackslash end\{#1\}%
+ \char`\\begin\{#1\} \textrm{#2}%
+ \char`\\end\{#1\}%
}%
}
+
+\usepackage{tabularray}
+\UseTblrLibrary{booktabs}
+% \fakeverb
+\usepackage{codehigh}
+
+
+\newcommand*{\secref}[1]{\hyperref[{#1}]{section~\ref*{#1} -- \emph{\nameref*{#1}}}}
+\newcommand*{\subsecref}[1]{\hyperref[{#1}]{subsection~\ref*{#1} -- \emph{\nameref*{#1}}}}
+\newcommand*{\subsubsecref}[1]{\hyperref[{#1}]{\nameref*{#1}}}
+\newcommand*{\parref}[1]{\hyperref[{#1}]{\nameref*{#1}}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% simplebnf %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\usepackage{simplebnf}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Miscellaneous %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\usepackage{hologo}
+\newcommand*{\XeLaTeX}{\hologo{XeLaTeX}}
+\newcommand*{\LuaLaTeX}{\hologo{LuaLaTeX}}
+
+% ``Make sure it comes *last* of your loaded packages"
+\usepackage[pdfborder={0 0 0}, colorlinks=true]{hyperref}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Metadata %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
\title{%
\textsf{simplebnf} --- A simple package to format Backus-Naur form%
- \footnote{This file describes v0.3.2.}}
+ \footnote{This file describes v1.0.0.}}
\author{Jay Lee\footnote{E-mail: %
\href{mailto:jaeho.lee@snu.ac.kr}{\texttt{jaeho.lee@snu.ac.kr}}}}
-\date{2023/01/07}
+\date{2023/11/25}
+
\begin{document}
\maketitle
-This package provides a simple way to typeset grammars written in Backus-Naur form (BNF).
-
-\begin{presentcommand}
- \cmd{SimpleBNFDefEq}
-\end{presentcommand}
-This command is used to typeset the definition symbol separate a nonterminal from its productions. It defaults to \SimpleBNFDefEq. It can be redefined using \verb|RenewDocumentCommand|.
-
-\begin{presentcommand}
- \cmd{SimpleBNFDefOr}
-\end{presentcommand}
-This command is used to typeset the separator symbol between productions. It defaults to \SimpleBNFDefOr. It can be redefined using \verb|RenewDocumentCommand|.
-
-\begin{presentcommand}
- \cmd{SimpleBNFStretch}
-\end{presentcommand}
-This command is used to control the vertical spacing between consecutive rules.
-It defaults to 0.
-It can be redefined using \verb/Renewdocumentcommand/.
-
-\begin{presentcommand}
- \cmd{bnfexpr}
-\end{presentcommand}
-This command is used when typesetting the BNF nonterminal and productions. It defaults to a wrappers around \cmd{texttt}. It can be redefined to customized output using \verb|RenewDocumentCommand|.
-
-\begin{presentcommand}
- \cmd{bnfannot}
-\end{presentcommand}
-This command is used when typesetting the annotations on nonterminals and productions. It defaults to a wrappers around \cmd{textit}. It can be redefined to customized output using \verb|RenewDocumentCommand|.
-
-\begin{presentcommand}
- \env{bnfgrammar}{text}
-\end{presentcommand}
-can be used to typeset BNF grammars. The \textit{text} inside the environment should be formatted as:
-\begin{verbatim}
- term1 ::= rhs1
+
+\vfill
+This package provides a simple way for typesetting grammars in Backus-Naur form (BNF).
+It features a flexible configuration system, allowing for the customization of the domain-specific language (DSL) used in typesetting the grammar.
+Additionally, the package comes with sensible defaults.
+
+Below is the metagrammar of the DSL as defined in this package, which is typeset using the package itself.\footnote{The code is shown in \nameref{sec:appendix}.}
+\begin{tcolorbox}[sharp corners]
+ \begin{center}
+ \begin{bnf}(
+ prod-delim = ;;;,
+ new-line-delim = !,
+ single-line-delim = ?,
+ comment = //,
+ relation = {:::=|:in:},
+ relation-sym-map =
+ {
+ {:::=} = $\Coloneqq$,
+ {:in:} = $\in$,
+ },
+ )[
+ colspec = lrcll,
+ column{2} = {mode=dmath},
+ column{4} = {mode=text, font=\ttfamily},
+ ]
+ G // Gramar :::=
+ ! $P$ // production
+ ! $P \fatsemi {}$ // production w/ a trailing delimiter
+ ! $P \fatsemi G$ // production sequence
+ ;;;
+ P // Production :::= $L \rightarrowtriangle R$
+ ;;;
+ L // LHS :::=
+ ! $v$ // metavariable
+ ! $v\!\fatslash\,c$ // annotated metavariable
+ ;;;
+ R // RHS :::=
+ ! $\talloblong$ // delimiter
+ ! $A \talloblong R$ // alternative sequence
+ ;;;
+ A // Alternative :::=
+ ! $f$ // syntactic form
+ ! $f\!\fatslash\,c$ // annotated syntactic form
+ ;;;
+ \fatsemi // Prod. delimiter :::=
+ ! ;; // default symbol
+ ! $\cdots$ // user-defined
+ ;;;
+ \rightarrowtriangle // Rule relation :::=
+ ! ::= // $\Coloneqq$
+ ! -> // $\to$
+ ! \texttt{\char`\\in} // $\in$
+ ! $\cdots$ // user-defined
+ ;;;
+ \fatslash // Annot. symbol :::=
+ ! : // default symbol
+ ! $\cdots$ // user-defined
+ ;;;
+ \talloblong // Alt. delimiter :::=
+ ! | // new-line delimiter
+ ! || // single-line delimiter
+ ! $\cdots$ // user-defined
+ ;;;
+ v, f, c :in: \textsf{\TeX{} tl} // valid \TeX{} token lists
+ ;;;
+ \end{bnf}
+ \end{center}
+\end{tcolorbox}
+\vfill
+
+\section{Tutorial for the impatient}\label{sec:tutorial}
+Typesetting a grammar is as simple as typing the BNF grammar in the \verb/bnf/ environment:
+\begin{example}[righthand width=.52\linewidth]
+\begin{center}
+\begin{bnf}
+ $\tau$ : \textsf{Type} ::=
+ | \texttt{num} : numbers
+ | \texttt{str} : strings
+ ;;
+ $e$ : \textsf{Expr} ::=
+ | $x$ : variable
+ | $n$ : numeral
+ | \texttt{$e$ + $e$} : addition
+ | \texttt{$e$ * $e$} : multiplication
+ | \texttt{$e$ \textasciicircum{} $e$} : concatenation
+ | \texttt{len($e$)} : length
+ | \texttt{let $x$ = $e_1$ in $e_2$} : definition
+\end{bnf}
+\end{center}
+\end{example}
+
+Typically, each column in the BNF grammar has the same font style.
+In the example above, the comments in the first column, e.g., \textsf{Type}, is typeset in sans-serif, and the second column in math mode, e.g., $\tau$.
+The column for the right-hand side is (mostly) typeset in typewriter font with a bit of non-terminals like $e$ typeset in math mode.
+
+\textsf{simplebnf} provides a straightforward way to customize the font styles for each column\footnote{Note that you must provide a manual alignment specification with the key \texttt{colspec}.}:
+\begin{listing}
+\begin{bnf}[
+ colspec = {llcll},
+ column{1} = {font = \sffamily},
+ column{2} = {mode = dmath},
+ column{4} = {font = \ttfamily},
+]
+ \tau : Type ::=
+ | num : numbers
+ | str : strings
;;
- term2 ::= rhs2
+ e : Expr ::=
+ | $x$ : variable
+ | $n$ : numeral
+ | $e$ + $e$ : addition
+ | $e$ * $e$ : multiplication
+ | $e$ \textasciicircum{} $e$ : concatenation
+ | len($e$) : length
+ | let $x$ = $e_1$ in $e_2$ : definition
+\end{bnf}
+\end{listing}
+If you find yourself using the same configuration repeatedly, you can fix the desired configuration using \cmd{SetBNFLayout}.
+Once set using \cmd{SetBNFLayout}, the configuration is applied to all subsequent \verb/bnf/ environments:
+\begin{listing}
+% Some where above...
+\SetBNFLayout{
+ colspec = {llcll},
+ column{1} = {font = \sffamily},
+ column{2} = {mode = dmath},
+ column{4} = {font = \ttfamily},
+}
+% ...
+\begin{bnf}
+ \tau : Type ::=
+ | num : numbers
+ | str : strings
;;
- ...
- termk ::= rhsk
-\end{verbatim}
-where each of the \textit{rhs} represents alternative syntactic forms of the \textit{term}. An annotation may accompany each alternative in which case the alternative must be separated from its annotation with a colon (\verb/:/). If you don't need annotations, simply omit the colons and annotations altogether. The alternatives themselves are separated using the pipe symbol (\verb/|/).
+ e : Expr ::=
+ | $x$ : variable
+ | $n$ : numeral
+ | $e$ + $e$ : addition
+ | $e$ * $e$ : multiplication
+ | $e$ \textasciicircum{} $e$ : concatenation
+ | len($e$) : length
+ | let $x$ = $e_1$ in $e_2$ : definition
+\end{bnf}
+\end{listing}
-A sample code and the result is shown below:
-\begin{exampleside}
- \begin{bnfgrammar}
- a \in \textit{Vars}
- ;;
- expr ::=
- expr + term : sum
- | term : term
- ;;
- term ::=
- term * a : product
- | a : variable
- \end{bnfgrammar}
-\end{exampleside}
+Since these customizations are provided by the backend \textsf{tabularray}\footnote{\url{https://github.com/lvjr/tabularray}}, consult its documentation for more details.
+The corresponding command is \cmd{SetTblrInner}.
+
+For more advanced customization, such as changing default delimiters and symbols, continue to \secref{sec:config}.
-Annotations can also be provided on left-hand sides, to label the nonterminal instead of a specific production.
-\begin{exampleside}
+\section{Configuration}\label{sec:config}
+While the default configuration should be sufficient for most use cases, some grammars may require using different delimiters and symbols.
+For example, the language itself may contain \verb/->/ as a syntactic form, which conflicts with one of the default symbols for the rule relation.
+
+To this end, \textsf{simplebnf} provides a number of options to configure the DSL used to typeset the grammar.
+Some examples of customizable symbols include the delimiters for productions and alternatives, the relation symbol between the left-hand side and the right-hand side, the annotation symbol, and more.
+
+The default configuration is shown in \autoref{tab:config}.
+\begin{longtblr}[
+ caption = {Default key-values for the configuration of \textsf{simplebnf}.},
+ label = {tab:config}
+]{
+ colspec={ll},
+ row{2-Z}={font=\ttfamily}
+}
+ \toprule
+ Key & Default value \\
+ \midrule
+ prod-delim & ;;\\
+ new-line-delim & \fakeverb{\|}\\
+ single-line-delim & //\\
+ comment & :\\
+ relation & \fakeverb{{::=|->|:in:}}\\
+ relation-sym-map & {
+ \{\\
+ \quad\fakeverb{{::=} = {\ensuremath{\Coloneqq}},}\\
+ \quad\fakeverb{{->} = {\ensuremath{\to}},}\\
+ \quad\fakeverb{{:in:} = {\ensuremath{\in}},}\\
+ \}
+ }\\
+ or-sym & \fakeverb{$|$}\\
+ prod-sep & 2pt\\
+ row-sep & 0pt\\
+ \bottomrule
+\end{longtblr}
+
+The key-value list can be provided as an optional argument to the \verb/bnf/ environment, wrapped in \verb/()/.
+The optional key-value list for the layout---wrapped in \verb/[]/---should be provided after the configuration key-value list.
+See \subsecref{subsec:layout} for more details.
+
+An exmaple of customizing the configuration is shown below:
+\begin{example}*
+\begin{center}
+\begin{bnf}(
+ prod-delim = {--},
+ new-line-delim = {\&},
+ single-line-delim = {\&\&},
+ comment = {//},
+ relation-sym-map =
+ {
+ {->} = {\ensuremath{\hookrightarrow}},
+ {:in:} = {\ensuremath{\in}},
+ },
+ or-sym = {},
+)[
+ colspec = {llcll},
+ column{1} = {font = \sffamily},
+ column{2} = {mode = dmath},
+ column{4} = {font = \ttfamily},
+]
+ \tau // Type ->
+ & num // numbers
+ & str // strings
+ --
+ e // Expr ->
+ & $x$ // variable
+ & $n$ // numeral
+ & $e$ + $e$ // addition
+ & $e$ * $e$ // multiplication
+ & $e$ \textasciicircum{} $e$ // concatenation
+ & len($e$) // length
+ & let $x$ = $e_1$ in $e_2$ // definition
+\end{bnf}
+\end{center}
+\end{example}
+
+
+Furthermore, the configuration can be set globally using \cmd{SetBNFConfig}, similar to \cmd{SetBNFLayout}:
+\begin{listing}
+% Some where above...
+\SetBNFConfig{
+ prod-delim = {--},
+ new-line-delim = {\&},
+ single-line-delim = {\&\&},
+ comment = {//},
+ relation-sym-map =
+ {
+ {->} = {\ensuremath{\hookrightarrow}},
+ {:in:} = {\ensuremath{\in}},
+ },
+ or-sym = {},
+}
+% ...
+\begin{bnf}[
+ colspec = {llcll},
+ column{1} = {font = \sffamily},
+ column{2} = {mode = dmath},
+ column{4} = {font = \ttfamily},
+]
+ \tau // Type ->
+ & num // numbers
+ & str // strings
+ --
+ e // Expr ->
+ & $x$ // variable
+ & $n$ // numeral
+ & $e$ + $e$ // addition
+ & $e$ * $e$ // multiplication
+ & $e$ \textasciicircum{} $e$ // concatenation
+ & len($e$) // length
+ & let $x$ = $e_1$ in $e_2$ // definition
+\end{bnf}
+\end{listing}
+
+
+\subsection{Production delimiter}
+The default production delimiter \verb/prod-delim/ is \verb/;;/.
+This will separate different productions in the same grammar.
+
+\subsection{New-line alternative delimiter}
+The default new-line alternative delimiter \verb/new-line-delim/ is \verb/\|/, which will actually match verbatim \verb/\|/ in the grammar.
+This will separate different alternatives into different lines in the same production.
+
+\subsection{Single-line alternative delimiter}
+The default single-line alternative delimiter \verb/single-line-delim/ is \verb|//|.
+The difference between the single-line alternative delimiter and the new-line alternative delimiter is that the former will not add a new line after the delimiter.
+
+For consecutive alternatives delimited by the single-line alternative delimiter, only the last of them can be annotated.
+
+Note that the single-line alternative delimiter must not contain the new-line alternative delimiter as a substring.
+
+\subsection{Annotation delimiter}
+The default annotation delimiter \verb/comment/ is \verb/:/.
+This will separate the syntactic form and the annotation within the alternative.
+
+\subsection{Rule relations and the symbol map}
+\textsf{simplebnf} provides a \verb/::=/, \verb/->/, and \verb/:in:/ for the rule relation between the left-hand side and the right-hand side.
+Each of them is mapped to a symbol in the \verb/relation-sym-map/ key-value list; By default, they are mapped to $\Coloneqq$ (\verb/\ensuremath{\Coloneqq}/), $\to$ (\verb/\ensuremath{\to}/), and $\in$ (\verb/\ensuremath{\in}/), respectively.
+
+To provide a custom relation symbol, provide the desired symbol and the mapping to the \verb/relation-sym-map/ key-value list and to the \verb/relation/.
+
+\subsection{Or symbol}
+The default or symbol \verb/or-sym/ is \verb/$|$/.
+Probably the most common use case for this option is to remove the or symbol altogether by setting it to \verb/{}/.
+
+\subsection{Production separation}
+The default production separation \verb/prod-sep/ is \verb/2pt/.
+This will add a vertical space between the productions.
+
+\subsection{Row separation}
+The default row separation \verb/row-sep/ is \verb/0pt/.
+This will add a vertical space between the alternatives in the same production.
+
+\subsection{Layout}\label{subsec:layout}
+As mentioned in \secref{sec:tutorial}, the layout of the \verb/bnf/ environment can be customized per-enviroment using the key-value list in the optional argument wrapped in \verb/[]/.
+When provided, these should be provided after the configuration key-value list, which is wrapped in \verb/()/.
+
+The optional key-value list for the layout is passed to the backend \textsf{tabularray} package.
+
+An example of customizing the layout is shown below:
+\begin{example}[righthand width=.53\linewidth]
+\begin{center}
+\begin{bnf}(
+ prod-delim = {--},
+ or-sym = {},
+ prod-sep = 5pt,
+)[
+ colspec = {|[2pt, gray5]llcll},
+ column{1} = {font = \sffamily},
+ column{2} = {mode = dmath},
+ column{4} = {font = \ttfamily},
+ column{5} = {font = \itshape},
+ cell{9}{4} = {cmd = \fbox},
+ row{-} = {bg = azure9},
+]
+ \tau : Type ::=
+ | num : numbers
+ | str : strings
+ --
+ e : Expr ::=
+ | $x$ : variable
+ | $n$ : numeral
+ | $e$ + $e$ : addition
+ | $e$ * $e$ : multiplication
+ | $e$ \textasciicircum{} $e$ : concatenation
+ | len($e$) : length
+ | let $x$ = $e_1$ in $e_2$ : definition
+\end{bnf}
+\end{center}
+\end{example}
+
+
+\section{Caveats}
+The choices of delimiters and symbols should be carefully made, in order to avoid conflicts with the grammar of the target language and our meta-language, \TeX{}.
+
+Another subtlety to consider while customizing delimiters, is that certain delimiters not contain the others as a substring.
+For instance, as mentioned in \secref{sec:config}, the single-line alternative delimiter must not contain the new-line alternative delimiter as a substring.
+
+When using custom OpenType fonts with the \verb/unicode-math/ package in \XeLaTeX{} or \LuaLaTeX{}, beware of the fact that many fonts lack the \verb/\Coloneqq/ symbol, $\Coloneqq$.
+The easiest way to fix this is to actually use a font that provides the symbol, such as \verb/Garamond-Math/, which comes with the \TeX{}Live installation\footnote{\fakeverb{\Coloneq} is not a typo of \fakeverb{\Coloneqq}.}.
+\begin{listing}
+\setmathfont{Garamond-Math.otf}[
+ Scale = MatchUppercase,
+ range = {\Coloneq}
+]
+\end{listing}
+
+
+\section{The deprecated \texttt{bnfgrammar} environment}
+Prior to version 1.0.0, the package provided a sole environment \verb/bnfgrammar/ for typesetting grammars.
+While it is still available, it is now deprecated and will be removed in a future release.
+Using it will result in a deprecation warning.
+
+To migrate to the new \verb/bnf/ environment, simply replace the \verb/bnfgrammar/ environment with \verb/bnf/, and replace \verb/\in/ with \verb/:in:/ and \verb/||/ with \verb|//|.
+Moreover, the new environment does not center the grammar by default, so wrapping it in a \verb/center/ environment is necessary to reproduce the same output.
+While there will be some differences in the spacings and the font styles, it is an easy fix.
+See \secref{sec:tutorial} for more details.
+
+Below is an example of using the deprecated \verb/bnfgrammar/ environment, left here for historical reasons.
+\begin{example}
\begin{bnfgrammar}
a : Variables \in \textit{Vars}
;;
@@ -107,48 +515,71 @@ Annotations can also be provided on left-hand sides, to label the nonterminal in
expr + term
| term
;;
- term ::=
- term * a
- | a
- \end{bnfgrammar}
-\end{exampleside}
-
-You can also provide an optional specification to the grammar environment, to redefine alignment or spacing.
-\begin{tcblisting}{text above listing}
- \begin{bnfgrammar}[lr@{\hspace{4pt}}c@{\hspace{2pt}}ll]
- a : Variables \in \textit{Vars}
- ;;
- expr ::=
- expr + term : sum
- | term : term
- ;;
- term ::=
- term * a : product
- | a : variable
- \end{bnfgrammar}
-\end{tcblisting}
-
-If you want to typeset multiple productions on a single line, you can use double vertical bars by default.
-\begin{exampleside}
- \begin{bnfgrammar}
- a \in \textit{Vars}
- ;;
- expr ::= expr + term || term
- ;;
term ::= term * a || a
\end{bnfgrammar}
-\end{exampleside}
+\end{example}
-The second and third optional arguments specify regular expressions for the line-breaking and non-breaking RHS seperators:
-\begin{tcblisting}{text above listing}
- \begin{bnfgrammar}[llcll][\|\|][\|]
- a \in \textit{Vars}
- ;;
- expr ::= expr + term | term
- ;;
- term ::= term * a
- || a
- \end{bnfgrammar}
-\end{tcblisting}
+
+\section*{Appendix}\label{sec:appendix}
+The following is the code used to typeset the metagrammar of the \textsf{simplebnf} DSL in the first page.
+\begin{listing}[breakable]
+\begin{bnf}(
+ prod-delim = ;;;,
+ new-line-delim = !,
+ single-line-delim = ?,
+ comment = //,
+ relation = {:::=|:in:},
+ relation-sym-map =
+ {
+ {:::=} = $\Coloneqq$,
+ {:in:} = $\in$,
+ },
+)[
+ colspec = lrcll,
+ column{2} = {mode=dmath},
+ column{4} = {mode=text, font=\ttfamily},
+]
+ G // Gramar :::=
+ ! $P$ // production
+ ! $P \fatsemi {}$ // production w/ a trailing delimiter
+ ! $P \fatsemi G$ // production sequence
+;;;
+ P // Production :::= $L \rightarrowtriangle R$
+;;;
+ L // LHS :::=
+ ! $v$ // metavariable
+ ! $v\!\fatslash\,c$ // annotated metavariable
+;;;
+ R // RHS :::=
+ ! $\talloblong$ // delimiter
+ ! $A \talloblong R$ // alternative sequence
+;;;
+ A // Alternative :::=
+ ! $f$ // syntactic form
+ ! $f\!\fatslash\,c$ // annotated syntactic form
+;;;
+ \fatsemi // Prod. delimiter :::=
+ ! ;; // default symbol
+ ! $\cdots$ // user-defined
+;;;
+ \rightarrowtriangle // Rule relation :::=
+ ! ::= // $\Coloneqq$
+ ! -> // $\to$
+ ! \texttt{\char`\\in} // $\in$
+ ! $\cdots$ // user-defined
+;;;
+ \fatslash // Annot. symbol :::=
+ ! : // default symbol
+ ! $\cdots$ // user-defined
+;;;
+ \talloblong // Alt. delimiter :::=
+ ! | // new-line delimiter
+ ! || // single-line delimiter
+ ! $\cdots$ // user-defined
+;;;
+ v, f, c :in: \textsf{\TeX{} tl} // valid \TeX{} token lists
+;;;
+\end{bnf}
+\end{listing}
\end{document}
diff --git a/macros/latex/contrib/simplebnf/simplebnf.sty b/macros/latex/contrib/simplebnf/simplebnf.sty
index 82d39139aa..5ddb566e28 100644
--- a/macros/latex/contrib/simplebnf/simplebnf.sty
+++ b/macros/latex/contrib/simplebnf/simplebnf.sty
@@ -8,191 +8,474 @@
%% Released under the MIT License.
%% ---------------------------------------------------------------------------
%%
+\NeedsTeXFormat{LaTeX2e}[2018-04-01]
+\providecommand\DeclareRelease[3]{}
+\providecommand\DeclareCurrentRelease[2]{}
+\DeclareRelease{0.3.2}{2023-01-07}{simplebnf-2023-01-07.sty}
+\DeclareCurrentRelease{}{2023-11-25}
+
\RequirePackage{expl3,xparse}
-% mathtools is needed for the \Coloneqq simbol
+% The new backend is tabularray
+\RequirePackage{tabularray}
+% mathtools is needed for the \Coloneqq symbol
\RequirePackage{mathtools}
+
\ProvidesExplPackage
{simplebnf}
- {2023/01/07}
- {0.3.2}
+ {2023-11-25}
+ {1.0.0}
{A simple package to format Backus–Naur form}
-\cs_generate_variant:Nn \regex_split:nnNTF {nVNTF}
-\cs_generate_variant:Nn \regex_split:NnN {NVN}
-\NewDocumentCommand\SimpleBNFDefEq{}{\ensuremath{\Coloneqq}}
+\tl_new:N \l__simplebnf_prod_delim_tl
+\tl_new:N \l__simplebnf_new_line_delim_tl
+\tl_new:N \l__simplebnf_single_line_delim_tl
+\tl_new:N \l__simplebnf_comment_tl
+\tl_new:N \l__simplebnf_or_sym_tl
+\tl_new:N \l__simplebnf_relation_tl
+\dim_new:N \l__simplebnf_prod_sep_dim
+\dim_new:N \l__simplebnf_row_sep_dim
+\prop_new:N \l__simplebnf_relation_sym_map_prop
-\NewDocumentCommand\SimpleBNFDefOr{}{\ensuremath{|}}
+\keys_define:nn { simplebnf }
+ {
+ prod-delim .tl_set:N = \l__simplebnf_prod_delim_tl,
+ new-line-delim .tl_set:N = \l__simplebnf_new_line_delim_tl,
+ single-line-delim .tl_set:N = \l__simplebnf_single_line_delim_tl,
+ comment .tl_set:N = \l__simplebnf_comment_tl,
+ relation .tl_set:N = \l__simplebnf_relation_tl,
+ relation-sym-map .code:n =
+ { \prop_set_from_keyval:Nn \l__simplebnf_relation_sym_map_prop { #1 } },
+ or-sym .tl_set:N = \l__simplebnf_or_sym_tl,
+ prod-sep .dim_set:N = \l__simplebnf_prod_sep_dim,
+ row-sep .dim_set:N = \l__simplebnf_row_sep_dim,
+ }
-\NewDocumentCommand\SimpleBNFStretch{}{0em}
+% default key-values
+\keys_set:nn { simplebnf }
+ {
+ prod-delim = ;;,
+ new-line-delim = \|,
+ single-line-delim = //,
+ comment = :,
+ relation = {::=|->|:in:},
+ relation-sym-map =
+ {
+ {::=} = {\ensuremath{\Coloneqq}},
+ {->} = {\ensuremath{\to}},
+ {:in:} = {\ensuremath{\in}},
+ },
+ or-sym = $|$,
+ prod-sep = 2pt,
+ row-sep = 0pt,
+ }
-\seq_new:N \l__input_seq
-\seq_new:N \l__term_seq
-\tl_new:N \l__term_tl
-\tl_new:N \l__keypairs_tl
-\tl_new:N \l__table_tl
-\seq_new:N \l__keypairs_seq
-\bool_new:N \l__first_rhs
-\regex_new:N \g_simplebnf_rhs_newline_r
-\regex_new:N \g_simplebnf_rhs_nb_r
+% bnf environment is internally a tabularray environment
+\NewTblrEnviron{@simplebnf_tblr_env}
+\SetTblrInner[@simplebnf_tblr_env]{rowsep=\l__simplebnf_row_sep_dim}
+
+
+% The main token list that stores the table.
+\tl_new:N \l__simplebnf_table_tl
+
+\seq_new:N \l__simplebnf_lhs_rhs_pair_seq
+\tl_new:N \l__simplebnf_lhs_tl
+\tl_new:N \l__simplebnf_matched_relation_tl
+\tl_new:N \l__simplebnf_rhs_tl
+
+\seq_new:N \l__simplebnf_alternative_seq
+\bool_new:N \l__simplebnf_first_alternative_bool
+
+\regex_new:N \l__simplebnf_new_line_delim_regex
+\regex_new:N \l__simplebnf_single_line_delim_regex
+\regex_new:N \l__simplebnf_comment_regex
+\regex_new:N \l__simplebnf_prod_delim_regex
+\regex_new:N \l__simplebnf_relation_regex
+
+\cs_generate_variant:Nn \regex_split:NnNTF {NVNTF}
+\cs_generate_variant:Nn \regex_split:NnN {NVN}
+\cs_generate_variant:Nn \regex_set:Nn {NV}
+\cs_generate_variant:Nn \regex_replace_all:NnN {NVN}
+
+
+\msg_new:nnn { simplebnf } { lhs } { Malformed~LHS~\msg_line_context: }
+\msg_new:nnn { simplebnf } { alt } { Malformed~alternative~\msg_line_context: }
+\msg_new:nnn { simplebnf } { prod } { Malformed~production~\msg_line_context: }
+\msg_new:nnn { simplebnf } { unk-rel } { Unknown~relation~\msg_line_context: }
+\msg_new:nnn { simplebnf } { no-rel } { No~relation~found~\msg_line_context: }
+\msg_new:nnn { simplebnf } { dep }
+ {
+ Environment~bnfgrammar~is~deprecated.~
+ Consider~using~the~environment~bnf.~
+ Consult~the~documentation~for~more~information.
+ }
-%% Typeset a single rhs of a production.
-%% \l__first_rhs = true => `::=' already typeset
-%% \l__first_rhs = false => move to a newline and typeset `|'
-%% #1 - rhs : annot or rhs
-\cs_new:Nn \simplebnf_typeset_rhs:n
-{
- \bool_if:NTF \l__first_rhs
- {
- \bool_set_false:N \l__first_rhs
- }
- {
- \tl_put_right:Nn \l__table_tl { \\ && \SimpleBNFDefOr & }
- }
-
- \tl_set:Nn \l_tmpa_tl { #1 }
- \regex_replace_once:nnN { ^\s+ } {} \l_tmpa_tl
- \regex_replace_once:nnN { \s+$ } {} \l_tmpa_tl
- \regex_split:nVNTF { : } \l_tmpa_tl \l_tmpa_seq
- {
- \seq_pop_left:NNT \l_tmpa_seq \l_tmpa_tl
- {
- \regex_replace_all:NnN \g_simplebnf_rhs_nb_r { \c{SimpleBNFDefOr} } \l_tmpa_tl
- % Expand only the local temporary variable.
- \tl_put_right:No \l__table_tl
- {
- \exp_after:wN\bnfexpr\exp_after:wN{\l_tmpa_tl} &
- }
- }
-
- \seq_pop_left:NNT \l_tmpa_seq \l_tmpb_tl
- {
- \regex_replace_once:nnN { ^\s+ } {} \l_tmpb_tl
- \tl_put_right:No \l__table_tl
- {
- \exp_after:wN\bnfannot\exp_after:wN{\l_tmpb_tl}
- }
- }
- }
- {
- \regex_replace_all:NnN \g_simplebnf_rhs_nb_r { \c{SimpleBNFDefOr} } \l_tmpa_tl
-
- \tl_put_right:No \l__table_tl
- {
- \exp_after:wN\bnfexpr\exp_after:wN{\l_tmpa_tl}
- }
- }
-}
%% Typeset a single lhs of a production.
%% #1 - lhs : either term or (term : annotation)
-\cs_new:Nn \simplebnf_typeset_lhs:n
-{
- \tl_set:Nx \l_tmpa_tl { #1 }
- \regex_replace_once:nnN { ^\s+ } {} \l_tmpa_tl
- \regex_replace_once:nnN { \s+$ } {} \l_tmpa_tl
-
- \regex_split:nVNTF { : } \l_tmpa_tl \l_tmpa_seq
- {
- \seq_pop_right:NN \l_tmpa_seq \l_tmpa_tl
- \regex_replace_once:nnN { ^\s+ } {} \l_tmpa_tl
- \tl_put_right:No \l__table_tl
- {
- \exp_after:wN\bnfannot\exp_after:wN{\l_tmpa_tl} &
- }
- \seq_pop_left:NN \l_tmpa_seq \l_tmpa_tl
- \tl_put_right:No \l__table_tl
- {
- \exp_after:wN\bnfexpr\exp_after:wN{\l_tmpa_tl}
- }
- }
- {
- \tl_put_right:No \l__table_tl
- {
- \exp_after:wN&\exp_after:wN\bnfexpr\exp_after:wN{\l_tmpa_tl}
- }
- }
-}
+\cs_new:Nn \__simplebnf_typeset_lhs:n
+ {
+ \tl_set:No \l_tmpa_tl { #1 }
+ \regex_replace_once:nnN { ^\s+ } {} \l_tmpa_tl
+ \regex_replace_once:nnN { \s+$ } {} \l_tmpa_tl
+
+ \regex_split:NVNTF \l__simplebnf_comment_regex \l_tmpa_tl \l_tmpa_seq
+ { % annotation
+ \seq_pop_right:NN \l_tmpa_seq \l_tmpa_tl
+ \regex_replace_once:nnN { ^\s+ } {} \l_tmpa_tl
+ \tl_put_right:NV \l__simplebnf_table_tl \l_tmpa_tl
+ \tl_put_right:Nn \l__simplebnf_table_tl { & }
+ % metavariable
+ \seq_pop_left:NN \l_tmpa_seq \l_tmpa_tl
+ \tl_put_right:NV \l__simplebnf_table_tl \l_tmpa_tl
+ }
+ { % not annotated
+ \tl_put_right:Nn \l__simplebnf_table_tl { & }
+ \seq_pop_left:NN \l_tmpa_seq \l_tmpa_tl
+ \tl_put_right:NV \l__simplebnf_table_tl \l_tmpa_tl
+ }
+
+ % There should be no more tokens in the sequence.
+ \seq_if_empty:NF \l_tmpa_seq
+ { \msg_error:nnn { simplebnf } { lhs } { #1 } }
+ }
+
+
+% Handle a single alternative (or single-line alternatives) of an RHS.
+\cs_new:Nn \__simplebnf_typeset_rhs:n
+ {
+ \tl_if_blank:nF { #1 }
+ {
+ \bool_if:NTF \l__simplebnf_first_alternative_bool
+ { \bool_set_false:N \l__simplebnf_first_alternative_bool }
+ {
+ \tl_put_right:Nn \l__simplebnf_table_tl
+ { \\ & & \l__simplebnf_or_sym_tl & }
+ }
+
+ \tl_set:Nn \l_tmpa_tl { #1 }
+ \regex_replace_once:nnN { ^\s+ } {} \l_tmpa_tl
+ \regex_replace_once:nnN { \s+$ } {} \l_tmpa_tl
+
+ \regex_replace_all:NVN
+ \l__simplebnf_single_line_delim_regex
+ \l__simplebnf_or_sym_tl
+ \l_tmpa_tl
+
+ \regex_split:NVNTF \l__simplebnf_comment_regex \l_tmpa_tl \l_tmpa_seq
+ { % put an alternate syntax form
+ \seq_pop_left:NN \l_tmpa_seq \l_tmpa_tl
+ \tl_put_right:NV \l__simplebnf_table_tl \l_tmpa_tl
+ \tl_put_right:Nn \l__simplebnf_table_tl { & }
+
+ % put an annotation
+ \seq_pop_left:NN \l_tmpa_seq \l_tmpa_tl
+ \regex_replace_once:nnN { ^\s+ } {} \l_tmpa_tl
+ \tl_put_right:NV \l__simplebnf_table_tl \l_tmpa_tl
+
+ % There should be no more tokens in the sequence.
+ \seq_if_empty:NF \l_tmpa_seq
+ { \msg_error:nnn { simplebnf } { alt } { #1 } }
+ }
+ { % no annotation
+ \tl_put_right:NV \l__simplebnf_table_tl \l_tmpa_tl
+ }
+ }
+ }
+
+
+% Handle a single production P
+\cs_new:Nn \__simplebnf_typeset_production:n
+ {
+ \regex_split:NnNTF
+ \l__simplebnf_relation_regex
+ { #1 }
+ \l__simplebnf_lhs_rhs_pair_seq
+ {
+ % LHS
+ \seq_pop_left:NN \l__simplebnf_lhs_rhs_pair_seq \l__simplebnf_lhs_tl
+ % Rule relation
+ \seq_pop_left:NN \l__simplebnf_lhs_rhs_pair_seq \l__simplebnf_matched_relation_tl
+ % RHS
+ \seq_pop_left:NN \l__simplebnf_lhs_rhs_pair_seq \l__simplebnf_rhs_tl
+
+ \seq_if_empty:NF \l__simplebnf_lhs_rhs_pair_seq
+ { \msg_error:nnn { simplebnf } { prod } { #1 } }
+ % Build the LHS
+ \__simplebnf_typeset_lhs:n \l__simplebnf_lhs_tl
+
+ % Build the rule relation
+ \prop_get:NVNTF
+ \l__simplebnf_relation_sym_map_prop
+ \l__simplebnf_matched_relation_tl
+ \l_tmpa_tl
+ {
+ \tl_put_right:Nn \l__simplebnf_table_tl { & }
+ \tl_put_right:NV \l__simplebnf_table_tl \l_tmpa_tl
+ \tl_put_right:Nn \l__simplebnf_table_tl { & }
+ }
+ {
+ \msg_warning:nnn { simplebnf } { unk-rel } { #1 }
+ \tl_put_right:Nn \l__simplebnf_table_tl { & & }
+ }
+ % Build the RHS
+ %% \l__simplebnf_alternative_seq - (rhs:annot | rhs)...
+ \regex_split:NVN
+ \l__simplebnf_new_line_delim_regex
+ \l__simplebnf_rhs_tl
+ \l__simplebnf_alternative_seq
+
+ \bool_set_true:N \l__simplebnf_first_alternative_bool
+ \seq_map_function:NN \l__simplebnf_alternative_seq \__simplebnf_typeset_rhs:n
+ }
+ { \msg_error:nnn { simplebnf } { no-rel } { #1 } }
+ }
+
+
+% The main control sequence that builds the grammar G into \l__simplebnf_table_tl
+\cs_new:Nn \__simplebnf_build_grammar:n
+ {
+ \regex_set:NV \l__simplebnf_new_line_delim_regex \l__simplebnf_new_line_delim_tl
+ \regex_set:NV \l__simplebnf_single_line_delim_regex \l__simplebnf_single_line_delim_tl
+ \regex_set:NV \l__simplebnf_comment_regex \l__simplebnf_comment_tl
+ \regex_set:NV \l__simplebnf_prod_delim_regex \l__simplebnf_prod_delim_tl
+ \tl_put_left:Nn \l__simplebnf_relation_tl { ( }
+ \tl_put_right:Nn \l__simplebnf_relation_tl { ) }
+ \regex_set:NV \l__simplebnf_relation_regex \l__simplebnf_relation_tl
+
+ % \l_tmpa_seq contains the sequence of productions (P; ...).
+ \regex_split:NnN \l__simplebnf_prod_delim_regex { #1 } \l_tmpa_seq
+
+ % Is this the first production of this grammar?
+ \bool_set_true:N \l_tmpa_bool
+ \seq_map_inline:Nn \l_tmpa_seq
+ {
+ \tl_if_blank:nF { ##1 } % ignore empty productions
+ { % If not first, change row
+ \bool_if:NTF \l_tmpa_bool
+ { \bool_set_false:N \l_tmpa_bool }
+ {
+ \tl_put_right:Nn \l__simplebnf_table_tl { \\[\l__simplebnf_prod_sep_dim] }
+ }
+ \__simplebnf_typeset_production:n { ##1 }
+ }
+ }
+ }
-\NewDocumentCommand \bnfexpr { m } { \texttt { #1 } }
-\NewDocumentCommand \bnfannot { m } { \textit{ #1 } }
%% Typeset a BNF grammar.
-%% #1 - tabular specification (llcll)
-%% #2 - regexp for newline separator for rhses
-%% #2 - regexp for non-breaking separator for rhses
-%% #3 - grammar
-\NewDocumentEnvironment { bnfgrammar } { O{llcll} O{[^\|]\|[^\|]} O{\|\|} +b }
+%% #1 - key-value options for simplebnf
+%% #2 - tabularray specification (default: llcll)
+%% #3 - grammar body
+\NewDocumentEnvironment { bnf } { d() O{llcll} +b }
{
- \regex_gset:Nn \g_simplebnf_rhs_newline_r { #2 }
- \regex_gset:Nn \g_simplebnf_rhs_nb_r { #3 }
+ \IfNoValueF { #1 }
+ { \keys_set:nn { simplebnf } { #1 } }
- %% \l__input_seq is a list of term definitions.
- \regex_split:nnN { ;; } { #4 } \l__input_seq
- \begin{center}
- \tl_set:Nn \l__table_tl
- {
- \begin{tabular}{#1}
- }
+ \__simplebnf_build_grammar:n { #3 }
- \bool_set_true:N \l_tmp_first_term % Is this the first term in this grammar?
- \seq_map_inline:Nn \l__input_seq
+ \begin{@simplebnf_tblr_env}[expand=\l__simplebnf_table_tl]{#2}
+ \tl_use:N \l__simplebnf_table_tl
+ \end{@simplebnf_tblr_env}
+ }
+ { }
+
+
+\NewDocumentCommand \SetBNFLayout { m }
+ {
+ \SetTblrInner[@simplebnf_tblr_env]{#1}
+ }
+
+
+\NewDocumentCommand \SetBNFConfig { m }
+ {
+ \keys_set:nn { simplebnf } { #1 }
+ }
+
+
+% DEPRECATED APIs
+
+% Redefinable user-level variables
+\newcommand*\SimpleBNFDefEq{\ensuremath{\Coloneqq}}
+\newcommand*\SimpleBNFDefOr{\ensuremath{|}}
+\newcommand*\SimpleBNFStretch{0em}
+
+\cs_generate_variant:Nn \regex_split:nnNTF {nVNTF}
+
+%% Typeset a single lhs of a production.
+%% #1 - lhs : either term or (term : annotation)
+\cs_new:Nn \@dep__simplebnf_typeset_lhs:n
+ {
+ \tl_set:Nx \l_tmpa_tl { #1 }
+ \regex_replace_once:nnN { ^\s+ } {} \l_tmpa_tl
+ \regex_replace_once:nnN { \s+$ } {} \l_tmpa_tl
+
+ \regex_split:nVNTF { : } \l_tmpa_tl \l_tmpa_seq
{
- %% If not-first, add newline
- \bool_if:NTF \l_tmp_first_term
+ \seq_pop_right:NN \l_tmpa_seq \l_tmpa_tl
+ \regex_replace_once:nnN { ^\s+ } {} \l_tmpa_tl
+ \tl_put_right:No \l__simplebnf_table_tl
{
- \bool_set_false:N \l_tmp_first_term
+ \exp_after:wN\bnfannot\exp_after:wN{\l_tmpa_tl} &
}
+ \seq_pop_left:NN \l_tmpa_seq \l_tmpa_tl
+ \tl_put_right:No \l__simplebnf_table_tl
{
- \tl_put_right:Nn \l__table_tl { \\[\SimpleBNFStretch] }
+ \exp_after:wN\bnfexpr\exp_after:wN{\l_tmpa_tl}
}
+ }
+ {
+ \tl_put_right:No \l__simplebnf_table_tl
+ {
+ \exp_after:wN&\exp_after:wN\bnfexpr\exp_after:wN{\l_tmpa_tl}
+ }
+ }
+ }
+
+
+%% Typeset a single rhs of a production.
+%% \l__simplebnf_first_alternative_bool = true => `::=' already typeset
+%% \l__simplebnf_first_alternative_bool = false => move to a newline and typeset `|'
+%% #1 - rhs : annot or rhs
+\cs_new:Nn \@dep__simplebnf_typeset_rhs:n
+ {
+ \bool_if:NTF \l__simplebnf_first_alternative_bool
+ {
+ \bool_set_false:N \l__simplebnf_first_alternative_bool
+ }
+ {
+ \tl_put_right:Nn \l__simplebnf_table_tl { \\ && \SimpleBNFDefOr & }
+ }
- \regex_split:nnNTF { ::= } { ##1 } \l__term_seq
- % Parse a ::= definition
+ \tl_set:Nn \l_tmpa_tl { #1 }
+ \regex_replace_once:nnN { ^\s+ } {} \l_tmpa_tl
+ \regex_replace_once:nnN { \s+$ } {} \l_tmpa_tl
+ \regex_split:nVNTF { : } \l_tmpa_tl \l_tmpa_seq
+ {
+ \seq_pop_left:NNT \l_tmpa_seq \l_tmpa_tl
{
- %% \l__term_seq - (lhs, rhses)...
- %% \l__term_tl - lhs
- %% \l__keypairs_tl - rhses
- \seq_pop_left:NN \l__term_seq \l__term_tl
- \seq_pop_left:NN \l__term_seq \l__keypairs_tl
-
- \simplebnf_typeset_lhs:n{\l__term_tl}
- \tl_put_right:Nn \l__table_tl
+ \regex_replace_all:NnN \l__simplebnf_single_line_delim_regex { \c{SimpleBNFDefOr} } \l_tmpa_tl
+ % Expand only the local temporary variable.
+ \tl_put_right:No \l__simplebnf_table_tl
{
- & \SimpleBNFDefEq &
+ \exp_after:wN\bnfexpr\exp_after:wN{\l_tmpa_tl} &
}
- %% \l__keypairs_seq - (rhs:annot | rhs)...
- \regex_split:NVN \g_simplebnf_rhs_newline_r \l__keypairs_tl \l__keypairs_seq
+ }
- \bool_set_true:N \l__first_rhs
- \seq_map_function:NN \l__keypairs_seq \simplebnf_typeset_rhs:n
+ \seq_pop_left:NNT \l_tmpa_seq \l_tmpb_tl
+ {
+ \regex_replace_once:nnN { ^\s+ } {} \l_tmpb_tl
+ \tl_put_right:No \l__simplebnf_table_tl
+ {
+ \exp_after:wN\bnfannot\exp_after:wN{\l_tmpb_tl}
+ }
}
+ }
+ {
+ \regex_replace_all:NnN \l__simplebnf_single_line_delim_regex { \c{SimpleBNFDefOr} } \l_tmpa_tl
+
+ \tl_put_right:No \l__simplebnf_table_tl
{
- % Else, parse a \in declaration
- \regex_split:nnNTF { \c{in} } { ##1 } \l__term_seq
+ \exp_after:wN\bnfexpr\exp_after:wN{\l_tmpa_tl}
+ }
+ }
+ }
+
+\cs_new:Nn \@dep__simplebnf_typeset_production:n
+ {
+ \regex_split:nnNTF { ::= } { #1 } \l__simplebnf_lhs_rhs_pair_seq
+ % Parse a ::= definition
+ {
+ %% \l__simplebnf_lhs_rhs_pair_seq - (lhs, rhses)...
+ %% \l__simplebnf_lhs_tl - lhs
+ %% \l__simplebnf_rhs_tl - rhses
+ \seq_pop_left:NN \l__simplebnf_lhs_rhs_pair_seq \l__simplebnf_lhs_tl
+ \seq_pop_left:NN \l__simplebnf_lhs_rhs_pair_seq \l__simplebnf_rhs_tl
+
+ \@dep__simplebnf_typeset_lhs:n{\l__simplebnf_lhs_tl}
+ \tl_put_right:Nn \l__simplebnf_table_tl
+ {
+ & \SimpleBNFDefEq &
+ }
+ %% \l__simplebnf_alternative_seq - (rhs:annot | rhs)...
+ \regex_split:NVN \l__simplebnf_new_line_delim_regex \l__simplebnf_rhs_tl \l__simplebnf_alternative_seq
+
+ \bool_set_true:N \l__simplebnf_first_alternative_bool
+ \seq_map_function:NN \l__simplebnf_alternative_seq \@dep__simplebnf_typeset_rhs:n
+ }
+ {
+ % Else, parse a \in declaration (TODO: There is a huge room for generalization)
+ \regex_split:nnNTF { \c{in} } { #1 } \l__simplebnf_lhs_rhs_pair_seq
+ {
+ %% \l__simplebnf_lhs_rhs_pair_seq - (lhs, rhses)...
+ %% \l__simplebnf_lhs_tl - lhs
+ %% \l__simplebnf_rhs_tl - rhses
+ \seq_pop_left:NN \l__simplebnf_lhs_rhs_pair_seq \l__simplebnf_lhs_tl
+ \seq_pop_left:NN \l__simplebnf_lhs_rhs_pair_seq \l__simplebnf_rhs_tl
+
+ \@dep__simplebnf_typeset_lhs:n{\l__simplebnf_lhs_tl}
+ \tl_put_right:Nn \l__simplebnf_table_tl
{
- %% \l__term_seq - (lhs, rhs)
- \seq_pop_left:NN \l__term_seq \l_tmpa_tl
-
- \simplebnf_typeset_lhs:n{\l_tmpa_tl}
- \tl_put_right:Nn \l__table_tl
- {
- & $\in$ & $
- }
- \seq_pop_left:NN \l__term_seq \l_tmpa_tl
- \tl_put_right:NV \l__table_tl \l_tmpa_tl
- \tl_put_right:Nn \l__table_tl
- {
- $ &
- }
+ & $\in$ &
}
- { \msg_error:nn {simplebnf} { Could not parser ##1 } }
+ %% \l__simplebnf_alternative_seq - (rhs:annot | rhs)...
+ \regex_split:NVN \l__simplebnf_new_line_delim_regex \l__simplebnf_rhs_tl \l__simplebnf_alternative_seq
+
+ \bool_set_true:N \l__simplebnf_first_alternative_bool
+ \seq_map_function:NN \l__simplebnf_alternative_seq \@dep__simplebnf_typeset_rhs:n
+ }
+ {
+ \msg_error:nnn { simplebnf } { error-message }
+ { Could~not~parse~#1 }
}
}
+ }
- \tl_put_right:Nn \l__table_tl { \end{tabular} }
- \tl_use:N \l__table_tl
+
+\seq_new:N \l__input_seq
+\cs_new:Nn \@dep__simplebnf_typeset_grammar:nnn
+ {
+ \regex_set:Nn \l__simplebnf_new_line_delim_regex { #1 }
+ \regex_set:Nn \l__simplebnf_single_line_delim_regex { #2 }
+
+ %% \l__input_seq is a list of term definitions.
+ \regex_split:nnN { ;; } { #3 } \l__input_seq
+
+ \bool_set_true:N \l_tmp_first_term % Is this the first term in this grammar?
+ \seq_map_inline:Nn \l__input_seq
+ {
+ %% If not-first, add newline
+ \bool_if:NTF \l_tmp_first_term
+ {
+ \bool_set_false:N \l_tmp_first_term
+ }
+ {
+ \tl_put_right:Nn \l__simplebnf_table_tl { \\[\SimpleBNFStretch] }
+ }
+
+ \@dep__simplebnf_typeset_production:n { ##1 }
+ }
+ }
+
+
+\NewDocumentCommand \bnfexpr { m } { \texttt { #1 } }
+\NewDocumentCommand \bnfannot { m } { \textit { #1 } }
+
+
+%% Typeset a BNF grammar.
+%% #1 - tabular specification (llcll)
+%% #2 - regexp for newline separator for rhses
+%% #2 - regexp for non-breaking separator for rhses
+%% #3 - grammar
+\NewDocumentEnvironment { bnfgrammar } { O{llcll} O{[^\|]\|[^\|]} O{\|\|} +b }
+ {
+ \msg_warning:nn { simplebnf } { dep }
+ \begin{center}
+ \begin{tabular}{#1}
+ \@dep__simplebnf_typeset_grammar:nnn { #2 } { #3 } { #4 }
+ \tl_use:N \l__simplebnf_table_tl
+ \end{tabular}
\end{center}
}
{ }
diff --git a/macros/latex/contrib/ufrgscca/README.md b/macros/latex/contrib/ufrgscca/README.md
index 6159b8ce11..02143ca5f7 100644
--- a/macros/latex/contrib/ufrgscca/README.md
+++ b/macros/latex/contrib/ufrgscca/README.md
@@ -73,43 +73,27 @@ The Current Maintainer of this work is Alceu Frigeri
- cover pages macros
* ufrgscca-lists.sty
- New float environments (for code listing, for instance)
-* ufrgscca-gen.sty
- - a switch/case macro construct and
- 'macro factory', for instance to create commands used in the .def files.
* ufrgscca-forms.sty
- forms creation macros (course specific)
-* ufrgscca-formsTR.sty
- - forms creation macros (course specific, include by ufrgs-forms)
-* ufrgscca-formsintern.sty
- - forms creation macros (course specific, include by ufrgs-forms)
* ufrgscca-coord.sty
- student work coordenation related macros (course specific)
* ufrgscca-ppc.sty
- ppc specific macros (ppc stands for Course Pedagogic Project)
* ufrgscca-curr.sty
- curricula specific macros (as a set of semesters and class dependency lists)
-* ufrgscca-curr-tab.sty
- - curricula tabular macros (to display the curricula as tables)
-* ufrgscca-curr-graph.sty
- - curricula graph macros (to display the curricula as a dependency graph)
-* ufrgscca-en-base.def
+* ufrgscca-base-en.def
- locale, English, base def's (for babel)
-* ufrgscca-en-core.def
- - locale, English, for -core.sty
-* ufrgscca-en-forms.def
- - locale, English, for -forms.sty
-* ufrgscca-en-coord.def
- - locale, English, for -coord.sty
-
-* ufrgscca-ptBR-base.def
+* ufrgscca-base-ptBR.def
- locale, Portuguese, base def's (for babel)
-* ufrgscca-ptBR-core.def
- - locale, Portuguese, for -core.sty
-* ufrgscca-ptBR-forms.def
- - locale, Portuguese, for -forms.sty
-* ufrgscca-ptBR-coord.def
- - locale, Portuguese, for -coord.sty
+* ufrgscca-terms-ptBR.tex
+ - locale, many defaults
+* ufrgscca-terms-en.tex
+ - locale, many defaults
+* ufrgscca-cover-ptBR.tex
+ - locale, defaults, for -cover.sty
+* ufrgscca-forms.tex
+ - locale, defaults, for -forms.sty
* README.md (this file)
- quick introduction
@@ -121,8 +105,15 @@ The Current Maintainer of this work is Alceu Frigeri
-------------
+
## Changelog
-* Version 1.12 (this)
+* Version 2.0 (this)
+ - fully rewritten as Expl3 class/packages
+ - documentation
+ - (a few) commands changed (mostly auxiliary/background ones)
+ - some class options added and removed (see documentation)
+
+* Version 1.12
- forms adjustments
- documentation typo
- expl3 initial preparation
diff --git a/macros/latex/contrib/ufrgscca/doc/ufrgscca.pdf b/macros/latex/contrib/ufrgscca/doc/ufrgscca.pdf
index 520b6165a3..70e38ced7f 100644
--- a/macros/latex/contrib/ufrgscca/doc/ufrgscca.pdf
+++ b/macros/latex/contrib/ufrgscca/doc/ufrgscca.pdf
Binary files differ
diff --git a/macros/latex/contrib/ufrgscca/doc/ufrgscca.tex b/macros/latex/contrib/ufrgscca/doc/ufrgscca.tex
index e10a7db8c8..e274af87ed 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 1.12 (2023/09/23)
+%% This is version {2.0} {2023/11/23}
%%
%% The list of files that compose this work can be found in the README.md file at
%% https://ctan.org/pkg/ufrgscca
@@ -28,7 +28,6 @@
\documentclass[article,nogeometry,english,tocdepth=3,secdepth=3]{ufrgscca} % tcbundle tcpack tcmain
\usepackage[a4paper,margin=5cm,right=2cm,marginparwidth=3.5cm,asymmetric,top=2.5cm,bottom=1.5cm]{geometry}
\usepackage{codedescribe}
-\usepackage{ufrgscca-curr}
%\maxdeadcycles=500 %% the many marginpar statements are actually a pain.
@@ -36,6 +35,19 @@
%\fulldocfalse
\fulldoctrue
+\newif\ifversiontest
+\versiontestfalse
+%\versiontesttrue
+
+
+\ifversiontest
+\usepackage{ufrgscca-lists}
+\usepackage{ufrgscca-coord}
+\usepackage{ufrgscca-forms}
+\usepackage{ufrgscca-ppc}
+\usepackage{ufrgscca-curr}
+\fi
+
\begin{document}
@@ -43,16 +55,22 @@
\tstitle{
author={Alceu Frigeri\footnote{\tsverb{https://github.com/alceu-frigeri/ufrgscca}}},
date={\monthname\space\number\year},
- title={The ufrgscca, and associated, Packages\\ Version \ufrgsccaversion \\(extended documentation)}
+ title={The ufrgscca, and associated, Packages\\ Version \PkgInfo{ufrgscca}{version} \\(extended documentation)}
}
\else
\tstitle{
author={Alceu Frigeri\footnote{\tsverb{https://github.com/alceu-frigeri/ufrgscca}}},
date={\monthname\space\number\year},
- title={The ufrgscca, and associated, Packages\\ Version \ufrgsccaversion}
+ title={The ufrgscca, and associated, Packages\\ Version \PkgInfo{ufrgscca}{version}}
}
\fi
+\ifversiontest
+\ExplSyntaxOn
+\clist_map_inline:nn {ufrgscca,ufrgscca-abnt,ufrgscca-core,ufrgscca-cover,ufrgscca-lists,ufrgscca-forms,ufrgscca-coord,ufrgscca-curr,ufrgscca-ppc}{\PkgDescription{#1}}
+\ExplSyntaxOff
+\fi
+
\begin{tsabstract}
This bundled is aimed at producing undergraduate students final work/report at UFRGS/EE (Engineering School at the Federal University of Rio Grande do Sul), closely following ABNT rules (Brazilian Association for Technical Norms). It is composed of a main class, \tsobj[pkg]{ufrgscca}, and a set of auxiliary packages, some of which can be used independently.
@@ -61,29 +79,37 @@
\tableofcontents
\section{Introduction}
- \emph{ABNT} rules can be quite challenging some times (read: bibliography style/references) and sometimes just odd (line spacing, front matter, page layout), nevertheless it is a \emph{Brazilian Standard} for typography whose students at UFRGS should grow cherished to follow.
+ \emph{ABNT} rules can be quite challenging at times (read: bibliography style/references) and sometimes just odd (line spacing, front matter, page layout), nevertheless it is a \emph{Brazilian Standard} for typography whose students at UFRGS should grow cherished to follow.
- In short, as of version \ufrgsccaversion\space the bundle is composed of a class, \tsobj[pkg]{ufrgscca} (based on the standard \LaTeX2e \tsobj[pkg]{report} class), which pre-loads all other, as needed, packages: \tsobj[pkg]{ufrgscca-abnt, ufrgscca-core, ufrgscca-cover, ufrgscca\-forms, ufrgscca-gen, ufrgscca-lists, ufrgscca-curr, ufrgscca-coord, ufrgscca-ppc}.
+ In short, as of version \PkgInfo{ufrgscca}{version}\space the bundle is composed of a class, \tsobj[pkg]{ufrgscca} (based on \tsobj[pkg]{report} class), which pre-loads, as needed: \tsobj[pkg]{ufrgscca-abnt, ufrgscca\-core, ufrgscca-cover, ufrgscca-forms, ufrgscca-lists}. The packages \tsobj[pkg]{ufrgscca-curr, ufrgscca-coord, ufrgscca-ppc} need to be loaded explicitly, thought.
\begin{tsremark}[N.B.:]
This bundle requires a quite recent \LaTeX2e kernel, at least as recent as June 2022, which allows to declare package options using the \tsobj[key]{key}~=\tsobj[key]{value} system and declare commands with \tsmacro{\NewDocumentCommand}{}, out-of-the-box.
\end{tsremark}
+\begin{tsremark}[\color{red}Version 2.0:]
+ Starting with Version 2.0, this bundle has been fully re-written with \tsobj[pkg]{Expl3,starray}.
+\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}
+\end{tsremark}
+
\subsection{Current Version}
-For the sake of the “maintainer's sanity”, since this is a bundle, all files are saved with the same version (bundle version), with two exceptions: \tsobj[pkg]{ufrgscca-curr.sty} \tsobj[pkg]{ufrgscca-ppc.sty} which are less tested than the others, and somewhat in what one would call 'beta' state. Better said, all files are version \ufrgsccaversion, except \tsobj[pkg]{ufrgscca-curr} and \tsobj[pkg]{ufrgscca-ppc} whose versions are \ufrgsccacurrversion.
+For the sake of the “maintainer's sanity”, since this is a bundle, all files are saved with the same version (bundle version: \PkgInfo{ufrgscca}{version})
\section{\tightul{ufrgscca} Class}
-The following packages are always pre-loaded: \tsobj[pkg]{etex, etoolbox, lmodern, fontenc (T1), inputenc (utf8), silence, ufrgscca-abnt, ufrgscca-gen}, \tsobj[pkg]{ ufrgscca-cover, ufrgscca-core, hyperref} and (if it exists) a \emph{local.tex} file.
+The following packages are always pre-loaded: \tsobj[pkg]{etex, etoolbox, lmodern, fontenc (T1), inputenc (utf8), silence, ufrgscca-abnt}, \tsobj[pkg]{ ufrgscca-cover, ufrgscca-core, hyperref} and (if it exists) a \emph{local.tex} file.
-Other set of auxiliary packages are also pre-loaded, depending on the class options used, and finally it loads (normally) the \tsobj[pkg]{report} class (the exception being if one uses the \tsobj[option]{dctools} option).
+Other, auxiliary, packages are also pre-loaded, depending on the class options used, and finally \tsobj[pkg]{report} class (the exception being in case of the \tsobj[option]{article} class option).
-Being based on the report class, one can use all class options one would with a report, plus the ones listed below.
+Being based on the report class, all report class options are valid, in addition to the ones below.
\subsection{Class Options}
\begin{describelist}{option}
- \describe {tocdepth} { use: \tsobj[key]Use{tocdepth}{number}, whereas \tsobj[meta]{number} indicates the deepest sectioning to appears in the Table of Contents (0 being the top section, which is \tsmacro{\chapter}{} for report based classes, 1 being \tsmacro{\section}{}, and so on.) The default value being 3 (\tsmacro{\subsubsection}{}).}
+ \describe {tocdepth} { use: \tsobj[key]{tocdepth}=\tsobj[value]{number}, whereas \tsobj[meta]{number} indicates the deepest sectioning to appears in the Table of Contents (0 being the top section, which is \tsmacro{\chapter}{} for report based classes, 1 being \tsmacro{\section}{}, and so on.) The default is 3 (\tsmacro{\subsubsection}{}).}
- \describe {secdepth} { use: \tsobj[key]Use{secdepth}{number}, whereas \tsobj[meta]{number} indicates the deepest sectioning to be numbered. (0 being the top section, which is \tsmacro{\chapter}{} for report based classes, 1 being \tsmacro{\section}{}, and so on.) The default value being 4 (\tsmacro{\paragraph}{}).}
+ \describe {secdepth} { use: \tsobj[key]{secdepth}=\tsobj[value]{number}, whereas \tsobj[meta]{number} indicates the deepest sectioning to be numbered. (0 being the top section, which is \tsmacro{\chapter}{} for report based classes, 1 being \tsmacro{\section}{}, and so on.) The default is 4 (\tsmacro{\paragraph}{}).}
\describe {english} { the default language being Portuguese, this option changes locale to English.}
@@ -91,7 +117,7 @@ Being based on the report class, one can use all class options one would with a
\describe {relnum} { by default, figures, tables, etc. are numbered as a continuous series. With this switch, those lists are reset at each chapter, e.g. Figure 5.1 instead of Figure 23.}
- \describe {openright} { in case of printed material, this will assure that a \tsmacro{\chapter}{} always starts at an odd page, which is relevant in case of printing out (double sided) the document.}
+ \describe {openright} { in case of printed material, this assures that a \tsmacro{\chapter}{} always starts at an odd page, which is relevant in case of printing out (double sided) the document.}
\describe {oneside} { in case the document will be printed in single side sheets, otherwise it's assumed a two-sided printing.}
@@ -99,7 +125,7 @@ Being based on the report class, one can use all class options one would with a
\describe {pretextontoc} { “pre-text” elements, like “list of$\dots$” will be inserted in the “table of contents”.}
- \describe {yearsonly} { Cover pages, at their bottom, will display the years only (instead of the default mouth year construct).}
+ \describe {yearsonly} { Approval page, at it’s bottom, will display the years only (instead of the default mouth year construct).}
\describe {timesroman} { will set the default font to Roman (using the obsolete mathptmx package, based on a free replacement of the proprietary
Times New Roman (by Microsoft) and Times Roman (By Adobe)) instead of the default Latin Modern Roman font.
@@ -120,14 +146,6 @@ In the default setting the author's name is written only in the first entry, and
%\begin{describelist}{option}
%some random text, inserted here...
- \describe {report} { in case the doc is just a class assignment with, possibly, many co-authors. It changes mainly the front matter, which is simplified (no referral page, for instance).}
-
- \describe {internship} { in case the doc is an internship report.}
-
- \describe {nonrequired} { in case the internship report is related to a “non required” / “optional” internship. This option is ignored otherwise.}
-
- \describe {forms} { in the process of submitting a student final work/report, there is a series of forms to be submitted, this allows the customization of said forms in a simple way.}
-
\describe {chapternopagenum} { to suppress the page numbers at chapters begin.}
\describe {nomicrotype} { in some rare cases, \tsobj[pkg]{microtype} might hurt page layout, this allows the suppression of \tsobj[pkg]{microtype}.}
@@ -144,6 +162,8 @@ In the default setting the author's name is written only in the first entry, and
\describe {nogeometry} { the package \tsobj[pkg]{geometry} won't be loaded. In case one wants to fully customize the page geometry}
+ \describe {oldrenews} { Some, deprecated, renews will be in effect: \tsobj{\maketitle}, \tsobj{\author} \tsobj{\begin{abstract}}. For backwards compatibility only. }
+
\describe {texlive} { this is a reserved key, in case some workaround for texlive is needed.}
\describe {overleaf} { this is a reserved key, in case some workaround for overleaf is needed.}
@@ -154,9 +174,9 @@ In the default setting the author's name is written only in the first entry, and
\subsection{Class Declared Commands}
\begin{codedescribe}{\autonameref,\annexref,\autoannexref}
\begin{codesyntax}%
- \tsobj[code]{\autonameref}{\tsobj[oarg]{sep}\tsobj[marg]{label}\tsobj[oarg]{spc}}
+ \tsobj[code]{\autonameref}{\tsargs[oarg]{sep}\tsargs[marg]{label}\tsargs[oarg]{spc}}
\tsmacro{\annexref}{label}
- \tsobj[code]{\autoannexref}{\tsobj[oarg]{sep}\tsobj[marg]{label}\tsobj[oarg]{spc}}
+ \tsobj[code]{\autoannexref}{\tsargs[oarg]{sep}\tsargs[marg]{label}\tsargs[oarg]{spc}}
\end{codesyntax}
The \tsobj[pkg]{hyperref} package, sometimes, gets the \tsmacro{\autoref}{} name wrong (when referencing an annex), the \tsmacro{\annexref}{label} will assure the correct annex name is used.
@@ -175,7 +195,7 @@ The default \tsobj[meta]{sep} being a comma, and the default \tsobj[meta]{spc} b
\tsmacro{\overleafHack}{}
\tsmacro{\livetexHack}{}
\end{codesyntax}
- In case some workaround is needed due an unexpected error (when upgrading packages/\TeX system) the class “knows” about those three hooks.
+ Case some workaround is needed due an unexpected error (when upgrading packages/\TeX system) the class “knows” about those three hooks.
They will be executed if, and only if, they are user defined and the corresponding package option is used, i.e., for example, for the hook \tsmacro{\miktexHack}{} to be used/called by the class \tsobj[pkg]{ufrgscca}, one has to: a)~define it and b)~use the class option \tsobj[option]{miktex}.
\end{codedescribe}
@@ -200,9 +220,7 @@ Take note that \tsobj[pkg]{biblatex} is loaded with the \textbf{\tsobj[option]{b
\describe {repeatfields} { in case of authors with multiple publications, their names will be repeated for each entry. In the default setting the author's name is written only in the first entry, and replaced by underscores in the other entries.}
- \describe {yearsonly} { Cover pages, at their bottom, will display the years only (instead of the default mouth year construct).}
-
- \describe {yearsonly}{ Cover pages, at their bottom, will display the years only, instead of the default mouth year construct.}
+ \describe {yearsonly} { Approval page, at it's bottom, will display the years only (instead of the default mouth year construct).}
\describe {nomicrotype} { in some rare cases, \tsobj[pkg]{microtype} might hurt page layout, this allows the suppression of \tsobj[pkg]{microtype}.}
@@ -210,22 +228,25 @@ Take note that \tsobj[pkg]{biblatex} is loaded with the \textbf{\tsobj[option]{b
\describe {showlabels} { it will put a reference mark in each label created, and print out it's name.}
- \describe {tocdepth} { use: \tsobj[key]{tocdepth}=\tsobj[meta]{number}, whereas \tsobj[meta]{number} indicates the deepest sectioning to appears in the Table of Contents (0 being the top section, which is \tsmacro{\chapter}{} for report based classes, 1 being \tsmacro{\section}{}, and so on.) The default value being 3 (\tsmacro{\subsubsection}{}).}
+ \describe {tocdepth} { use: \tsobj[key]{tocdepth} = \tsobj[meta]{number}, whereas \tsobj[meta]{number} indicates the deepest sectioning to appears in the Table of Contents (0 being the top section, which is \tsmacro{\chapter}{} for report based classes, 1 being \tsmacro{\section}{}, and so on.) The default value being 3 (\tsmacro{\subsubsection}{}).}
- \describe {secdepth} { use: \tsobj[key]{secdepth}=\tsobj[meta]{number}, whereas \tsobj[meta]{number} indicates the deepest sectioning to be numbered. (0 being the top section, which is \tsmacro{\chapter}{} for report based classes, 1 being \tsmacro{\section}{}, and so on.) The default value being 4 (\tsmacro{\paragraph}{}).}
+ \describe {secdepth} { use: \tsobj[key]{secdepth} = \tsobj[meta]{number}, whereas \tsobj[meta]{number} indicates the deepest sectioning to be numbered. (0 being the top section, which is \tsmacro{\chapter}{} for report based classes, 1 being \tsmacro{\section}{}, and so on.) The default value being 4 (\tsmacro{\paragraph}{}).}
- \describe {dctools} { this will change page layout and base class to article, it is meant to document the class itself.}
\end{describelist}
\subsection{Commands}
-\begin{codedescribe}{\keyword}
+\begin{codedescribe}[code,new=2023/11/18]{\mainkeyword,\otherkeyword}
\begin{codesyntax}%
- \tsmacro{\keyword}{keyword}
+ \tsmacro{\mainkeyword}{keyword}
+ \tsmacro{\otherkeyword}{keyword}
\end{codesyntax}
- This command can be invoked many times, it will construct a list of keywords to be used when printing out the abstract environment.
+ These command can be invoked many times, it will construct a list of keywords to be used when printing out the (main/other)abstract environment.
\end{codedescribe}
+\begin{tsremark}
+ the old \tsmacro{\keyword}{keyword} gets defined, as an allias to \tsobj{\mainkeyword}, in case one use the \tsobj[key]{oldrenews} class option is used.
+\end{tsremark}
\begin{codedescribe}{\sourcecitation,\note}
\begin{codesyntax}
@@ -269,7 +290,7 @@ This will \emph{underline} a short text, take note that \tsobj[meta]{text} `can'
\tsmacro{\NewChapListEnv}{envname,displayname}
\end{codesyntax}
\end{codedescribe}
-This is the command used to created those \emph{chapter like} lists, like `List of Symbols' or `List of acronyms'. With it, a new environment is created, \tsobj[meta]{envname}, with an associated `numberless' chapter name \tsobj[meta]{displayname}. The newly created environment will implement a \emph{description} like environment (thanks to \tsobj[pkg]{enumitem}) with an optional and a mandatory argument (see below).
+Creates those \emph{chapter like} lists, like `List of Symbols' or `List of acronyms'. With it, a new environment is created, \tsobj[meta]{envname}, with an associated `numberless' chapter name \tsobj[meta]{displayname}. The newly created environment will implement a \emph{description} like environment (thanks to \tsobj[pkg]{enumitem}) with an optional and a mandatory argument (see below).
\begin{codestore}[st=d.newchapenv]
\def\listabbrvname{Lista de Abreviaturas}
@@ -288,32 +309,33 @@ The command \tsmacro{\date}{} is redefined, to allow a separation between the ma
\subsection{Environments}
-
-\begin{codedescribe}[env]{abstract}
+\begin{codedescribe}[env,new=2023/11/18]{mainabstract}
\begin{codesyntax}%
- \tsmacro{\begin{abstract}}[lang]{keywords}\ldots\tsmacro{\end{abstract}}{}
+ \tsmacro{\begin{mainabstract}}[lang]{keywords}\ldots\tsmacro{\end{mainabstract}}{}
\end{codesyntax}
- The standard environment \tsobj[env]{abstract} is redefined as a numberless chapter based on the current locale (default: Portuguese), at the end of it the keywords list created with \tsmacro{\keyword}{} will be added.
+ \tsobj[env]{mainabstract} is defined as a numberless chapter based on the current locale (default: Portuguese), at the end of it the keywords list created with \tsmacro{\mainkeyword}{} will be added.
\end{codedescribe}
\begin{codestore}[st=d.abstract]
- \keyword{a keyword}
- \keyword{another keyword}
- \begin{abstract} some short summary of things\ldots
- \end{abstract}
+ \mainkeyword{a keyword}
+ \mainkeyword{another keyword}
+ \begin{mainabstract} some short summary of things\ldots
+ \end{mainabstract}
\end{codestore}
\tscode*{d.abstract}
-\begin{codedescribe}[env]{otherabstract}
+\begin{codedescribe}[env,update=2023/11/18]{otherabstract}
\begin{codesyntax}%
- \tsmacro{\begin{otherabstract}}[lang]{keywords}\ldots\tsmacro{\end{otherabstract}}{}
+ \tsmacro{\begin{otherabstract}}[lang]\ldots\tsmacro{\end{otherabstract}}{}
\end{codesyntax}
This is the environment to create an abstract in a language other than the default one.
-The default value for \tsobj[meta]{lang} is english, and it can be any value that \tsobj[pkg]{babel} understands. The \tsobj[meta]{keywords} are just a list of keywords which will be added at the end of the \emph{otherabstract}.
+The default value for \tsobj[meta]{lang} is english, and it can be any value that \tsobj[pkg]{babel} understands. A keywords list created with \tsmacro{\otherkeyword}{} will be added at the end of it.
\end{codedescribe}
\begin{codestore}[st=d.oabstract]
- \begin{otherabstract}[english]{a keyword, another keyword} some short summary of things\ldots
+ \otherkeyword{a keyword}
+ \otherkeyword{another keyword}
+ \begin{otherabstract}[english] some short summary of things\ldots
\end{otherabstract}
\end{codestore}
\tscode*{d.oabstract}
@@ -484,49 +506,149 @@ New paragraph, for reference.
\section{\tightul{ufrgscca-core} Package}
-The \tsobj[pkg]{ufrgscca-core} package defines a set of commands for author's, student's, advisor's examiner's names and related info. It is needed by most/all of the bundled packages.
+The \tsobj[pkg]{ufrgscca-core} package defines a set of commands for student's and activity's related info. It is needed by most/all of the bundled packages.
+
+All data is stored in two main \tsobj[pack]{starray} defined as follow:
+
+\begin{codestore}[st=activitydef]
+ {
+ name , acronym ,
+ coord . struct
+ {
+ name , title ,
+ article , Article , narticle , Narticle , carticle , Carticle ,
+ } ,
+ calendar . struct
+ {
+ date , week , event ,
+ } ,
+ chkmarked , chkunmarked , chkref
+ }
+\end{codestore}
+
+\tscode*[codeprefix={Activity's Structure Definition:},basicstyle={\scriptsize\ttfamily}]{activitydef}\label{activity-def}
+
+
+\begin{codestore}[st=studentdef]
+ {
+ first , last , name , Nproc , ID , email , worktitle ,
+ article , Article , narticle , Narticle , carticle , Carticle ,
+ remarks , checklist , brief , reason ,
+ board-local , board-date , board-time , gradeavrg , grade ,
+ flag-graded , %%% IF gradeavrg AND finalgrade already calculated (or defined)
+ flag-exam ,
+ flag-ff ,
+ flag-dismiss , %%% IF it was the 1st semester.
+ flag-newpage , %% if it should go in a new page (board)
+ flag-distinctboard , %% if advisor isn't in the board
+ flag-approved ,
+ flag-coadvisor ,
+ advisor . struct {
+ first , last , name , institution , title , email , phone ,
+ article , Article , narticle , Narticle , carticle , Carticle ,
+ assessment
+ } ,
+ coadvisor . struct {
+ first , last , name , institution , title , email , phone ,
+ article , Article , narticle , Narticle , carticle , Carticle ,
+ reason
+ } ,
+ reviewer . struct {
+ first , last , name , institution , title , email , phone ,
+ article , Article , narticle , Narticle , carticle , Carticle ,
+ pointA , pointB , pointC , pointD , grade , gradetype ,
+ } ,
+ altreviewer . struct {
+ first , last , name , institution , title , email , phone ,
+ article , Article , narticle , Narticle , carticle , Carticle ,
+ } ,
+ internship . struct {
+ company , field , start , end , length ,
+ } ,
+ tutor . struct {
+ first , last , name , title , email , phone ,
+ article , Article , narticle , Narticle , carticle , Carticle ,
+ } ,
+ supervisor . struct {
+ first , last , name , register , title , office , email , phone ,
+ article , Article , narticle , Narticle , carticle , Carticle ,
+ } ,
+ }
+\end{codestore}
+
+\tscode*[codeprefix={Student's Structure Definition:},basicstyle={\scriptsize\ttfamily}]{studentdef}\label{student-def}
+
+
+
+\subsection{Core Commands}\label{core-commands}
-\subsection{Core Forms Commands}
-\begin{codedescribe}{\tccbrief,\tcccoadvisorbrief,\tccadvisorsreview}
+
+
+\begin{codedescribe}[code,new=2023/11/18]{\NewActivity}
\begin{codesyntax}%
- \tsmacro{\tccbrief}{brief}
- \tsmacro{\tcccoadvisorbrief}{brief}
- \tsmacro{\tccadvisorsreview}{brief}
+ \tsmacro{\NewActivity}{act-hash}
\end{codesyntax}
-Those commands are only of use when using \tsobj[pkg]{ufrgscca-forms}. \tsmacro{\tccbrief}{} sets the work initial summary, \tsmacro{\tcccoadvisorbrief}{} sets the justification for having a co-advisor, \tsmacro{\tccadvisorsreview}{} sets the advisor's review.
+This will create a new 'activity'. Predefined ones being: \tsobj[option]{course,tccI,tccII,internship,internship-opt}.
\end{codedescribe}
+\begin{tsremark}
+This will create a \tsobj[pack]{starray}, the \tsobj[meta]{act-hash} being it's \tsobj[meta]{hash}.
+\end{tsremark}
-\subsection{Core Global Commands}\label{core-commands}
-\begin{codedescribe}{\location}
+
+\begin{codedescribe}[code,new=2023/11/18]{\ActivitySet,\ActivitySetCoordTitle,\ActivitySetCoord}
\begin{codesyntax}%
- \tsmacro{\location}{city,state}
+ \tsmacro{\ActivitySet}[act-hash]{acronym,name}
+ \tsmacro{\ActivitySetCoordTitle}[act-hash]{title}
+ \tsmacro{\ActivitySetCoord}[act-hash]{name}\tsargs[oarg]{gender}
\end{codesyntax}
- To redefine the default values of \tsobj[meta]{city} and \tsobj[meta]{state} (Porto Alegre and RS).\\
+These will set an Activity many fields. \tsobj[meta]{acronym,name} being the short (acronym) and long name of an activity. \tsobj[meta]{title} is the coordinator formal title, and so on.
\end{codedescribe}
-\begin{codedescribe}{\TCCcoord,\TCCcoordtitle}
+
+
+\begin{codedescribe}[code,new=2023/11/18]{\ActivitySelect,\Activity,\ActivityCoord}
\begin{codesyntax}%
- \tsobj[code]{\TCCcoord}{\tsobj[marg]{(title) full name}\tsobj[oarg]{gender}}
- \tsmacro{\TCCcoordtitle}{coordinator denomination}
+ \tsmacro{\ActivitySelect}{act-hash}
+ \tsmacro{\Activity}[act-hash]{act-field}
+ \tsmacro{\ActivityCoord}[act-hash]{coord-field}
\end{codesyntax}
+\tsobj{\ActivitySelect} just sets \tsobj[meta]{act-hash} as the current activity (set's the \tsobj[pack]{starray} iter). \tsobj{\Activity,\ActivityCoord} gets the corresponding field.
+Possible values for \tsobj[meta]{act-field} are: \tsobj[option]{name,acronym}.
+Possible values for \tsobj[meta]{coord-field} are: \tsobj[option]{name,title,article,Article,narticle,Narticle,carticle,Carticle}, as defined by \emph{Activity's structure} (see \ref{activity-def}).
+
\end{codedescribe}
-\begin{codedescribe}{\coursecoord,\coursecoordtitle}
+\subsection{Core Auxiliary Commands}
+
+
+\begin{codedescribe}[code,new=2023/11/18]{\studentselect}
\begin{codesyntax}%
- \tsobj[code]{\coursecoord}{\tsobj[oarg]{(title) full name}\tsobj[oarg]{gender}}
- \tsmacro{\coursecoordtitle}{course coordinator denomination}
+ \tsmacro{\studentselect}{student-hash}
\end{codesyntax}
+Select a student based on it's hash.
\end{codedescribe}
- \tsobj[meta]{coordinator denomination} and \tsobj[meta]{course coordinator denomination} are the full 'job title' of their position. \tsobj[meta]{gender} can be either 'm' or 'f'.
-\begin{codedescribe}{\internshipcoord,\internshipcoordtitle}
- \begin{codesyntax}%
- \tsobj[code]{\internshipcoord}{\tsobj[oarg]{(title) full name}\tsobj[oarg]{gender}}
- \tsmacro{\internshipcoordtitle}{internship coordinator denomination}
- \end{codesyntax}
+
+
+
+\begin{codedescribe}[code,new=2023/11/18]{\DataFields,\eDataSet,\eDataFields}
+ \begin{codesyntax}%
+ \tsmacro{\DataFields}{starray-ref,field}
+ \tsmacro{\eDataSet}[act-hash]{starray-ref}
+ \tsmacro{\eDataFields}{field}
+ \end{codesyntax}
+These are, respectively, \tsobj{\starray_get_prop:nn, \starray_term_syntax:n,\starray_parsed_get_prop:n} from \tsobj[pack]{starray}. One can reference/get any field from the main \tsobj[pack]{starray} defined structures: \tsobj[key]{student,activity} as defined at chapter \ref{activity-def}.
\end{codedescribe}
-\tsobj[meta]{coordinator denomination} and \tsobj[meta]{internship coordinator denomination} are the full 'job title' of their position. \tsobj[meta]{gender} can be either 'm' or 'f'.
+
+
+\begin{codedescribe}[code,new=2023/11/18]{\studentiterate}
+ \begin{codesyntax}%
+ \tsmacro{\studentiterate}{code}
+ \end{codesyntax}
+This is \tsobj{\starray_iterate_over:nn} from \tsobj[pack]{starray}. \tsobj[meta]{code} will be executed for every defined student.
+\end{codedescribe}
+
\subsection{Core Specific Commands}\label{core-specific-commands}
@@ -534,100 +656,173 @@ Those commands are only of use when using \tsobj[pkg]{ufrgscca-forms}. \tsmacro{
The following commands are more or less self-explanatory, \tsobj[meta]{ID} is the student's university ID. \tsobj[meta]{Nproc} is the process/request number. \tsobj[meta]{gender} can be either 'm' or 'f'.
-\begin{codedescribe}{\author,\authorinfo,\student,\studentinfo}%,\studentgender}
+\begin{codedescribe}[code,update=2023/11/18]{\student,\studentinfo}%,\studentgender}
\begin{codesyntax}
- \tsobj[code]{ \author}{\tsobj[marg]{last}\tsobj[marg]{first}\tsobj[oarg]{gender}}
- \tsmacro{\authorinfo}[Nproc]{ID,email}
- \tsobj[code]{\student}{\tsobj[marg]{last}\tsobj[marg]{first}\tsobj[oarg]{gender}}
+ \tsobj[code]{\student}{\tsargs[oarg]{student-hash}\tsargs[marg]{last,first}\tsargs[oarg]{gender}}
\tsmacro{\studentinfo}[Nproc]{ID,email}
\end{codesyntax}
\end{codedescribe}
+\begin{tsremark}[N.B.:]
+ If the package option \tsobj[option]{oldrenews} is used, the command \tsobj{\author,\authorinfo} will be redefined as an allias to \tsobj{\student,\studentinfo}.
+\end{tsremark}
+
+\begin{codedescribe}[code,new=2023/11/18]{\workbrief,\advisorreview,\coadvisorreason,\workchange}
+ \begin{codesyntax}%
+ \tsmacro{\workbrief}{work-summary}
+ \tsmacro{\advisorreview}{advisor's-review}
+ \tsmacro{\coadvisorreason}{reason-for-a-coadvisor}
+ \tsmacro{\workchange}{reason-for-the-change}
+ \end{codesyntax}
+Those commands are only of use when using \tsobj[pkg]{ufrgscca-forms}. \tsmacro{\workbrief}{} sets the work initial summary, \tsmacro{\coadvisorreason}{} sets the justification for having a co-advisor, \tsmacro{\advisorreview}{} sets the advisor's review, \tsmacro{\workchange}{} sets the reason for the work's theme change.
+\end{codedescribe}
+
\begin{codedescribe}{\advisor,\advisorinfo}%,\advisorgender}
\begin{codesyntax}
- \tsobj[code]{\advisor}{\tsobj[oarg]{title}\tsobj[marg]{last}\tsobj[marg]{first}\tsobj[oarg]{gender}}
+ \tsobj[code]{\advisor}{\tsargs[oarg]{title}\tsargs[marg]{last,first}\tsargs[oarg]{gender}}
\tsmacro{\advisorinfo}{Institut,title-info,email,phone}
\end{codesyntax}
\end{codedescribe}
\begin{codedescribe}{\coadvisor,\coadvisorinfo}%,\coadvisorgender}
\begin{codesyntax}
- \tsobj[code]{\coadvisor}{\tsobj[oarg]{title}\tsobj[marg]{last}\tsobj[marg]{first}\tsobj[oarg]{gender}}
+ \tsobj[code]{\coadvisor}{\tsargs[oarg]{title}\tsargs[marg]{last,first}\tsargs[oarg]{gender}}
\tsmacro{\coadvisorinfo}{Institut,title-info,email,phone}
\end{codesyntax}
\end{codedescribe}
+\begin{codedescribe}[code,new=2023/11/18]{\distinctboard}
+ \begin{codesyntax}%
+ \tsmacro{\distinctboard}{}
+ \end{codesyntax}
+For the rare case in which the advisor won't take part in the examiner's board.
+\end{codedescribe}
+
+
\begin{codedescribe}{\examiner,\examinerinfo}%,\examinergender}
\begin{codesyntax}
- \tsobj[code]{\examiner}{\tsobj[oarg]{title}\tsobj[marg]{last}\tsobj[marg]{first}\tsobj[oarg]{gender}}
+ \tsobj[code]{\examiner}{\tsargs[oarg]{title}\tsargs[marg]{last,first}\tsargs[oarg]{gender}}
\tsmacro{\examinerinfo}{Institut,title-info,email,phone}
\end{codesyntax}
\end{codedescribe}
\begin{codedescribe}{\altexaminer,\altexaminerinfo}%,\altexaminergender}
\begin{codesyntax}
- \tsobj[code]{\altexaminer}{\tsobj[oarg]{title}\tsobj[marg]{last}\tsobj[marg]{first}\tsobj[oarg]{gender}}
+ \tsobj[code]{\altexaminer}{\tsargs[oarg]{title}\tsargs[marg]{last,first}\tsargs[oarg]{gender}}
\tsmacro{\altexaminerinfo}{Institut,title-info,email,phone}
\end{codesyntax}
\end{codedescribe}
+\begin{codedescribe}[code,new=2023/11/18]{\internship}%,\tutorgender}
+\begin{codesyntax}
+ \tsmacro{\internship}{company,field,start,end,length}
+\end{codesyntax}
+\end{codedescribe}
+
\begin{codedescribe}{\tutor,\tutorinfo}%,\tutorgender}
\begin{codesyntax}
- \tsobj[code]{\tutor}{\tsobj[oarg]{title}\tsobj[marg]{last}\tsobj[marg]{first}\tsobj[oarg]{gender}}
+ \tsobj[code]{\tutor}{\tsargs[oarg]{title}\tsargs[marg]{last,first}\tsargs[oarg]{gender}}
\tsmacro{\tutorinfo}{Institut,title-info,email,phone}
\end{codesyntax}
\end{codedescribe}
\begin{codedescribe}{\supervisor,\supervisorinfo}%,\tutorgender}
\begin{codesyntax}
- \tsobj[code]{\supervisor}{\tsobj[oarg]{title}\tsobj[marg]{last}\tsobj[marg]{first}\tsobj[oarg]{gender}}
+ \tsobj[code]{\supervisor}{\tsargs[oarg]{title}\tsargs[marg]{last,first}\tsargs[oarg]{gender}}
\tsmacro{\supervisorinfo}{register,office,email,phone}
\end{codesyntax}
\end{codedescribe}
\begin{tsremark}[N.B.:]
-The commands \tsmacro{\advisor}{}, \tsmacro{\coadvisor}{}, \tsmacro{\examiner}{} and \tsmacro{\altexaminer}{} are meant to be used in a 'final work' doc. The Macros \tsmacro{\tutor}{} and \tsmacro{\supervisor}{} in case of an internship report.
+The commands \tsobj{\advisor,\coadvisor,\examiner,\altexaminer} are meant to be used in a 'final work' doc. The Macros \tsobj{\internship,\tutor,\supervisor} in case of an internship report.
\end{tsremark}
\section{\tightul{ufrgscca-cover} Package}
-This package is the one that sets the front pages, depending on the kind of 'report' being generated. The default being to generate 3 cover pages: an identification on, followed by presentation one, then an referral/approval one.
+This package is the one that sets the front pages, depending on the kind of 'report' being generated.
-\subsection{Package Options}
-\begin{describelist}{option}
- \describe {report} { in case the doc is just a class assignment with, possibly, many co-authors. It changes mainly the front matter, which is simplified (no referral page, for instance).}
- \describe {internship} { in case the doc is an internship report.}
- \describe {nonrequired} { in case the internship report is related to a “non required” / “optional” internship. This option is ignored otherwise.}
+%%%\subsection{Package Options}
+%%%\begin{describelist}{option}
+%%% \describe {report} { in case the doc is just a class assignment with, possibly, many co-authors. It changes mainly the front matter, which is simplified (no referral page, for instance).}
+%%% \describe {internship} { in case the doc is an internship report.}
+%%% \describe {nonrequired} { in case the internship report is related to a “non required” / “optional” internship. This option is ignored otherwise.}
+%%%
+%%%\end{describelist}
+\subsection{Defined Commands}
+\begin{codedescribe}[code,new=2023/11/18]{\MakeCoverPages}
+ \begin{codesyntax}%
+ \tsmacro{\MakeCoverPages}{type}
+ \end{codesyntax}
+This is the main command, which will typeset the front matter, from the information already given. \tsobj[meta]{type} sets the 'kind' of cover pages to be generated. Currently, it can be one of:
+\end{codedescribe}
+\begin{describelist}{option}
+\describe{tccI}{Generate 3 pages, a first cover one, a second with work's description and third last one with work's approval for TCC-I}
+\describe{tccII}{Generate 3 pages, a first cover one, a second with work's description and third last one with work's approval for TCC-II}
+\describe{internship}{Generate 2 pages, a first cover one, a second with work's approval for internship report}
+\describe{internship-opt}{Generate 2 pages, a first cover one, a second with work's approval for optional internship report}
+\describe{class-report}{Generate 1 cover page}
\end{describelist}
+\begin{tsremark}[N.B.:]
+ If the package option \tsobj[option]{oldrenews} is used, the command \tsobj{\maketitle} will be redefined as an allias to \tsobj{\MakeCoverPages}.
+\end{tsremark}
-\subsection{Defined Commands}
-\begin{codedescribe}{\maketitle}
+
+\begin{codedescribe}{\location}
\begin{codesyntax}%
- \tsmacro{\maketitle}{}
+ \tsmacro{\location}{city,state}
\end{codesyntax}
-This is the only main command, which will typeset the front matter. It requires that all \emph{specific info} be already set up (like work title, author's name, affiliation, etc.)
+ To redefine the default values of \tsobj[meta]{city} and \tsobj[meta]{state} (Porto Alegre and RS).\\
\end{codedescribe}
+\begin{codedescribe}[code,new=2023/11/18]{\class}
+ \begin{codesyntax}%
+ \tsmacro{\class}{code,name}
+ \end{codesyntax}
+ To set the class code and name, for the cover page, in case of a class report.
+\end{codedescribe}
-\begin{codedescribe}{\course,\courseacronym,\graduationtitle,\university,\universityacronym,%
- \universitydivision,\divisiongradcouncil,\department,\classcode,\classname,\subject}
-\begin{codesyntax}%
- \tsmacro{\course}{arg}
- \tsmacro{\courseacronym}{arg}
- \tsmacro{\graduationtitle}{arg}
- \tsmacro{\university}{arg}
- \tsmacro{\universityacronym}{arg}
- \tsmacro{\universitydivision}{arg}
- \tsmacro{\divisiongradcouncil}{arg}
- \tsmacro{\department}{arg}
- \tsmacro{\classcode}{arg}
- \tsmacro{\classname}{arg}
- \tsmacro{\subject}{arg}
-\end{codesyntax}
-In case some customization is needed, one can change them as needed. The default values are set for the \emph{control and automation} course at UFRGS/EE.
+
+\begin{codedescribe}[code,new=2023/11/18]{\SetCoverFields}
+ \begin{codesyntax}%
+ \tsmacro{\SetCoverFields}{type,field,value}
+ \end{codesyntax}
+ This allows to redefine the aforementioned \tsobj[meta]{types} and create new types of cover pages. \tsobj[meta]{field} is one of:
\end{codedescribe}
+\begin{describelist}{option}
+\describe{clist}{this defines which kind, and order, of pages will be generated. Possible values are: \tsobj[option]{cover,desc,approval}.}
+\describe{top}{This will be the common top matter used.}
+\describe{students}{How students names, authors, will be presented}
+\describe{title}{The title to be used}
+\describe{bottom}{The bottom of the cover page.}
+\describe{text-descpage}{The text presented in the desc page.}
+\describe{advisor-descpage}{Advisor's matter.}
+\describe{bottom-descpage}{The bottom of the desc page.}
+\describe{text-approvalpage}{The text presented in the approval page.}
+\describe{advisor-approvalpage}{Advisor´s matter in the approval page.}
+\describe{bottom-approvalpage}{The bottom of the approval page.}
+\end{describelist}
+
+
+%%
+%%\begin{codedescribe}{\course,\courseacronym,\graduationtitle,\university,\universityacronym,%
+%% \universitydivision,\divisiongradcouncil,\department,\classcode,\classname,\subject}
+%%\begin{codesyntax}%
+%% \tsmacro{\course}{arg}
+%% \tsmacro{\courseacronym}{arg}
+%% \tsmacro{\graduationtitle}{arg}
+%% \tsmacro{\university}{arg}
+%% \tsmacro{\universityacronym}{arg}
+%% \tsmacro{\universitydivision}{arg}
+%% \tsmacro{\divisiongradcouncil}{arg}
+%% \tsmacro{\department}{arg}
+%% \tsmacro{\classcode}{arg}
+%% \tsmacro{\classname}{arg}
+%% \tsmacro{\subject}{arg}
+%%\end{codesyntax}
+%%In case some customization is needed, one can change them as needed. The default values are set for the \emph{control and automation} course at UFRGS/EE.
+%%\end{codedescribe}
\section{\tightul{ufrgscca-forms} Package}
This package defines just two user commands to generate specific forms needed at UFRGS/EE.
@@ -641,7 +836,7 @@ The command \tsmacro{\tcforms}{} will generate the many forms (\tsobj[meta]{form
\end{codedescribe}
-\tsobj[meta]{formslist} is a csv list of any of:
+\tsobj[meta]{formslist} is a csv list of:
\begin{describelist*}{option}
\describe {reqform-I} {}
\describe {reqform-II} { Registration requirement form.}
@@ -662,10 +857,18 @@ The command \tsmacro{\tcforms}{} will generate the many forms (\tsobj[meta]{form
\end{describelist*}
Please note that those '-I' regards TCC-I, while '-II' regards TCC-II.
+\begin{codedescribe}[code,new=2023/11/18]{\SetForm,\MakeForm}
+ \begin{codesyntax}%
+\tsmacro{\SetForm}{form-hash,field,code}
+\tsmacro{\MakeForm}{form-hash}
+\end{codesyntax}
+\tsobj{\SetForm} can be used to set new forms (or redefine existent ones). \tsobj[meta]{form-hash} being a free identifier. Possible \tsobj[meta]{field} values are \tsobj[key]{heading,title,opening,body,closing,footnone}. \tsobj{\MakeForm} typesets the selected form.
+\end{codedescribe}
+
\section{\tightul{ufrgscca-lists} Package}
The following packages are always pre-loaded: \tsobj[pkg]{ newfloat, listings, xcolor}.
-It defines a new \emph{floating environment}. Combined with \tsobj[pkg]{listings} one can typeset exempts of \emph{code listing}.
+It defines a new \emph{floating environment} \tsobj[env]{codelist}. Combined with \tsobj[pkg]{listings} one can typeset exempts of a \emph{code listing}.
\subsection{Environment}
\begin{codedescribe}[env]{codelist}
@@ -723,73 +926,58 @@ A new float environment, named \tsobj[env]{env-name}, will be created. Captions
\fi
\iffulldoc
-\section{\tightul{ufrgscca-gen} Package (extended documentation)}
-Just two set of commands are defined, one is kind of a 'command factory' aimed at creating macros in a standard way, while the other helps create 'case like' commands.
-
-
-\subsection{Package Options}
-\begin{describelist}{option}
- \describe {family} { sets the family name, defaults to \tsobj[value]{tcdef}.}
- \describe {group} { sets the group name, defaults to \tsobj[value]{gen}.}
-\end{describelist}
-
-\subsection{Defined Commands}
-\begin{codedescribe}{\cmdfactory,\factory,\tcgen@cdef}
- \begin{codesyntax}%
- \tsobj[code]{\cmdfactory}{\tsobj[oarg]{fam}\tsobj[xarg]{grp}\tsobj[marg]{cmd-list}}
- \tsobj[code]{\factory}{\tsobj[oarg]{fam}\tsobj[xarg]{grp}\tsobj[marg]{cmd}}
- \tsobj[code]{\tcgen@cdef}{\tsobj[oarg]{fam}\tsobj[xarg]{grp}\tsobj[marg]{cmd}\tsobj[marg]{new-val}}
- \end{codesyntax}
- \tsmacro{\cmdfactory}{} is the actual command meant to be used (the other two are just auxiliary ones). \tsobj[meta]{cmd-lst} is a csv list of commands. \tsobj[meta]{fam} is the command \emph{family} (defaults to \emph{tcdef}) and \tsobj[meta]{grp} is the family group (defaults to \emph{gen}).
-
- The newly created commands will be based on \tsmacro{\tcgen@cdef}{} (the actual assigment command) having the form \tsmacro{\cmd}{new-val}, accepting a single mandatory value. Internally \tsobj[meta]{new-val} will be stored in a macro likely named \tsmacro{\fam@grp@cmd}{}.
-
- \tsmacro{\factory}{} is basically the same as \tsmacro{\cmdfactory}{}, whilst to create just one new command (it is the command called by \tsmacro{\cmdfactory}{} via \tsmacro{\forcsvlist}{}.)
-\end{codedescribe}
-
-\begin{codedescribe}{\mkswitch,\addcase}
- \begin{codesyntax}%
- \tsmacro{\mkswitch}[default]{sw-name}
- \tsmacro{\addcase}{sw-name,str-case,code}
- \end{codesyntax}
- \tsmacro{mkswitch}{} will create a command, \tsmacro{\sw-name}{case}, which will behave like a switch/case in other programming languages. \tsobj[meta]{default} is the code to be executed in case a \emph{switching value} isn't defined.
- \tsmacro{\addcase}{} adds \emph{cases}, one by one, to the switch. \tsobj[meta]{str-case} can be any \tsmacro{\csname}{} valid name. \tsobj[meta]{code} is the code to be executed.
-
- \begin{codestore}[st=d.switch]
- \mkswitch[\gr@depcut]\gr@case@angle
- \addcase\gr@case@angle{}{\def\gr@ANG{0}}
- \addcase\gr@case@angle{A}{\def\gr@ANG{\gr@A}}
- %%
- %% actual use of the switch
- \gr@case@angle{A} % this will result in \def\gr@ANG{\gr@A}
- \end{codestore}
- \tscode*{d.switch}
-\end{codedescribe}
+%%%%\section{\tightul{ufrgscca-gen} Package (extended documentation)}
+%%%%Just two set of commands are defined, one is kind of a 'command factory' aimed at creating macros in a standard way, while the other helps create 'case like' commands.
+%%%%
+%%%%
+%%%%\subsection{Package Options}
+%%%%\begin{describelist}{option}
+%%%% \describe {family} { sets the family name, defaults to \tsobj[value]{tcdef}.}
+%%%% \describe {group} { sets the group name, defaults to \tsobj[value]{gen}.}
+%%%%\end{describelist}
+%%%%
+%%%%\subsection{Defined Commands}
+%%%%\begin{codedescribe}{\cmdfactory,\factory,\tcgen@cdef}
+%%%% \begin{codesyntax}%
+%%%% \tsobj[code]{\cmdfactory}{\tsobj[oarg]{fam}\tsobj[xarg]{grp}\tsobj[marg]{cmd-list}}
+%%%% \tsobj[code]{\factory}{\tsobj[oarg]{fam}\tsobj[xarg]{grp}\tsobj[marg]{cmd}}
+%%%% \tsobj[code]{\tcgen@cdef}{\tsobj[oarg]{fam}\tsobj[xarg]{grp}\tsobj[marg]{cmd}\tsobj[marg]{new-val}}
+%%%% \end{codesyntax}
+%%%% \tsmacro{\cmdfactory}{} is the actual command meant to be used (the other two are just auxiliary ones). \tsobj[meta]{cmd-lst} is a csv list of commands. \tsobj[meta]{fam} is the command \emph{family} (defaults to \emph{tcdef}) and \tsobj[meta]{grp} is the family group (defaults to \emph{gen}).
+%%%%
+%%%% The newly created commands will be based on \tsmacro{\tcgen@cdef}{} (the actual assigment command) having the form \tsmacro{\cmd}{new-val}, accepting a single mandatory value. Internally \tsobj[meta]{new-val} will be stored in a macro likely named \tsmacro{\fam@grp@cmd}{}.
+%%%%
+%%%% \tsmacro{\factory}{} is basically the same as \tsmacro{\cmdfactory}{}, whilst to create just one new command (it is the command called by \tsmacro{\cmdfactory}{} via \tsmacro{\forcsvlist}{}.)
+%%%%\end{codedescribe}
+%%%%
+%%%%\begin{codedescribe}{\mkswitch,\addcase}
+%%%% \begin{codesyntax}%
+%%%% \tsmacro{\mkswitch}[default]{sw-name}
+%%%% \tsmacro{\addcase}{sw-name,str-case,code}
+%%%% \end{codesyntax}
+%%%% \tsmacro{mkswitch}{} will create a command, \tsmacro{\sw-name}{case}, which will behave like a switch/case in other programming languages. \tsobj[meta]{default} is the code to be executed in case a \emph{switching value} isn't defined.
+%%%% \tsmacro{\addcase}{} adds \emph{cases}, one by one, to the switch. \tsobj[meta]{str-case} can be any \tsmacro{\csname}{} valid name. \tsobj[meta]{code} is the code to be executed.
+%%%%
+%%%% \begin{codestore}[st=d.switch]
+%%%% \mkswitch[\gr@depcut]\gr@case@angle
+%%%% \addcase\gr@case@angle{}{\def\gr@ANG{0}}
+%%%% \addcase\gr@case@angle{A}{\def\gr@ANG{\gr@A}}
+%%%% %%
+%%%% %% actual use of the switch
+%%%% \gr@case@angle{A} % this will result in \def\gr@ANG{\gr@A}
+%%%% \end{codestore}
+%%%% \tscode*{d.switch}
+%%%%\end{codedescribe}
\fi
\iffulldoc
\section{\tightul{ufrgscca-coord} Package (extended documentation)}
This package defines a set of auxiliary commands meant to support the Professor coordinating students work.
-it will always pre-load the \tsobj[pkg]{longtable} and \tsobj[pkg]{ufrgscca-forms} packages. One can select the reports/forms to be generated using the package options or the command \tsmacro{\setreports}{keys}
+it will always pre-load the \tsobj[pkg]{longtable} and \tsobj[pkg]{ufrgscca-forms} packages.
N.B. It might be also useful to use the commands defined at \autonameref{forms.commands}.
-\subsection{Package/Report Options}\label{ufrgscca-coord.options}
-\begin{describelist}{option}
- \describe {calendar} { Calendar for the period.}
- \describe {checklist} { a students check list.}
- \describe {report} { a student control report.}
- \describe {reportxinfo} { report additional info.}
- \describe {boards} { exam board dates.}
- \describe {boarddates} { exam board dates with highlighted dates.}
- \describe {studentlist} { a simple student list.}
- \describe {revforms} { per student reviews forms.}
- \describe {referral} { per student referral letters.}
- \describe {cocertificate} { per student coadvisor certificate letter (if any).}
-\end{describelist}
-
-\subsection{Defined Commands}
-The \emph{report document} to be created is composed of 2 main parts:
+A \emph{report document} is composed of 2 main parts:
\begin{enumerate}[tcc,arabic,miditemsep]
\item A global preamble, where one sets
\begin{enumerate}[tcc,alpha*,noitemsep]
@@ -800,25 +988,28 @@ The \emph{report document} to be created is composed of 2 main parts:
\item A 'final part' whereas one set which reports are to be generated.
\end{enumerate}
-\subsubsection{Global Commands I}
-One can (should) use the commands listed at \autonameref{core-commands}, and these below:
+One can (should) use the commands listed at \autonameref{core-commands}[], and these below:
-\begin{codedescribe}{\checkdef}%,\checklist}
+\paragraph{Check List}
+\begin{codedescribe}[code,update=2023/11/18]{\checkdef,\checklist}%,\checklist}
\begin{codesyntax}%
- \tsmacro{\checkdef}{checkLC,check-item,check-text}
+ \tsmacro{\checkdef}{LxCy,check-item,check-text}
+ \tsmacro{\checklist}{check-items-list}
\end{codesyntax}
-Whereas one has a '4x5 alphabetic matrix', lines A to D, columns A to E. \tsobj[meta]{checkLC} being one element of that matrix (from checkAA up to checkDE), \tsobj[meta]{chek-item} is a free identifier (to be used with the \tsmacro{\checklist}{}), and \tsobj[meta]{check-text} the text to appear in the 'check list report'. So, for instance:
+Whereas one has a '4x5 matrix' (\tsobj[meta]{checkLC} being one of L1C1...L1C5, ... , L4C1...L4C5). \tsobj[meta]{chek-item} is a free identifier (to be used with the \tsmacro{\checklist}{}), and \tsobj[meta]{check-text} the text to appear in the 'check list report'. Note this is a list \textbf{per activity} (the current one being set).
+
+\tsmacro{\checklist}{} set's those items for the current student. \tsobj[marg]{check-items-list} is a comma separated list of \tsobj[marg]{check-item}.
\begin{codestore}[st=d.check]
- \checkdef{checkAA}{tcc-part}{Rel. Parcial} % this creates the 'check item' tcc-part and associates it with the AA position (first line, first column), display text 'Rel. Parcial'
- \checkdef{checkBA}{partOK}{Aprov. Rel. Parcial} % this creates 'partOK' and associates it with BA position
+ \checkdef{L1C1}{tcc-part}{Rel. Parcial} % this creates the 'check item' tcc-part and associates it with the L1C1 position (first line, first column), display text 'Rel. Parcial'
+ \checkdef{L2C1}{partOK}{Aprov. Rel. Parcial} % this creates 'partOK' and associates it with L2C1 position
- \checkdef{checkAB}{board}{Banca def.} %
- \checkdef{checkBB}{board-date}{Data defesa} % 'board-date' is associated with the BB position
+ \checkdef{L1C2}{board}{Banca def.} %
+ \checkdef{L2C2}{board-date}{Data defesa} % 'board-date' is associated with the L2C2 position
- \checkdef{checkAE}{tcc-final}{TCC final} %
- \checkdef{checkBE}{approval}{Aprovação Correções} %
- \checkdef{checkDE}{exam}{Em Exame} % 'exam' (display 'Em Exame') is associated with the DE position
+ \checkdef{L1C5}{tcc-final}{TCC final} %
+ \checkdef{L2C5}{approval}{Aprovação Correções} %
+ \checkdef{L4C5}{exam}{Em Exame} % 'exam' (display 'Em Exame') is associated with the L4C5 position
%%
%%
%% later on, one can use (inside a \NewStudent command)
@@ -828,129 +1019,141 @@ Whereas one has a '4x5 alphabetic matrix', lines A to D, columns A to E. \tsobj[
\tscode*[emph={{tcc-part},partOK,board,board-date,{tcc-final},approval,exam}]{d.check}
-Be aware that, \tsmacro{\checkdef}{} can and should be only used at the preamble, whereas \tsmacro{\checklist}{} can only be used at the 'student data definition' context (meaning, inside the \tsmacro{\NewStudent}{} command).
\end{codedescribe}\\
-\paragraph{Final Work Specific}
+\paragraph{Auxiliary / Report Specific}
-\begin{codedescribe}{\boardstitleB,\boardsOBS,\TCCperiod}
+\begin{codedescribe}[code,new=2023/11/18]{\ActivitySetNewEvent,\ActivitySetEventDay}
\begin{codesyntax}%
- \tsmacro{\boardstitleB}{titleB}
- \tsmacro{\boardsOBS}{obs}
- \tsmacro{\TCCperiod}{semester}
+ \tsmacro{\ActivitySetNewEvent}[act-hash]{event-hash,event-desc}
+ \tsmacro{\ActivitySetEventDay}[act-hash]{event-hash,day,week}
\end{codesyntax}
- \tsmacro{boardstitleB}{} sets a 2nd title line for the 'boards schedule report'. \tsmacro{\boardsOBS}{} allows to add an observation (\tsobj[meta]{obs}) for the 'boards schedule report', finally, \tsmacro{\TCCperiod} sets the current semester value.
+An activity may have a calendar/set of associated events. \tsobj[meta]{event-hash} is just a hash to reference it (\tsobj[pack]{starray} hash). \tsobj[meta]{event-desc} is the text associated with it. \tsobj[meta]{day,week} the associated date.
\end{codedescribe}
-\begin{codedescribe}[code,update=2023/05/29]{\tcccalendarreset,\tcccalendarevent,\tcccalendareventdate}
+
+\begin{codedescribe}[code,new=2023/11/18]{\studentremark,\studentnewpage,\distinctboard}
\begin{codesyntax}%
- \tsmacro{\tcccalendarreset}{}
- \tsmacro{\tcccalendarevent}{week,description}
- \tsmacro{\tcccalendareventdate}{date}
+ \tsmacro{\studentremark}{remarks}
+ \tsmacro{\studentnewpage}[student-hash]{}
+ \tsmacro{\distinctboard}{}
\end{codesyntax}
-With \tsobj{\tcccalendarevent} one defines the many calendar events. \tsobj[marg]{week} defines the event's week, and \tsobj[marg]{description} the associated text. Furthermore \tsobj{\tcccalendareventdate} defines the associated \tsobj[marg]{date}. \tsobj{\tcccalendarevent} is, normally, pre-set in the \emph{ufrgscca-ptBR-coord.def} file, but can be redefined using first \tsobj{\tcccalendarreset}.
+Those commands are only of use when using \tsobj[pkg]{ufrgscca-coord}. \tsmacro{\studentremark}{} sets a free remark text (notes about). Whilst, \tsobj{\distinctboard,\studentnewpage} set the \tsobj[key]{flag-distinctboard,flag-newpage} flags..
\end{codedescribe}
-\begin{codedescribe}{\tcceventAweek,\tcceventBweek,.,.,.,.,\tcceventJweek}
- \begin{codesyntax}%
- \tsmacro{\tcceventAweek}{week num.}
- \tsmacro{\tcceventBweek}{week num.}
- \ensuremath{\cdots}
- \tsmacro{\tcceventJweek}{week num.}
- \end{codesyntax}
- Those macros allow to change the default week value for the calendar's events.
-\end{codedescribe}
-
-\paragraph{Internship Specific}
-
-\begin{codedescribe}{\intershipcommitdates}
- \begin{codesyntax}%
- \tsmacro{\intershipcommitdates}{date I}{date II}
- \end{codesyntax}
- Use \tsmacro{\intershipcommitdates}{} to set the semester deadlines. Both dates must be given in the dd/mm/yyyy format.
- \tsobj[meta]{date I} is the deadline for a given report still be fully evaluated. After \tsobj[meta]{date I} the given internship will be in “exam”. If the student report isn't submitted until \tsobj[meta]{date II} the student will fail with an “FF” grade.
+\begin{codedescribe}[code,new=2023/11/18]{\studentCase,\studentCoadvCase,\studentDismissCase,\studentNewPageCase,\studentDistinctBoardCase}
+ \begin{codesyntax}%
+ \tsmacro{\studentCase}{if-A-B-C,if-D,if-Exam-C,if-Exam-D,if-FF}
+ \tsmacro{\studentCoadvCase}{if-defined,if-not}
+ \tsmacro{\studentDismissCase}{if-dismiss,if-not}
+ \tsmacro{\studentNewPageCase}{if-new,if-not}
+ \tsmacro{\studentDistinctBoardCase}{if-distinct,if-not}
+ \end{codesyntax}
+These are a set of auxiliary conditionals, for instance, \tsobj{\StudentCase} will execute \emph{only one} of the \tsobj[meta]{if-} accordingly.
\end{codedescribe}
-\subsubsection{Global Commands II}\label{new-student}
-
-\begin{codedescribe}{\NewStudent}
+\begin{codedescribe}[code,new=2023/11/18]{\boardtitle,\boardobs,\semester}
\begin{codesyntax}%
- \tsmacro{\NewStudent}{studentname,code}
+ \tsmacro{\boardtitle}{title}
+ \tsmacro{\boardobs}{obs}
+ \tsmacro{\semester}{semester}
\end{codesyntax}
- This is the main command describing each \tsobj[meta]{student} associated work, advisor and exam board. In \tsobj[meta]{code} one should use the commands defined in \autonameref{core-specific-commands}, and \autonameref{student-specific-commands} (although one can use any valid \LaTeXe~ preamble code, keep in mind those will be executed BEFORE \tsmacro{\begin{document}}{}), to describe a student work.
-\end{codedescribe}
- So, for instance:
- \begin{codestore}[st=d.newstudent]
-\NewStudent{Artur}{
- \student{last}{first}[m]
-
- \studentinfo[]{243716}{email@somewhere}
- \TCCtitle{work title}
- \advisor{de Amorin}{Heraldo José}[m]
- \coadvisor{Camargo Nardelli}{Vítor}[m]
- \examinergrades{9.2}{8.5}{9.2}
- \examiner{Götz}{Marcelo}[m]
- \examinergrades{10}{9.5}{9.5}
- \examiner{Comparsi Laranja}{Rafael Antônio}
- \examinergrades{8.5}{8.5}{8}
- \altexaminer{Ventura Bayan Henriques}{Renato}
- %%
- %%
- \timeslot[Teams]{12/11}{15:30}
-
- \studentFate[Dismiss] %% FF or Dismiss ??
-}
-\end{codestore}
-
-\tscode*{d.newstudent}
-
-\begin{tsremark}[N.B.:]
-Internally, \tsmacro{\NewStudent}{} will create a command named \tsmacro{\studentname}{}, with a \emph{hook} named \tsmacro{\studentname.hook}{} (the dot is part of the hook's name).
-\end{tsremark}
-
-
-\begin{codedescribe}{\NewInternshipStudent}
- \begin{codesyntax}%
- \tsmacro{\NewInternshipStudent}{studentname,code}
- \end{codesyntax}
- This is the main command describing each \tsobj[meta]{student} associated internship, tutor and advisor. In \tsobj[meta]{code} one should use the commands defined in \autonameref{core-specific-commands}, and \autonameref{student-specific-commands} (although one can use any valid \LaTeXe~ preamble code, keep in mind those will be executed BEFORE \tsmacro{\begin{document}}{}), to describe a student internship.
- \end{codedescribe}
- So, for instance:
- \begin{codestore}[st=d.newstudentB]
- \NewStudent{Artur}{
- \student{last}{first}[m]
- \studentinfo[]{243716}{email@somewhere}
- \internship{Empresa I}{P\&D}{10/10/22}{20/12/22}{2 Meses}
-
- \supervisor[Eng. I]{do Supervisor}{Nome}[m]
- \supervisorinfo{crea I}{posição/cargo}{email}{ramal}
-
- \internshipsupervisorgrades{4}{4}{4}{4}{5}
- \internshipsupervisorgrades{4}{4}{4}{4}{5}
- \internshiptutorgrades{90}
- \internshipcoordgrades{90}
-
- \tutor[Prof.~Dr.]{do Tutor I}{Nome}[m]
- \tutorinfo{UFRGS}{Instituição I-- Cidade, País}{email}{ramal}
-
- \studentFate[Dismiss] %% FF or Dismiss ??
- }
-\end{codestore}
-
- \tscode*{d.newstudentB}
-\begin{tsremark}[N.B.:]
- Internally, \tsmacro{\NewInternshipStudent}{} will create a command named \tsmacro{\studentname}{}, with a \emph{hook} named \tsmacro{\studentname.hook}{} (the dot is part of the hook's name).
-\end{tsremark}
-
-
-\subsubsection{Student Specific Commands}\label{student-specific-commands}
-\begin{codedescribe}{\studentFate}
+ \tsmacro{\boardobs}{} allows to add an observation (\tsobj[meta]{obs}) for the 'boards schedule report', and \tsmacro{\semester} sets the current semester value.
+\end{codedescribe}
+
+
+%%%%\paragraph{Internship Specific}
+%%%%
+%%%%\begin{codedescribe}{\intershipcommitdates}
+%%%% \begin{codesyntax}%
+%%%% \tsmacro{\intershipcommitdates}{date I}{date II}
+%%%% \end{codesyntax}
+%%%% Use \tsmacro{\intershipcommitdates}{} to set the semester deadlines. Both dates must be given in the dd/mm/yyyy format.
+%%%% \tsobj[meta]{date I} is the deadline for a given report still be fully evaluated. After \tsobj[meta]{date I} the given internship will be in “exam”. If the student report isn't submitted until \tsobj[meta]{date II} the student will fail with an “FF” grade.
+%%%%\end{codedescribe}
+
+
+
+%%\subsubsection{Global Commands II}\label{new-student}
+
+%%%%\begin{codedescribe}{\NewStudent}
+%%%% \begin{codesyntax}%
+%%%% \tsmacro{\NewStudent}{studentname,code}
+%%%% \end{codesyntax}
+%%%% This is the main command describing each \tsobj[meta]{student} associated work, advisor and exam board. In \tsobj[meta]{code} one should use the commands defined in \autonameref{core-specific-commands}, and \autonameref{student-specific-commands} (although one can use any valid \LaTeXe~ preamble code, keep in mind those will be executed BEFORE \tsmacro{\begin{document}}{}), to describe a student work.
+%%%%\end{codedescribe}
+%%%% So, for instance:
+%%%% \begin{codestore}[st=d.newstudent]
+%%%%\NewStudent{Artur}{
+%%%% \student{last}{first}[m]
+%%%%
+%%%% \studentinfo[]{243716}{email@somewhere}
+%%%% \TCCtitle{work title}
+%%%% \advisor{de Amorin}{Heraldo José}[m]
+%%%% \coadvisor{Camargo Nardelli}{Vítor}[m]
+%%%% \examinergrades{9.2}{8.5}{9.2}
+%%%% \examiner{Götz}{Marcelo}[m]
+%%%% \examinergrades{10}{9.5}{9.5}
+%%%% \examiner{Comparsi Laranja}{Rafael Antônio}
+%%%% \examinergrades{8.5}{8.5}{8}
+%%%% \altexaminer{Ventura Bayan Henriques}{Renato}
+%%%% %%
+%%%% %%
+%%%% \timeslot[Teams]{12/11}{15:30}
+%%%%
+%%%% \studentFate[Dismiss] %% FF or Dismiss ??
+%%%%}
+%%%%\end{codestore}
+%%%%
+%%%%\tscode*{d.newstudent}
+%%%%
+%%%%\begin{tsremark}[N.B.:]
+%%%%Internally, \tsmacro{\NewStudent}{} will create a command named \tsmacro{\studentname}{}, with a \emph{hook} named \tsmacro{\studentname.hook}{} (the dot is part of the hook's name).
+%%%%\end{tsremark}
+%%%%
+%%%%
+%%%%\begin{codedescribe}{\NewInternshipStudent}
+%%%% \begin{codesyntax}%
+%%%% \tsmacro{\NewInternshipStudent}{studentname,code}
+%%%% \end{codesyntax}
+%%%% This is the main command describing each \tsobj[meta]{student} associated internship, tutor and advisor. In \tsobj[meta]{code} one should use the commands defined in \autonameref{core-specific-commands}, and \autonameref{student-specific-commands} (although one can use any valid \LaTeXe~ preamble code, keep in mind those will be executed BEFORE \tsmacro{\begin{document}}{}), to describe a student internship.
+%%%% \end{codedescribe}
+%%%% So, for instance:
+%%%% \begin{codestore}[st=d.newstudentB]
+%%%% \NewStudent{Artur}{
+%%%% \student{last}{first}[m]
+%%%% \studentinfo[]{243716}{email@somewhere}
+%%%% \internship{Empresa I}{P\&D}{10/10/22}{20/12/22}{2 Meses}
+%%%%
+%%%% \supervisor[Eng. I]{do Supervisor}{Nome}[m]
+%%%% \supervisorinfo{crea I}{posição/cargo}{email}{ramal}
+%%%%
+%%%% \internshipsupervisorgrades{4}{4}{4}{4}{5}
+%%%% \internshipsupervisorgrades{4}{4}{4}{4}{5}
+%%%% \internshiptutorgrades{90}
+%%%% \internshipcoordgrades{90}
+%%%%
+%%%% \tutor[Prof.~Dr.]{do Tutor I}{Nome}[m]
+%%%% \tutorinfo{UFRGS}{Instituição I-- Cidade, País}{email}{ramal}
+%%%%
+%%%% \studentFate[Dismiss] %% FF or Dismiss ??
+%%%% }
+%%%%\end{codestore}
+%%%%
+%%%% \tscode*{d.newstudentB}
+%%%%\begin{tsremark}[N.B.:]
+%%%% Internally, \tsmacro{\NewInternshipStudent}{} will create a command named \tsmacro{\studentname}{}, with a \emph{hook} named \tsmacro{\studentname.hook}{} (the dot is part of the hook's name).
+%%%%\end{tsremark}
+%%%%
+
+\paragraph{Student Specific Commands}\label{student-specific-commands}
+\begin{codedescribe}[code,update=2023/11/18]{\studentfate}
\begin{codesyntax}%
- \tsmacro{\studentFate}[fate]{}
+ \tsmacro{\studentfate}[fate]{}
\end{codesyntax}
This assigns the \tsobj[meta]{fate} of a student, for those cases that one cannot rely on the 'calculated one' (from examiners individual grades). \tsobj[meta]{fate} can be either C or D (in case a student got in exam), FF for those that haven't finished the work or 'Dismiss' for those that, for whatever reason, got dismissed. The default is 'do nothing' (no \tsobj[meta]{fate} assigned)
\end{codedescribe}
@@ -963,107 +1166,60 @@ This assigns the \tsobj[meta]{fate} of a student, for those cases that one canno
\end{codedescribe}
-\paragraph{Final Student Work Specific ones}
-
-\begin{codedescribe}{\studenttimeslot,\timeslot}
+\begin{codedescribe}[code,update=2023/11/18]{\timeslot}
\begin{codesyntax}%
- \tsmacro{\studenttimeslot}[local]{date,time}
\tsmacro{\timeslot}[local]{date,time}
\end{codesyntax}
-\tsmacro{\timeslot}{} is just an alias of \tsmacro{\studenttimeslot}{}. They set, for the Boards Report, the \tsobj[meta]{local}, \tsobj[meta]{date} and \tsobj[meta]{time} in which a student will have its work presented. Those commands are meant to be used 'inside' a \tsmacro{\NewStudent}{} command.
+To set, for the Boards Report, the \tsobj[meta]{local}, \tsobj[meta]{date} and \tsobj[meta]{time} of a student's presentation work.
\end{codedescribe}
-\begin{codedescribe}{\studentTCCtitle,\TCCtitle,\studentremark}
+\begin{codedescribe}[code,update=2023/11/18]{\worktitle,\studentremark}
\begin{codesyntax}%
- \tsmacro{\studentTCCtitle}{title}
- \tsmacro{\TCCtitle}{title}
+ \tsmacro{\worktitle}{title}
\tsmacro{\studentremark}{remark}
\end{codesyntax}
\end{codedescribe}
-\tsmacro{\TCCtitle}{} is also just an alias to \tsmacro{\studentTCCtitle}{} which just 'defines' the current student “work's title”. \tsmacro{\studentremark}{} just inserts a \tsobj[meta]{remark}, which will appear in the \emph{report}'s report (\ldots report option).
+\tsmacro{\worktitle}{} sets the current student “work's title”. \tsmacro{\studentremark}{} just inserts a \tsobj[meta]{remark}, which will appear in the \emph{report}'s report.
-\begin{codedescribe}{\DistinctBoard,\DefaultBoard}
+\begin{codedescribe}[code,update=2023/11/18]{\distinctboard}
\begin{codesyntax}%
- \tsmacro{\DistinctBoard}{}
- \tsmacro{\DefaultBoard}{}
+ \tsmacro{\distinctboard}{}
\end{codesyntax}
-Normally, the default, it's assumed that the student's advisor will also be a member of the student's exam board. For the ones in which this doesn't holds true, one should use the \tsmacro{\DistinctBoard}{} after informing a student's name (via \tsmacro{\student}{}) and before informing its advisor name (via \tsmacro{\advisor}{}).
+Normally, the default, it's assumed that the student's advisor will also be a member of the student's exam board. For the ones in which this doesn't holds true, one should use the \tsmacro{\DistinctBoard}{} after setting a student's name (via \tsmacro{\student}{}) and before setting its advisor name (via \tsmacro{\advisor}{}).
\end{codedescribe}
For example:
\begin{codestore}[st=d.distinct]
- \NewStudent{Artur}{
- \student{last}{first}[m]
+
+ \student[Arthur]{last}{first}[m]
\studentinfo[]{243716}{email@somewhere}
- \TCCtitle{work title}
- \DistinctBoard
+ \worktitle{work title}
+ \distinctboard
\advisor{de Amorin}{Heraldo José}[m]
\examiner{Götz}{Marcelo}[m] % He will be the 1st examiner
\examiner{Comparsi Laranja}{Rafael Antônio} % the 2nd
\examiner{Ventura Bayan Henriques}{Renato} % the 3rd
- }
\end{codestore}
-\tscode*[emph={DistinctBoard}]{d.distinct}
+\tscode*[emph={distinctboard}]{d.distinct}
-\begin{codedescribe}{\examinergrades}
+\begin{codedescribe}[code,update=2023/11/18]{\examinergrades}
\begin{codesyntax}%
- \tsmacro{\examinersgrades}{N1,N2,N3}
+ \tsmacro{\examinersgrades}{N1,N2,N3}\tsargs[oarg]{N4}
\end{codesyntax}
-Quite obvious, this set the grades given by an examiner (the one defined by the 'last' \tsmacro{\examiner}{} before this.).
-\end{codedescribe}
-
-\paragraph{Internship Specific Ones}
-
-\begin{codedescribe}{\studentturnindate}
- \begin{codesyntax}%
- \tsmacro{\studentturnindate}{date}
- \end{codesyntax}
- The date, in which, the student submitted the Internship Report. Beware, the date must be in the day/month/year format.
-\end{codedescribe}
-
-\begin{codedescribe}{\internshipsupervisorgrades}
- \begin{codesyntax}
- \tsmacro{\internshipsupervisor}{N1,N2,N3,N4,N5}
- \end{codesyntax}
- Quite obvious, this set the grades given by the supervisor, it's meant to be used twice for the two 'grades blocks'.
+Quite obvious, this set the grades given by an examiner (the one defined by the 'last' \tsmacro{\examiner}{} before this.). In case \tsobj[oarg]{N4} is given it's assumed the TCC-I case, otherwise TCC-II.
\end{codedescribe}
-\begin{codedescribe}{\internshiptutorgrades}
- \begin{codesyntax}%
- \tsmacro{\internshipgrades}{N1}
- \end{codesyntax}
- Quite obvious, this set the grade given by the student tutor.
-\end{codedescribe}
-\begin{codedescribe}{\internshipcoordgrades}
- \begin{codesyntax}%
- \tsmacro{\internshipcoordgrades}{N1}
- \end{codesyntax}
- Quite obvious, this set the grade given by the Internship Coordinator.
-\end{codedescribe}
+\paragraph{Reports Command}
-\paragraph{Setting Commands}
-\begin{codedescribe}{\addtostudent}
- \begin{codesyntax}%
- \tsmacro{\addtostudent}{student,code}
- \end{codesyntax}
-\tsobj[meta]{code} will be appended to the command created with \tsmacro{\NewStudent}{}. \tsobj[meta]{student} must be an already defined one, whilst \tsobj[meta]{code} can be anything valid in the context of a \tsmacro{\NewStudent}{} as described in \autonameref{new-student}.
-\end{codedescribe}
-
-\begin{codedescribe}{\setreports}
- \begin{codesyntax}%
- \tsmacro{\setreports}{rep-list}
- \end{codesyntax}
- \tsobj[meta]{rep-list} is a csv list of keys as defined at \autonameref{ufrgscca-coord.options}.
-\end{codedescribe}
\begin{codedescribe}{\setstudentlist}
\begin{codesyntax}%
@@ -1076,19 +1232,29 @@ This command will define/create a list named \tsobj[meta]{listID} composed of a
\begin{codesyntax}%
\tsmacro{\tcreports}[rep-list]{listID}
\end{codesyntax}
- This is the main command (final work reports), to be used only once, at the end of the file. It will typeset the reports, as set by \tsmacro{\setreports}{}, using the student list identified by \tsobj[meta]{listID}.
- \tsobj[meta]{rep-list} is a csv list of keys as defined at \autonameref{ufrgscca-coord.options}.
+ This will typeset the many reports, using the student list defined by \tsobj[meta]{listID}.
+ \tsobj[meta]{rep-list} is a csv list of keys as follow:
\end{codedescribe}
-\begin{codedescribe}{\internshipreports}
- \begin{codesyntax}%
- \tsmacro{\internshipreports}[rep-list]{listID}
- \end{codesyntax}
- This is the main command (internship reports), to be used only once, at the end of the file. It will typeset the reports, as set by \tsmacro{\setreports}{}, using the student list identified by \tsobj[meta]{listID}.
- \tsobj[meta]{rep-list} is a csv list of keys as defined at \autonameref{ufrgscca-coord.options}.
-\end{codedescribe}
+\begin{describelist}{option}
+ \describe {calendar-I} { Calendar for the period, TCC-I.}
+ \describe {report-I} { a student control report, for TCC-I.}
+ \describe {checklist-I} { a student check list, for TCC-I.}
+ \describe {revforms-I} { per student reviews forms, TCC-I.}
+ \describe {referral-I} { per student referral letters, TCC-I.}
+ \describe {calendar-II} { Calendar for the period, TCC-II.}
+ \describe {report-II} { a student control report, for TCC-II.}
+ \describe {checklist-II} { a student check list, for TCC-II.}
+ \describe {revforms-II} { per student reviews forms, TCC-II.}
+ \describe {referral-II} { per student referral letters, TCC-II.}
+ \describe {boards} { exam board dates, TCC-II.}
+ \describe {studentlist} { a simple student list.}
+ \describe {cocertificate} { per student coadvisor certificate letter (if any).}
+% \describe {checklist} { a students check list.}
+\end{describelist}
-\section{\tightul{ufrgscca-ppc} Package (beta) (extended documentation)}
+
+\section{\tightul{ufrgscca-ppc} Package (extended documentation)}
This contains a set of auxiliary commands to keep track of many \emph{indicators} whilst writing a \emph{PPC document} (which is going to be evaluated based on said \emph{indicators}, though the track of those \emph{indicators} themselves shall not appear in the final version of it). Keep in mind, when considering the use of it: “it works as is” but it hasn't being properly debugged, and it might change “as needed locally”.
The packages \tsobj[pkg]{longtable}, \tsobj[pkg]{pdfcomment}, \tsobj[pkg]{mdframed} and \tsobj[pkg]{ufrgscca-curr} will always be pre-loaded.
@@ -1101,12 +1267,6 @@ The packages \tsobj[pkg]{longtable}, \tsobj[pkg]{pdfcomment}, \tsobj[pkg]{mdfram
\end{describelist}
\subsection{Defined Commands}
-\begin{codedescribe}{\maketitle}
- \begin{codesyntax}%
- \tsmacro{\maketitle}{}
- \end{codesyntax}
-The command \tsmacro{\maketitle}{} is redefined for the specifics of a \emph{PPC document}.
-\end{codedescribe}
The next few commands use a finite set of \tsobj[meta]{status} which are a pre-defined list of:
\begin{describelist*}{value}
@@ -1124,11 +1284,11 @@ The next few commands use a finite set of \tsobj[meta]{status} which are a pre-d
\begin{codedescribe}{\declareindicator, \indicatorDesc, \indicatorText}
\begin{codesyntax}%
- \tsmacro{\declareindicator}<*+>[status]{fam,ID,text}
+ \tsobj{\declareindicator}\tsverb{*+}\tsargs[oarg]{status}\tsargs[marg]{fam,ID,text}
\tsmacro{\indicatorDesc}{longdesc,extra}
\tsmacro{\indicatorText}{text}
\end{codesyntax}
-\tsmacro{\declareindicator}{} is the command to create/define a given “indicator”. \tsobj[meta]{fam} set's its \emph{family} group, \tsobj[meta]{ID} is the particular ID/term used to reference it (in a family of indicators), \tsobj[meta]{text} is a short text describing it (it is the text displayed when using the \tsmacro{\indref}{} below.). \tsmacro{\indicatorDesc}{} adds a \tsobj[meta]{longdesc} (long description) and \tsobj[meta]{extra} (extra long description) to a defined \tsmacro{\declareindicator}{} (it will add those text fields to the “last declared one”). \tsobj[meta]{longdesc} will also be displayed when using the \tsmacro{\indref}{} commands, but only if the \tsobj[option]{indlong} option was used. The \tsobj[meta]{extra} will only be used/displayed with the \tsmacro{\PrintIndicators}{} command. Finally, \tsmacro{indicatorText}{} adds a remark \tsobj[meta]{text}, which will be also printed out when using \tsmacro{\lstind}{} (akin of an explanation/remark field.)
+\tsmacro{\declareindicator}{} is the command to create/define a given “indicator”. \tsobj[meta]{fam} set's its \emph{family} group, \tsobj[meta]{ID} is the particular ID/term used to reference it (in a family of indicators), \tsobj[meta]{text} is a short text describing it (it is the text displayed when using the \tsmacro{\indref}{} below.). \tsmacro{\indicatorDesc}{} adds a \tsobj[meta]{longdesc} (long description) and \tsobj[meta]{extra} (extra long description) to a defined \tsmacro{\declareindicator}{} (it will add those text fields to the “last declared one”). \tsobj[meta]{longdesc} will also be displayed when using the \tsmacro{\indref}{} commands, but only if the \tsobj[option]{indlong} option was used. The \tsobj[meta]{extra} will only be used/displayed with the \tsmacro{\PrintIndicators}{} command. Finally, \tsmacro{\indicatorText}{} adds a remark \tsobj[meta]{text}, which will be also printed out when using \tsmacro{\lstind}{} (akin of an explanation/remark field.)
\end{codedescribe}
\begin{codedescribe}{\indsetstatus, \indsetview, \indsethide}
@@ -1233,14 +1393,51 @@ Those are yet another acronym hack. \tsmacro{\acrodef}{} “creates” an acrony
\end{codedescribe}
This is just a tailored “quote” environment, using almost all page width, just in a smaller font size.
-\section{\tightul{ufrgscca-curr} Package (beta) (extended documentation)}
-This package is mostly in beta state, some parts of it should be identified as alpha state. Those are mostly rushed out adaptations of other “solutions at hand”. Literally, try to use it at your own peril.
+\section{\tightul{ufrgscca-curr} Package (extended documentation)}
+The background of it: To have the ability to “describe” (store the information in a “structured way”) an University Course Curricula and have the possibility, later, to presented that same information in many different ways (including a dependence graph). All data is captured/stored in a set of 3 \tsobj[pkg]{starrays}:
+
+
+\begin{codestore}[st=topicsdef]
+ {
+ self = , name = , color = , class lst = , %list (sequence) of classes
+ }
+\end{codestore}
-The background of it: To have the ability to “describe” (store the information in a “structured way”) an University Course Curricula and have the possibility, later, to presented that same information in many different ways (including a dependence graph). To an extended, most of it is done (and working), but hopeless lacking more testing and debugging.
+\tscode*[codeprefix={topics' Structure Definition:},basicstyle={\scriptsize\ttfamily}]{topicsdef}\label{topics-def}
+
+
+\begin{codestore}[st=classdef]
+ {
+ cred = , self = , name = , summary = , topic = , remark = ,
+ bib seq = , bib basic seq = , bib compl seq = ,
+ ref . struct = {
+ curr = , sem = , kind = ,
+ } ,
+ }
+\end{codestore}
+
+\tscode*[codeprefix={Classes' Structure Definition:},basicstyle={\scriptsize\ttfamily}]{classdef}\label{class-def}
+
+\begin{codestore}[st=curriculadef]
+ {
+ self = , name = , text = ,
+ sem.struct = {
+ pos = , self = , name = ,
+ class . struct = {
+ name = , kind = , obs = , pos = , color = ,
+ prereqset . struct = {
+ prereq . struct = {
+ starred = , name = , ang = ,
+ }
+ } ,
+ } ,
+ } ,
+ }
+\end{codestore}
+
+\tscode*[codeprefix={Curricula's Structure Definition:},basicstyle={\scriptsize\ttfamily}]{curriculadef}\label{curricula-def}
-Why is it included in the bundle? Well, it is needed, in part for completeness, by \tsobj[pkg]{ufrgscca-ppc}, which is “locally important”.
-\subsection{Commands Creating the many lists}
The following commands “describe” a curricula, whereas one is a sequence of semesters \tsobj[meta]{semID}, each semester is composed by a list of classes, \tsobj[meta]{classID}, and each class has a list of dependencies, \tsobj[meta]{classID} as \tsmacro{\depdef}{}. All those lists are stored as csv lists, so “processing them” can be systematized.
\begin{codedescribe}{\topicdef,\defaulttopic}
@@ -1252,83 +1449,66 @@ The following commands “describe” a curricula, whereas one is a sequence of
\end{codedescribe}
-\begin{codedescribe}{\semdef}
+\begin{codedescribe}[code,update=2023/11/18]{\classdef,\classset}
\begin{codesyntax}%
- \tsobj[code]{\semdef}{\tsobj[oarg]{pos}\tsobj[xarg]{cod}\tsobj[marg]{semID}}
+ \tsmacro{\classdef}[topicID]{classID,cred,name}
+ \tsmacro{\classset}{classID}
\end{codesyntax}
-This “defines” a semester, \tsobj[meta]{semID}, and associates with it a \tsobj[meta]{cod} (for reference) and a \tsobj[meta]{pos} (to be used by, for instance, \tsobj[pkg]{ufrgscca-curr-graph}.)
-\end{codedescribe}
+\tsmacro{\classdef}{} defines a class \tsobj[meta]{classID} (with a given \tsobj[marg]{name} and number of \tsobj[marg]{name}) associated with a given \tsobj[meta]{topicID}. \tsmacro{\classset}{} sets the current class.
+The following commands always refer to the “last defined” \tsmacro{\classdef}{} unless \tsmacro{\setclass}{} is used, which changes the “current class” for the following commands.
+\end{codedescribe}
-\begin{codedescribe}{\classdef,\setclass,\classremark}
+\begin{codedescribe}[code,new=2023/11/18]{\csummary,\classremark,\bibdef}
\begin{codesyntax}%
- \tsobj[code]{\classdef}{\tsobj[oarg]{topicID}\tsobj[xarg]{pos}\tsobj[marg]{classID}\tsobj[marg]{cred}\tsobj[marg]{typ}\tsobj[marg]{name}\tsobj[marg]{desc}}
- \tsmacro{\setclass}{classID}
+ \tsmacro{\csummary}{desc}
\tsmacro{\classremark}{remark}
+ \tsmacro{\bibdef}[type]{text}
\end{codesyntax}
-\tsmacro{\classdef}{} defines a class, associating with a \tsobj[meta]{topicID}, \tsobj[meta]{pos} (for \tsobj[pkg]{ufrgscca-curr-graph}), \tsobj[meta]{classID}, number and type, \tsobj[meta]{typ}, of credits, \tsobj[meta]{cred}, a long name, \tsobj[meta]{name} and description, \tsobj[meta]{desc}. \tsmacro{\classremark}{} adds an extra remark to it.
-
-The following commands always refer to the “last defined” \tsmacro{\classdef}{} unless \tsmacro{\setclass}{} is used, which changes the “current class” for the following commands.
+ \tsobj{\csummary} sets a class summary, whilst \tsobj{\classremark} annotates a 'note/remark'. \tsobj{\bibdef}
+ is used to set a list of bibliographies, one per issued command. The default \tsobj[meta]{type} value is \tsobj[key]{main}, other possible values \tsobj[key]{basic} and \tsobj[key]{compl}.
\end{codedescribe}
-\begin{codedescribe}{\depdef,\altdef}
- \begin{codesyntax}%
- \tsobj[code]{\depdef}{\tsobj[oarg]{topicID}\tsobj[xarg]{pos}\tsobj[marg]{classID}}
- \tsmacro{\altdef}{}
- \end{codesyntax}
-\tsmacro{\depdef}{} inserts/creates a “class dependency” list. The highlight color (if used) is usually defined by the current class topic (informing \tsobj[meta]{topicID} changes the highlight color). \tsobj[meta]{pos} is used by \tsobj[pkg]{ufrgscca-curr-graph} to determine the incident line angle.
-\tsmacro{\altdef}{} defines/start and alternate dependency list.
-\end{codedescribe}
-\begin{codedescribe}{\bibdef}
+\begin{codedescribe}[code,update=2023/11/18]{\currdef,\semdef}
\begin{codesyntax}%
- \tsmacro{\bibdef}[type]{text}
+ \tsmacro{\currdef}{curr-ID,short name,long name}
+ \tsmacro{\semdef}{semID,name,pos}
\end{codesyntax}
-This is used to set a list of bibliographies, one per issued command. The default \tsobj[meta]{type} value is just \emph{bib}, possible values (as understood by \tsobj[pkg]{ufrgscca-curr-tab}) are \emph{bib}, \emph{basic} and \emph{comp}.
+\tsobj{\currdef} creates a curricula (with a set of semesters defined as following).
+\tsobj{\semdef} creates a semester, \tsobj[meta]{semID}, \tsobj[meta]{pos} being a position 'hint' when creating a dependency graph (see below).
\end{codedescribe}
-\subsection{List Processing Commands}
-Those are the main loop commands that go through the lists.
-\begin{codedescribe}{\LstClass,\LstDep,\LstTopic}
- \begin{codesyntax}
- \tsmacro{\LstClass}[cmd]{semID}
- \tsobj[code]{\LstDep}{\tsobj[oarg]{cmd}\tsobj[xarg]{ang}\tsobj[marg]{classID}}
- \tsmacro{\LstTopic}[cmd]{topicID}
- \end{codesyntax}
-\tsobj[meta]{cmd} can be any command accepting a single argument. It will, in fact, be the one defining the way the data will, effectively, be presented.
-
-\tsmacro{\LstClass}{} will process \tsobj[meta]{cmd} over all classes associated with \tsobj[meta]{semID}.
-
-\tsmacro{\LstDep}{} will process \tsobj[meta]{cmd} over all dependency classes associated with \tsobj[meta]{classID}.
-\tsmacro{\LstTopic}{} will process \tsobj[meta]{cmd} over all classes associated with \tsobj[meta]{topicID}.
+\begin{codedescribe}[code,update=2023/11/18]{\depdef,\altdep}
+ \begin{codesyntax}%
+ \tsobj[code]{\depdef}\tsverb[oarg]{*}\tsargs[xarg]{pos}\tsargs[marg]{classID}
+ \tsmacro{\altdep}{}
+ \end{codesyntax}
+\tsmacro{\depdef}{} inserts/creates a “class dependency” list. \tsobj[meta]{pos} is used as a 'hint' for the incident (dependency) line angle. The starred version is meant to be used when the 'dependency' isn't another class but rather, for instance, a number of credits.
+\tsmacro{\altdep}{} defines/start and alternate dependency list.
\end{codedescribe}
-\section{\tightul{ufrgscca-curr-tab} Package (beta) (ex\-tend\-ed documentation)}
-This is truly a work in progress (based on some old ideas), not really tested. It shall be revised and, mostly sure, it will be changed (no compatibility guaranties). It always pre-load \tsobj[pkg]{ufrgscca-curr} and \tsobj[pkg]{longtable}.
-\subsection{Tabular Presentation Commands}
-\begin{codedescribe}{\TabEtp,\TabTopic}
+\begin{codedescribe}[code,update=2023/11/18]{\TabEtp,\TabTopic}
\begin{codesyntax}%
- \tsobj[code]{\TabEtp}{\tsobj[xarg]{type}\tsobj[oarg]{sectioning}c\tsobj[marg]{semID}}
- \tsmacro{\TabTopic}[type]{topicID}
+ \tsobj[code]{\TabEtp}\tsverb[oarg]{*}\tsargs[oarg]{sectioning}\tsargs[marg]{semID}\tsargs[oarg]{font-fmt}
+ \tsmacro{\TabTopic}{topicID}
\end{codesyntax}
-\tsmacro{\TabEtp}{} will construct a longtable with all classes associated with \tsobj[meta]{semID} (including it's dependencies and bibliography).
+\tsmacro{\TabEtp}{} will construct a longtable with all classes associated with \tsobj[meta]{semID}. The default 'font size', \tsobj[oarg]{font-fmt}, is \tsobj{\footnotesize}.
+The default \tsobj[oarg]{sectioning} is \tsobj{\notoc\section}.
+The non-star version includes the bibliography lists as well.
-\tsmacro{\TabTopic}{} will construct a longtable with all classes associated with \tsobj[meta]{topicID}.
+\tsmacro{\TabTopic}{} will construct a longtable with all classes associated with a \tsobj[meta]{topicID}.
\end{codedescribe}
-\section{\tightul{ufrgscca-curr-graph} Package (beta) (extended documentation)}
-
-\subsection{Graph Presentation Command}
-Ironically, this is the “oldest” of the \tsobj[pkg]{-curr-} packages, but it is the less tested one, and the one whose code is more prone to fail in unexpected ways, be advised: do not try to use it, unless you know the internal code well. It always pre-load \tsobj[pkg]{ufrgscca-curr} (N.B. it also depends on \tsobj[pkg]{tikz}).
-\begin{codedescribe}{\GraphSem}
+\begin{codedescribe}[code,update=2023/11/18]{\GraphEtp}
\begin{codesyntax}%
- \tsmacro{\GraphSem}[type]{semID}
+ \tsmacro{\GraphEtp}{semID}
\end{codesyntax}
It will create a dependency graph for a given \tsobj[meta]{semId}. N.B. to start with, it is highly dependent on the semester sequence, one shall start with first semester and go from there.
\end{codedescribe}
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-abnt.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-abnt.sty
index 5077416b1a..eba4667270 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 1.12 (2023/09/23)
+%% This is version {2.0} {2023/11/23}
%%
%% The list of files that compose this work can be found in the README.md file at
%% https://ctan.org/pkg/ufrgscca
@@ -23,73 +23,127 @@
%% CCA stands for "Control and Automation Engineering Course" (Portuguese acronym)
%%%==============================================================================
\NeedsTeXFormat{LaTeX2e}[2022/06/01]
-\def\tc@tmp@packname{ufrgscca-abnt}
-\def\tc@tmp@altpackname{ufrgsccaabnt}
-\def\tc@tmp@packdesc{UFRGS/CCA ABNT layout}
-\def\tc@tmp@packdate{2023/09/23}
-\def\tc@tmp@packversion{1.12}
-\let\@exp\expandafter
-\@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion}
-\@exp\@exp\@exp\ProvidesPackage\@exp\@exp\@exp{\@exp\tc@tmp@packname\@exp}\@exp[\tc@tmp@packdate\space v\tc@tmp@packversion\space\tc@tmp@packdesc]
-
-\def\tc@tocdepth{3} % Table of Contents depth
-\def\tc@secdepth{4} % Sectioning numbers depth (3 -> subsubsection)
-
-\DeclareKeys[ufrgscca-abnt]{
- strict-abnt.usage = load,
- strict-abnt.if = tcif@strictabnt,
-
- pretextontoc.usage = load,
- pretextontoc.if = tcif@pretextontoc,
-
- yearsonly.usage = load,
- yearsonly.if = tcif@yearsonly,
-
-
- chapternopagenum.usage = load,
- chapternopagenum.if = tcif@chapternopagenum,
-
- english.usage = load,
- english.if = tcif@english,
- relnum.usage = load,
- relnum.if = tcif@relnum,
- repeatfields.usage = load,
- repeatfields.if = tcif@repeatfields,
-
- showframes.usage = load,
- showframes.if = tcif@showframes,
- showlabels.usage = load,
- showlabels.if = tcif@showlabels,
-
- tocdepth.usage = load,
- tocdepth.store = \tc@tocdepth,
- secdepth.usage = load,
- secdepth.store = \tc@secdepth,
-
- nomicrotype.usage = load,
- nomicrotype.if = tcif@nomicrotype,
-
- article.usage = load,
- article.if = tcif@article,
-}
-\ProcessKeyOptions[ufrgscca-abnt]\relax
+
+\ProvidesExplPackage
+ {ufrgscca-abnt}
+ {2023/11/23}
+ {2.0}
+ {UFRGS/CCA ABNT layout}
+
+
+%%%%%%%
+%%%
+%%% Just an attempt of having my packages info in a regular way
+%%% Idea being: { <pck-name> / pkg info } for each and all.
+%%%
+%%%%%%%
+\keys_define:nn { ufrgscca-abnt / pkg info}
+ {
+ name .code:n = {ufrgscca-abnt} ,
+ prefix .code:n = {ufrgscca} ,
+ date .code:n = {2023/11/23},
+ version .code:n = {2.0} ,
+ description .code:n = {UFRGS/CCA~ abnt~layout}
+ }
+\cs_if_exist:NF \__codedesc_pkg_info:nn
+ {
+ \cs_new_protected:Npn \__codedesc_pkg_info:nn #1#2
+ { \keys_set:nn {#1 / pkg info}{#2} }
+ }
+\cs_if_exist:NF \PkgInfo
+ { \NewDocumentCommand \PkgInfo {mm} { \keys_set:nn {#1 / pkg info}{#2} } }
+\cs_if_exist:NF \PkgDescription
+ {
+ \NewDocumentCommand \PkgDescription {m}
+ {
+ \noindent Package~ \textbf{\PkgInfo{#1}{name}}~Version:~\PkgInfo{#1}{version}~ -~ \PkgInfo{#1}{date}\par \emph{\PkgInfo{#1}{description}}~\par
+ }
+ }
+%%%%%%%
+%%% End of cut-n-paste
+%%%%%%%
+
+
+
+\keys_define:nn { ufrgscca.abnt }
+ {
+ strict-abnt .usage:n = load ,
+ strict-abnt .bool_set:N = \l__ufrgscca_strictabnt_bool ,
+
+ pretextontoc .usage:n = load ,
+ pretextontoc .bool_set:N = \l__ufrgscca_pretextontoc_bool ,
+
+ yearsonly .usage:n = load ,
+ yearsonly .bool_set:N = \l__ufrgscca_yearsonly_bool ,
+
+ chapternopagenum .usage:n = load ,
+ chapternopagenum .bool_set:N = \l__ufrgscca_chapternopagenum_bool ,
+
+% english .usage:n = load ,
+% english .bool_set:N = \l__ufrgscca_english_bool ,
+
+ relnum .usage:n = load ,
+ relnum .bool_set:N = \l__ufrgscca_relnum_bool ,
+
+ repeatfields .usage:n = load ,
+ repeatfields .bool_set:N = \l__ufrgscca_repeatfields_bool ,
+
+ showframes .usage:n = load ,
+ showframes .bool_set:N = \l__ufrgscca_showframes_bool ,
+
+ showlabels .usage:n = load ,
+ showlabels .bool_set:N = \l__ufrgscca_showlabels_bool ,
+
+ tocdepth .usage:n = load ,
+ tocdepth .tl_set:N = \l__ufrgscca_tocdepth_tl ,
+
+ secdepth .usage:n = load ,
+ secdepth .tl_set:N = \l__ufrgscca_secdepth_tl ,
+
+ nomicrotype .usage:n = load ,
+ nomicrotype .bool_set:N = \l__ufrgscca_nomicrotype_bool ,
+
+ article .usage:n = load ,
+ article .bool_set:N = \l__ufrgscca_article_bool ,
+ }
+
+\tl_set:Nn \l__ufrgscca_tocdepth_tl {3}
+\tl_set:Nn \l__ufrgscca_secdepth_tl {4}
+
+\ProcessKeyOptions[ufrgscca.abnt]\relax
+
+
+
%%%%%%%%%%%%%%%%%%%%%
%%% Packages Loading
%%%%%%%%%%%%%%%%%%%%%
-\RequirePackage[english,brazilian]{babel}% see ufrgscca.cls in case of newtx* being loaded!
+\bool_if:NTF \l__ufrgscca_english_bool
+ {
+ \RequirePackage[brazilian,english]{babel}% see ufrgscca.cls in case of newtx* being loaded!
+ %\addto\extraenglish{\input{ufrgscca-base-en.def}}
+ \AtBeginDocument{\selectlanguage{english}\input{ufrgscca-base-en.def}}%
+ }
+ {
+ \RequirePackage[english,brazilian]{babel}% see ufrgscca.cls in case of newtx* being loaded!
+ %\addto\extrabrazilian{\input{ufrgscca-base-ptBR.def}}
+ \AtBeginDocument{\selectlanguage{brazilian}\input{ufrgscca-base-ptBR.def}}%
+ }
+
+
\RequirePackage{csquotes}%
-\iftcif@strictabnt
- \RequirePackage[a4paper,inner=2cm,outer=3cm,top=3cm,bottom=2cm,twoside]{geometry}
-\else
- \iftcif@nogeometry
-% \RequirePackage[a4paper,margin=5cm,right=2cm,marginparwidth=3.75cm,asymmetric,top=2.5cm,bottom=1.5cm]{geometry}
- \else
- \RequirePackage[a4paper,inner=2.5cm,outer=2.5cm,top=3cm,bottom=2cm,twoside]{geometry}
- \fi
-\fi
+\bool_if:NTF \l__ufrgscca_strictabnt_bool
+ {
+ \RequirePackage[a4paper,inner=2cm,outer=3cm,top=3cm,bottom=2cm,twoside]{geometry}
+ }
+ {
+ \bool_if:NF \l__ufrgscca_nogeometry_bool
+ {
+ \RequirePackage[a4paper,inner=2.5cm,outer=2.5cm,top=3cm,bottom=2cm,twoside]{geometry}
+ }
+ }
\RequirePackage[toc,page,title]{appendix}
\RequirePackage[pagestyles,clearempty]{titlesec}
@@ -98,9 +152,16 @@
\RequirePackage{chngcntr}
-\def\tc@captionwidth{0.75\textwidth}
-\def\tc@notewidth{0.635\textwidth} %% 0.84666667\tc@captionwidth
-\RequirePackage[position=above,font=small,labelfont=bf,textfont=md,textfont+=sl,width=\tc@captionwidth]{caption}%
+
+%
+% using Expl3
+\SetConsts{%
+ caption.width = 0.75\textwidth ,
+ note.width = 0.635\textwidth ,
+}
+
+\RequirePackage[position=above,font=small,labelfont=bf,textfont=md,textfont+=sl,width=\UseConst{caption.width}]{caption}%
+
%%%
%%% commands for 'floats'
%%%
@@ -108,7 +169,19 @@
\NewDocumentCommand{\sourcecitation}{m}{{\small{\sourcename\ #1}}}%
%
\newlength{\noteindent}%%auxiliary length
-\NewDocumentCommand{\note}{O{}+m}{{\footnotesize\settowidth{\noteindent}{\notename#1:}\addtolength{\noteindent}{3pt}\begin{center}\begin{minipage}{\tc@notewidth}{\parindent=-\the\noteindent\notename#1:\hspace{2.9pt}#2}\end{minipage}\end{center}}}%%
+\NewDocumentCommand{\note}{O{}+m}
+ {
+ {
+ \footnotesize
+ \settowidth{\noteindent}{\notename#1:}
+ \addtolength{\noteindent}{3pt}
+ \begin{center}
+ \begin{minipage}{\UseConst{note.width}}
+ { \parindent=-\the\noteindent\notename#1:\hspace{2.9pt}#2 }
+ \end{minipage}
+ \end{center}
+ }
+ }%%
%
%
@@ -133,32 +206,32 @@
%%%%%%%%%%%%%%%%%%%%%
\WarningFilter{biblatex}{File 'brazilian-abnt-abnt.lbx'}%
\WarningFilter{biblatex}{Conflicting options}%
-\iftcif@repeatfields%
- \RequirePackage[backend=biber,style=abnt,pretty,giveninits,extrayear,repeatfields]{biblatex}%
-\else%
- \RequirePackage[backend=biber,style=abnt,pretty,giveninits,extrayear]{biblatex}%
-\fi%
+
+\bool_if:NTF \l__ufrgscca_repeatfields_bool
+ {
+ \RequirePackage[backend=biber,style=abnt,pretty,giveninits,extrayear,repeatfields]{biblatex}%
+ }
+ {
+ \RequirePackage[backend=biber,style=abnt,pretty,giveninits,extrayear]{biblatex}%
+ }
+
+
%%
-%%%
-%%% Language selection {package babel}
-%%%
-\iftcif@english%%
- \selectlanguage{english}%
- \AtBeginDocument{\selectlanguage{english}}%
-\else
- \selectlanguage{brazilian}%
- \AtBeginDocument{\selectlanguage{brazilian}}%
-\fi%
+
%%%
%%% typeset adjusting {package microtype}
%%%
-\iftcif@timesroman\else%
-\iftcif@nomicrotype\else\RequirePackage[tracking,kerning,spacing,babel]{microtype}\fi%
-\fi
-%\iftcif@nomicrotype\else\RequirePackage[babel]{microtype}\fi%
-%
+\bool_if:NF \l__ufrgscca_timesroman_bool
+ {
+ \bool_if:NF \l__ufrgscca_nomicrotype_bool
+ {
+ \RequirePackage[tracking,kerning,spacing,babel]{microtype}
+ }
+ }
+
+
% pdftex native protruding
%
\pdfprotrudechars=2
@@ -171,51 +244,71 @@
\RequirePackage{soul}
-\iftcif@showframes%
- \RequirePackage{showframe}%%
-\fi
-%%
-\iftcif@showlabels%
- \RequirePackage{showlabels}%%
- \showlabels{cite}%%
- \showlabels{textcite}%%
- \RenewDocumentCommand{\showlabelfont}{}{\tiny\ttfamily\color{blue}}%%
-\fi%%
+\bool_if:NT \l__ufrgscca_showframes_bool
+ {
+ \RequirePackage{showframe}
+ }
+\bool_if:NT \l__ufrgscca_showlabels_bool
+ {
+ \RequirePackage{showlabels}
+ \showlabels{cite}
+ \showlabels{textcite}
+ \RenewDocumentCommand{\showlabelfont}{}{\tiny\ttfamily\color{blue}}
+ }
+
+
%%%
%%% ToC and Headings format. {package titlesec/titletoc/titleps}
%%%
-\setcounter{tocdepth}{\tc@tocdepth} % Table of Contents depth
-\setcounter{secnumdepth}{\tc@secdepth} % Sectioning numbers depth (3 -> subsubsection)
-
-\NewDocumentEnvironment{tocless}{}%
- {\setcounter{secnumdepth}{-1}\addtocontents{toc}{\protect\setcounter{tocdepth}{-1}\ignorespaces}}%
- {\setcounter{secnumdepth}{\tc@secdepth}\addtocontents{toc}{\protect\setcounter{tocdepth}{\tc@tocdepth}\ignorespaces}}%
+\setcounter{tocdepth}{\l__ufrgscca_tocdepth_tl} % Table of Contents depth
+\setcounter{secnumdepth}{\l__ufrgscca_secdepth_tl} % Sectioning numbers depth (3 -> subsubsection)
+
+\NewDocumentEnvironment{tocless}{}
+ {
+ \setcounter{secnumdepth}{-1}
+ \addtocontents{toc}{\protect\setcounter{tocdepth}{-1}\ignorespaces}
+ }
+ {
+ \setcounter{secnumdepth}{\l__ufrgscca_secdepth_tl}
+ \addtocontents{toc}{\protect\setcounter{tocdepth}{\l__ufrgscca_tocdepth_tl}\ignorespaces}
+ }
+
\def\notoc#1#2{\begin{tocless}#1{#2}\end{tocless}}
-\NewDocumentEnvironment{numberless}{}{\setcounter{secnumdepth}{-1}}{\setcounter{secnumdepth}{\tc@secdepth}}
+
+\NewDocumentEnvironment{numberless}{}
+ {
+ \setcounter{secnumdepth}{-1}
+ }
+ {
+ \setcounter{secnumdepth}{\l__ufrgscca_secdepth_tl}
+ }
+
\def\nonum#1#2{\begin{numberless}#1{#2}\end{numberless}}
+
+
%%%
%%% Relative/Absolute numbering... argh !!!
%%%
- \def\tc@chapterspc{\vspace{2.5mm}}
- \def\tc@sectionspc{\vspace{0.75mm}}
-\iftcif@article
-\else
-\iftcif@relnum%
-% \def\tc@chapterspc{\vspace{2.5mm}}
-% \def\tc@sectionspc{\vspace{0.75mm}}
-\else%
-% \def\tc@chapterspc{}
-% \def\tc@sectionspc{}
- \patchcmd{\@chapter}{\addtocontents{lof}{\protect\addvspace{10\p@}}}{}{}{{PATCH FAILED}}% LoF ... to supress extra space (figures of diverse chapters)
- \patchcmd{\@chapter}{\addtocontents{lot}{\protect\addvspace{10\p@}}}{}{}{{PATCH FAILED}}% LoT
-\fi
-\fi
+ \def\l__ufrgscca_chapter_spacing_tl{\vspace{2.5mm}}
+ \def\l__ufrgscca_section_spacing_tl{\vspace{0.75mm}}
+
+
+\makeatletter
+\bool_if:NF \l__ufrgscca_article_bool
+ {
+ \bool_if:NF \l__ufrgscca_relnum_bool
+ {
+ \patchcmd{\@chapter}{\addtocontents{lof}{\protect\addvspace{10\p@}}}{}{}{{PATCH ~FAILED}}% LoF ... to supress extra space (figures of diverse chapters)
+ \patchcmd{\@chapter}{\addtocontents{lot}{\protect\addvspace{10\p@}}}{}{}{{PATCH ~FAILED}}% LoT
+ }
+ }
+
%%%
@@ -224,120 +317,277 @@
\def\tc@lblmargin{22mm}
\contentsmargin{2.2em}
\def\tc@dotspacing{0.5pc}
-\titlecontents{chapter}[\tc@lblmargin]{\tc@chapterspc\normalfont\scshape\selectfont}{\contentslabel{\tc@lblmargin}}{\hspace{-\tc@lblmargin}}{\titlerule*[\tc@dotspacing]{.}\normalsize\normalfont\contentspage}
-\titlecontents{section}[\tc@lblmargin]{\tc@sectionspc}{\contentslabel{\tc@lblmargin}}{\hspace{-\tc@lblmargin}}{\titlerule*[\tc@dotspacing]{.}\contentspage}
-\dottedcontents{subsection}[\tc@lblmargin]{}{\tc@lblmargin}{\tc@dotspacing}
+%%%\def\tc@lblmargin{22mm}
+%%%\contentsmargin{2.2em}
+%%%\def\tc@dotspacing{0.5pc}
+
+
+\titlecontents{chapter}[\tc@lblmargin]
+ {\l__ufrgscca_chapter_spacing_tl\normalfont\scshape\selectfont}
+ {\contentslabel{\tc@lblmargin}}
+ {\hspace{-\tc@lblmargin}}
+ {\titlerule*[\tc@dotspacing]{.}\normalsize\normalfont\contentspage}
+
+\titlecontents{section}[\tc@lblmargin]
+ {\l__ufrgscca_section_spacing_tl}
+ {\contentslabel{\tc@lblmargin}}
+ {\hspace{-\tc@lblmargin}}
+ {\titlerule*[\tc@dotspacing]{.}\contentspage}
+
+\dottedcontents{subsection}[\tc@lblmargin]
+ {}
+ {\tc@lblmargin}
+ {\tc@dotspacing}
+
+\dottedcontents{subsubsection}[\tc@lblmargin]
+ {}
+ {\tc@lblmargin}
+ {\tc@dotspacing}
+
+\dottedcontents{figure}[\tc@lblmargin]
+ {}
+ {\tc@lblmargin}
+ {\tc@dotspacing}
+
+\dottedcontents{table}[\tc@lblmargin]
+ {}
+ {\tc@lblmargin}
+ {\tc@dotspacing}
+
+
-\dottedcontents{subsubsection}[\tc@lblmargin]{}{\tc@lblmargin}{\tc@dotspacing}
-\dottedcontents{figure}[\tc@lblmargin]{}{\tc@lblmargin}{\tc@dotspacing}
-\dottedcontents{table}[\tc@lblmargin]{}{\tc@lblmargin}{\tc@dotspacing}
\renewcommand{\restoreapp}{} % to reset appendix counters each time (from appendix doc)
-\RenewDocumentEnvironment{appendix}{O{\defappendixpagename}O{\defappendixname}}{%
- \titleformat{\chapter}{\bfseries\Large\sffamily}{#2 \thechapter\hspace{1.5ex}-}{2ex}{\MakeUppercase}%
- \titlecontents{chapter}[\tc@lblmargin]{\vspace{3mm}\sc}{\hspace{-\tc@lblmargin}{#2~\thecontentslabel\ -\enspace}}{\hspace{-\tc@lblmargin}}{\titlerule*[\tc@dotspacing]{.}\normalsize\normalfont\contentspage}
- \def\appendixname{#2}%
- \def\appendixpagename{#1}%
- \def\appendixtocname{#1}%
+\RenewDocumentEnvironment{appendix}{O{\defappendixpagename}O{\defappendixname}}
+ {
+ \titleformat{\chapter}
+ {\bfseries\Large\sffamily}
+ {#2~ \thechapter\hspace{1.5ex}-}
+ {2ex}
+ {\MakeUppercase}%
+ \titlecontents{chapter}[\tc@lblmargin]
+ {\vspace{3mm}\sc}
+ {\hspace{-\tc@lblmargin}{#2\ ~\thecontentslabel\ ~ -\enspace}}
+ {\hspace{-\tc@lblmargin}}
+ {\titlerule*[\tc@dotspacing]{.}\normalsize\normalfont\contentspage}
+ \def\appendixname{#2}%
+ \def\appendixpagename{#1}%
+ \def\appendixtocname{#1}%
\begin{appendices}%
- \let\tc@appendixautorefname@tmp\appendixautorefname
- \def\appendixautorefname{#2}
- }%
- {\let\appendixautorefname\tc@appendixautorefname@tmp\end{appendices}}
-
-\NewDocumentEnvironment{annex}{O{\defannexpagename}O{\defannexname}}{\begin{appendix}[#1][#2]}{\end{appendix}}
+ \let\tc@appendixautorefname@tmp\appendixautorefname
+ \def\appendixautorefname{#2}
+ }
+ {
+ \let\appendixautorefname\tc@appendixautorefname@tmp
+ \end{appendices}
+ }
-%%%
-%%% Headings definitions {package titlesec}
-%%%
-%\RenewDocumentCommand{\thechapter}{}{\arabic{chapter}}
-\titleformat{\chapter}{\sffamily\bfseries\selectfont\Large}{\thechapter}{2ex}{\MakeUppercase}
-\titleformat{name=\chapter,numberless}{\sffamily\bfseries\selectfont\Large\center}{}{0pt}{\MakeUppercase}
-\titlespacing{\chapter}{0pt}{\tc@chapbefore}{\tc@chapafter}
+\NewDocumentEnvironment{annex}{O{\defannexpagename}O{\defannexname}}
+ {\begin{appendix}[#1][#2]}
+ {\end{appendix}}
-%\def\tc@chapbefore{18pt plus 3pt minus 6pt}
-%\def\tc@chapafter{9pt plus 3pt minus 3pt}
-%\def\tc@secbefore{12pt plus 6pt minus 3pt}
-%\def\tc@secafter{6pt plus 2pt minus 2pt}
-\def\tc@chapbefore{70pt plus 12pt minus 8pt}
-\def\tc@chapafter{36pt plus 8pt minus 8pt}
-\def\tc@secbefore{27pt plus 6pt minus 6pt}
-\def\tc@secafter{18pt plus 4pt minus 4pt}
+\makeatother
-\titleformat{\section}[hang]{\normalfont\scshape\selectfont\large}{\thesection}{.5em}{}
-\titlespacing{\section}{0pt}{\tc@secbefore}{\tc@secafter}
-\titleformat{name=\section,numberless}[hang]{\normalfont\large\bfseries\scshape\selectfont\center}{}{0pt}{}
-\titlespacing{name=\section,numberless}{0pt}{\tc@secbefore}{\tc@secafter}
-\titleformat{\subsection}[hang]{\normalfont\sffamily\bfseries\slshape\selectfont}{\thesubsection}{.5em}{}
-\titlespacing{\subsection}{0pt}{\tc@secbefore}{\tc@secafter}
+%%%
+%%% Headings definitions {package titlesec}
+%%%
+%%%%\def\tc@chapbefore{70pt plus 12pt minus 8pt}
+%%%%\def\tc@chapafter{36pt plus 8pt minus 8pt}
+%%%%\def\tc@secbefore{27pt plus 6pt minus 6pt}
+%%%%\def\tc@secafter{18pt plus 4pt minus 4pt}
-\titleformat{\subsubsection}[hang]{\normalfont\sffamily\slshape\selectfont}{\thesubsubsection}{.5em}{}
-\titlespacing{\subsubsection}{0pt}{\tc@secbefore}{\tc@secafter}
+\def\l__ufrgscca_chapter_before_skip{70pt plus 12pt minus 8pt}
+\def\l__ufrgscca_chapter_after_skip{36pt plus 8pt minus 8pt}
+\def\l__ufrgscca_section_before_skip{27pt plus 6pt minus 6pt}
+\def\l__ufrgscca_section_after_skip{18pt plus 4pt minus 4pt}
-\titleformat{\paragraph}[hang]{\normalfont\sffamily\selectfont}{\theparagraph}{.5em}{\tightul}
-\titlespacing{\paragraph}{0pt}{\tc@secbefore}{\tc@secafter}
-\titleformat{\subparagraph}[hang]{\normalfont\sffamily\selectfont}{\thesubparagraph}{.5em}{\tightul}
-\titlespacing{\subparagraph}{0pt}{\tc@secbefore}{\tc@secafter}
+%\RenewDocumentCommand{\thechapter}{}{\arabic{chapter}}
+\titleformat{\chapter}
+ {\sffamily\bfseries\selectfont\Large}
+ {\thechapter}
+ {2ex}
+ {\MakeUppercase}
+
+\titleformat{name=\chapter,numberless}
+ {\sffamily\bfseries\selectfont\Large\center}
+ {}
+ {0pt}
+ {\MakeUppercase}
+
+\titlespacing{\chapter}
+ {0pt}
+ {\l__ufrgscca_chapter_before_skip}
+ {\l__ufrgscca_chapter_after_skip}
+
+%\def\l__ufrgscca_chapter_before_skip{18pt plus 3pt minus 6pt}
+%\def\l__ufrgscca_chapter_after_skip{9pt plus 3pt minus 3pt}
+%\def\l__ufrgscca_section_before_skip{12pt plus 6pt minus 3pt}
+%\def\l__ufrgscca_section_after_skip{6pt plus 2pt minus 2pt}
+
+
+\titleformat{\section}[hang]
+ {\normalfont\scshape\selectfont\large}
+ {\thesection}
+ {.5em}
+ {}
+
+\titlespacing{\section}
+ {0pt}
+ {\l__ufrgscca_section_before_skip}
+ {\l__ufrgscca_section_after_skip}
+
+\titleformat{name=\section,numberless}[hang]
+ {\normalfont\large\bfseries\scshape\selectfont\center}
+ {}
+ {0pt}
+ {}
+
+\titlespacing{name=\section,numberless}
+ {0pt}
+ {\l__ufrgscca_section_before_skip}
+ {\l__ufrgscca_section_after_skip}
+
+\titleformat{\subsection}[hang]
+ {\normalfont\sffamily\bfseries\slshape\selectfont}
+ {\thesubsection}
+ {.5em}
+ {}
+
+\titlespacing{\subsection}
+ {0pt}
+ {\l__ufrgscca_section_before_skip}
+ {\l__ufrgscca_section_after_skip}
+
+\titleformat{\subsubsection}[hang]
+ {\normalfont\sffamily\slshape\selectfont}
+ {\thesubsubsection}
+ {.5em}
+ {}
+
+\titlespacing{\subsubsection}
+ {0pt}
+ {\l__ufrgscca_section_before_skip}
+ {\l__ufrgscca_section_after_skip}
+
+\titleformat{\paragraph}[hang]
+ {\normalfont\sffamily\selectfont}
+ {\theparagraph}
+ {.5em}
+ {\tightul}
+
+\titlespacing{\paragraph}
+ {0pt}
+ {\l__ufrgscca_section_before_skip}
+ {\l__ufrgscca_section_after_skip}
+
+\titleformat{\subparagraph}[hang]
+ {\normalfont\sffamily\selectfont}
+ {\thesubparagraph}
+ {.5em}
+ {\tightul}
+
+\titlespacing{\subparagraph}
+ {0pt}
+ {\l__ufrgscca_section_before_skip}
+ {\l__ufrgscca_section_after_skip}
%%%
%%% Relative/Absolute counters... {package chngcntr}
%%%
-\iftcif@article
-\else
-\iftcif@relnum%
- \counterwithin{figure}{chapter}%
- \counterwithin{table}{chapter}%
- \counterwithin{equation}{chapter}%
-\else%
- \counterwithout{figure}{chapter}%
- \counterwithout{table}{chapter}%
- \counterwithout{equation}{chapter}%
- %\meaning\@chapter
- %\patchcmd{\@chapter}{\addtocontents{lof}{\protect\addvspace{10\p@}}}{}{}{{PATCH FAILED}}% LoF
- %\patchcmd{\@chapter}{\addtocontents{lot}{\protect\addvspace{10\p@}}}{}{}{{PATCH FAILED}}% LoT
-\fi
-\fi
+\bool_if:NF \l__ufrgscca_article_bool
+ {
+ \bool_if:NTF \l__ufrgscca_relnum_bool
+ {
+ \counterwithin{figure}{chapter}
+ \counterwithin{table}{chapter}
+ \counterwithin{equation}{chapter}
+ }
+ {
+ \counterwithout{figure}{chapter}
+ \counterwithout{table}{chapter}
+ \counterwithout{equation}{chapter}
+ }
+ }
+
+
+
%%%
%%% Page Heading format {titlesec/titleps}
%%%
-\renewpagestyle{plain}{\sethead[\ifthechapter{\sffamily\thepage}{}][][]{}{}{\ifthechapter{\sffamily\thepage}{}}}
-\newpagestyle{main}{\sethead[\ifthechapter{\sffamily\thepage}{}][][]{}{}{\ifthechapter{\sffamily\thepage}{}}}
-\newpagestyle{bibliography}{\sethead[\sffamily\thepage][][]{}{}{\sffamily\thepage}}
+\renewpagestyle{plain}
+ {
+ \sethead[\ifthechapter{\sffamily\thepage}{}] [] []
+ {}
+ {}
+ {
+ \ifthechapter{\sffamily\thepage}
+ {}
+ }
+ }
+
+\newpagestyle{main}
+ {
+ \sethead[\ifthechapter{\sffamily\thepage}{}] [] []
+ {}
+ {}
+ {
+ \ifthechapter{\sffamily\thepage}
+ {}
+ }
+ }
+
+\newpagestyle{bibliography}
+ {
+ \sethead[\sffamily\thepage] [] []
+ {}
+ {}
+ {
+ \sffamily\thepage
+ }
+ }
+
\pagestyle{main}
-\iftcif@chapternopagenum\renewpagestyle{plain}{\sethead[][][]{}{}{}}\fi
-\let\tc@temp@printbibliography\printbibliography
+\bool_if:NF \l__ufrgscca_chapternopagenum_bool
+ {
+ \renewpagestyle{plain}{\sethead[][][]{}{}{}}
+ }
+
+%%\iftcif@chapternopagenum\renewpagestyle{plain}{\sethead[][][]{}{}{}}\fi
+
+%% ????
+%\let\tc@temp@printbibliography\printbibliography
\defbibheading{bibliography}[\refname]{\nonum\chapter{#1}\pagestyle{bibliography}}
-\iftcif@pretextontoc
- \let\tc@temp@listoffigures\listoffigures
- \def\listoffigures{\tc@temp@listoffigures\addcontentsline{toc}{chapter}{\textsc\listfigurename}}
-%%
- \let\tc@temp@listoftables\listoftables
- \def\listoftables{\tc@temp@listoftables\addcontentsline{toc}{chapter}{\textsc\listtablename}}
-\fi
-%%
+\bool_if:NT \l__ufrgscca_pretextontoc_bool
+ {
+ \gappto{\listoffigures}{\addcontentsline{toc}{chapter}{\textsc\listfigurename}}
+ \gappto{\listoftables}{\addcontentsline{toc}{chapter}{\textsc\listtablename}}
+ }
-\newlength{\tc@lblwidth}
+
+\newlength{\l__ufrgscca_label_width_dim}
\NewDocumentCommand{\NewChapListEnv}{mm}{
\NewDocumentEnvironment{#1}{O{}m}{%
- \settowidth{\tc@lblwidth}{##2***}%
- \iftcif@pretextontoc
- \nonum\chapter{\textsc{#2}}%
- \else
- \notoc\chapter{\textsc{#2}}%
- \fi
- \begin{description}[tcc,noindent,leftmargin=\tc@lblwidth,labelwidth=!,##1]%
+ \settowidth{\l__ufrgscca_label_width_dim}{##2***}%
+ \bool_if:NTF \l__ufrgscca_pretextontoc_bool
+ {
+ \nonum\chapter{\textsc{#2}}
+ }
+ {
+ \notoc\chapter{\textsc{#2}}
+ }
+ \begin{description}[tcc,noindent,leftmargin=\l__ufrgscca_label_width_dim,labelwidth=!,##1]%
}{\end{description}}
}
@@ -349,25 +599,32 @@
%%% lists formating {package enumitem}
%%%
-\def\tc@enumbase{6mm}
-\def\tc@enummarging{12mm}
-\def\tc@enummargingB{18mm}
-\def\tc@enumlabelsep{2.5mm}
-\setlength{\parindent}{\tc@enummarging}
+
+\def\l__ufrgscca_enum_base_dim{6mm}
+\def\l__ufrgscca_enum_margin_dim{12mm}
+\def\l__ufrgscca_enum_margin_dimB{18mm}
+\def\l__ufrgscca_enum_label_sep_dim{2.5mm}
+\setlength{\parindent}{\l__ufrgscca_enum_margin_dim}
\SetEnumitemValue{label}{arabic}{\arabic*.}
\SetEnumitemValue{label}{roman}{\roman*.}
\SetEnumitemValue{label}{alpha}{\alph*.}
\SetEnumitemValue{label}{bullet}{\hfill\textopenbullet}
-\SetEnumitemKey{ppc}{leftmargin=\tc@enummarging,labelindent=\tc@enumbase,labelsep=\tc@enumlabelsep,labelwidth=!,style=nextline}
-\SetEnumitemKey{tcc}{leftmargin=\tc@enummarging,labelindent=\tc@enumbase,labelsep=\tc@enumlabelsep,labelwidth=!,style=nextline}
+\SetEnumitemKey{ppc}
+ {leftmargin=\l__ufrgscca_enum_margin_dim,labelindent=\l__ufrgscca_enum_base_dim,labelsep=\l__ufrgscca_enum_label_sep_dim,labelwidth=!,style=nextline}
+\SetEnumitemKey{tcc}
+ {leftmargin=\l__ufrgscca_enum_margin_dim,labelindent=\l__ufrgscca_enum_base_dim,labelsep=\l__ufrgscca_enum_label_sep_dim,labelwidth=!,style=nextline}
%
-\SetEnumitemKey{parindent}{leftmargin=\tc@enummargingB,labelindent=\tc@enummarging,labelwidth=!}
-\SetEnumitemKey{noindent}{labelindent=0pt,labelwidth=!}
-\SetEnumitemKey{tight}{leftmargin=0pt,listparindent=5mm,labelwidth=5mm}
+\SetEnumitemKey{parindent}
+ {leftmargin=\l__ufrgscca_enum_margin_dimB,labelindent=\l__ufrgscca_enum_margin_dim,labelwidth=!}
+\SetEnumitemKey{noindent}
+ {labelindent=0pt,labelwidth=!}
+\SetEnumitemKey{tight}
+ {leftmargin=0pt,listparindent=5mm,labelwidth=5mm}
%
-\SetEnumitemKey{miditemsep}{parsep=0ex,itemsep=0.4ex}
+\SetEnumitemKey{miditemsep}
+ {parsep=0ex,itemsep=0.4ex}
%\SetEnumitemKey{ppctight}{leftmargin=0pt,listparindent=5mm,labelwidth=5mm}
@@ -414,98 +671,157 @@
%%%
%%% keyword command definition (for abstract)
%%%
-\newcounter{tc@kwcounter}%
-\NewDocumentCommand{\keyword}{m}{%%
- \stepcounter{tc@kwcounter}%%
- \expandafter\gdef\csname keyw\alph{tc@kwcounter}\endcsname{#1}%%
-}%
-\NewDocumentCommand{\tcabnt@abstractkw}{}{%%
- \@ifundefined{keywa}{}{\expandafter\MakeUppercase\keywa}%%
- \@ifundefined{keywb}{}{, \keywb}%%
- \@ifundefined{keywc}{}{, \keywc}%%
- \@ifundefined{keywd}{}{, \keywd}%
- \@ifundefined{keywe}{}{, \keywe}%
- \@ifundefined{keywf}{}{, \keywf}%
- \@ifundefined{keywg}{}{, \keywg}%
- \@ifundefined{keywh}{}{, \keywh}%
- \@ifundefined{keywi}{}{, \keywi}%
- \@ifundefined{keywj}{}{, \keywj}%
-}%
-\let\tc@org@abstract\abstract
-\let\tc@org@endabstract\endabstract
+\seq_new:N \l__ufrgscca_keywords_seq
+\seq_new:N \l__ufrgscca_other_keywords_seq
+\seq_new:N \l__ufrgscca_keywords_tmpa_seq
+\seq_new:N \l__ufrgscca_keywords_tmpb_seq
+
+\NewDocumentCommand{\mainkeywords}{m}
+ {
+ \seq_set_from_clist:Nn \l__ufrgscca_keywords_tmpa_seq {#1}
+ \seq_set_eq:NN \l__ufrgscca_keywords_tmpb_seq \l__ufrgscca_keywords_seq
+ \seq_gconcat:NNN \l__ufrgscca_keywords_seq \l__ufrgscca_keywords_tmpb_seq \l__ufrgscca_keywords_tmpa_seq
+ }
+\let\keyword\mainkeywords
+
+\NewDocumentCommand{\lstkeywords}{O{,~ }}
+ {
+ \seq_sort:Nn \l__ufrgscca_keywords_seq
+ {
+ \str_compare:nNnTF { ##1 } > { ##2 }
+ { \sort_return_swapped: }
+ { \sort_return_same: }
+ }
+ \seq_use:Nn \l__ufrgscca_keywords_seq {#1}
+ }
+
+\NewDocumentCommand{\otherkeywords}{m}
+ {
+ \seq_set_from_clist:Nn \l__ufrgscca_keywords_tmpa_seq {#1}
+ \seq_set_eq:NN \l__ufrgscca_keywords_tmpb_seq \l__ufrgscca_other_keywords_seq
+ \seq_gconcat:NNN \l__ufrgscca_other_keywords_seq \l__ufrgscca_keywords_tmpb_seq \l__ufrgscca_keywords_tmpa_seq
+ }
+
+\NewDocumentCommand{\lstotherkeywords}{O{,~ }}
+ {
+ \seq_sort:Nn \l__ufrgscca_other_keywords_seq
+ {
+ \str_compare:nNnTF { ##1 } > { ##2 }
+ { \sort_return_swapped: }
+ { \sort_return_same: }
+ }
+ \seq_use:Nn \l__ufrgscca_other_keywords_seq {#1}
+ }
+
+
+\bool_if:NTF \l__ufrgscca_oldrenews_bool
+ {
+ \RenewDocumentEnvironment{abstract}{}
+ {
+ \notoc\chapter{\abstractname}
+ }
+ {
+ \par\vspace{2ex}
+ \noindent\textbf{\keywordsname :\ ~} \lstkeywords
+ }
+ }
+ {
+ \NewDocumentEnvironment{mainabstract}{}
+ {
+ \notoc\chapter{\abstractname}
+ }
+ {
+ \par\vspace{2ex}
+ \noindent\textbf{\keywordsname :\ ~} \lstkeywords
+ }
+ }
+
+\NewDocumentEnvironment{otherabstract}{O{english}}
+ {
+ \begin{otherlanguage}{#1}
+ \notoc\chapter{\abstractname}
+ }
+ {
+ \par\vspace{2ex}
+ \noindent\textbf{\keywordsname :\ ~} \lstotherkeywords
+ \end{otherlanguage}%
+ }
-\RenewDocumentEnvironment{abstract}{}{%%
- \notoc\chapter{\abstractname}%
-}{%%
- \par\vspace{2ex} %\vfill%
- \noindent\textbf{\keywordsname:} \tcabnt@abstractkw.%
-}%
-\NewDocumentEnvironment{otherabstract}{O{english}m}{%%
- \gdef\tc@otherkeywords{#2}%%
- \begin{otherlanguage}{#1}%
- \notoc\chapter{\abstractname}%
-}{%
- \par\vspace{2ex} %\vfill%
- \noindent\textbf{\keywordsname:} \tc@otherkeywords.%
- \end{otherlanguage}%
-}%
+%%
+%% if needed to be, double side.
+%%
+\cs_new_protected:Npn \__ufrgscca_clearpage:
+ {
+ \if@openright
+ \cleardoublepage
+ \else
+ \clearpage
+ \fi
+ }
+%
+\bool_if:NTF \l__ufrgscca_yearsonly_bool
+ {
+ \SetConsts
+ {
+ publ.date = {\UseConst{publ.year}} ,
+ publ.monthyear = {\UseConst{publ.month} ~ - ~ \UseConst{publ.year}} ,
+ }
+ }
+ {
+ \SetConsts
+ {
+ publ.date = {\UseConst{publ.month} ~ - ~ \UseConst{publ.year}} ,
+ publ.monthyear = {\UseConst{publ.month} ~ - ~ \UseConst{publ.year}} ,
+ }
+ }
%==============================================================================%
% date redefinition (separated month and year)
%==============================================================================%
\RenewDocumentCommand{\date}{O{\number\day}mm}{%
- \gdef\tc@publmonth{#2}%
- \gdef\tc@publyear{#3}%
- \gdef\tc@publday{\ifnum #1<10 0\fi #1}%
+ \int_compare:nNnTF {#1} < {10}
+ {
+ \SetConsts{%
+ publ.month = {#2} ,
+ publ.year = {#3} ,
+ publ.day = {0#1} ,
+ }
+ }
+ {
+ \SetConsts{%
+ publ.month = {#2} ,
+ publ.year = {#3} ,
+ publ.day = {#1} ,
+ }
+ }
}%
\date{\monthname}{\number\year}%
-%for english%
-\@namedef{captionsenglish}{%%
- \input{ufrgscca-en-base.def}%%
-}%
-\@namedef{dateenglish}{%%
- \def\today{\monthname\space\number\day,\space\number\year}%%
- \def\monthname{%%
- \ifcase\month\or%%
- January\or February\or March\or April\or%%
- May\or June\or July\or August\or September\or%%
- October\or November\or December%%
- \fi%%
- }%%
- \iftcif@yearsonly
- \def\tc@date{\tc@publyear}%%
- \else
- \def\tc@date{\tc@publmonth~\tc@publyear}%%
- \fi
-}%
-%
-%para portugues%
-\@namedef{captionsbrazilian}{%%
- \input{ufrgscca-ptBR-base.def}%%
-}%
-\@namedef{datebrazilian}{%%
- \def\today{\number\day\space de\space\monthname\space de\space\number\year}%%
- \def\monthname{%%
- \ifcase\month\or%%
- Janeiro\or Fevereiro\or Março\or Abril\or%%
- Maio\or Junho\or Julho\or Agosto\or Setembro\or%%
- Outubro\or Novembro\or Dezembro%%
- \fi%%
- }%%
- \iftcif@yearsonly
- \def\tc@date{\tc@publyear}%%
- \else
- \def\tc@date{\tc@publmonth~\tc@publyear}%%
- \fi
-}%
-%
-\def\tc@monthyeardate{\tc@publmonth~\tc@publyear}
-%
-% Mainly for 'cover pages'
-\def\tc@pagebreak{\if@openright\cleardoublepage\else\clearpage\fi}
+
+\bool_if:NTF \l__ufrgscca_english_bool
+ {
+ \def\today{\monthname\space\number\day,\space\number\year}
+ \def\monthname{
+ \ifcase\month\or
+ January\or February\or March\or April\or
+ May\or June\or July\or August\or September\or
+ October\or November\or December
+ \fi
+ }
+ }
+ {
+ \def\today{\number\day\space de\space\monthname\space de\space\number\year}
+ \def\monthname{
+ \ifcase\month\or
+ Janeiro\or Fevereiro\or Março\or Abril\or
+ Maio\or Junho\or Julho\or Agosto\or Setembro\or
+ Outubro\or Novembro\or Dezembro
+ \fi
+ }
+ }
+
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-en-base.def b/macros/latex/contrib/ufrgscca/latex/ufrgscca-base-en.def
index ce18bafac4..014860c78f 100644
--- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-en-base.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 1.12 (2023/09/23)
+%% This is version {2.0} {2023/11/23}
%%
%% The list of files that compose this work can be found in the README.md file at
%% https://ctan.org/pkg/ufrgscca
@@ -22,14 +22,7 @@
%% EE stands for "Engineering School"
%% CCA stands for "Control and Automation Engineering Course" (Portuguese acronym)
%%%==============================================================================
-\makeatletter
-\def\tc@tmp@packname{ufrgscca-en-base}
-\def\tc@tmp@altpackname{ufrgsccaenbase}
-\def\tc@tmp@packdesc{UFRGS/CCA English base defs}
-\def\tc@tmp@packdate{2023/09/23}
-\def\tc@tmp@packversion{1.12}
-\let\@exp\expandafter
-\@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion}
+
%%%%%
%%
@@ -39,6 +32,8 @@
% \def\bibname{References}% deprecated by biber
% \def\refname{\bibname}
+% \setlocalecaption{english}{refname}{References}
+ \defbibheading{bibliography}[References]{\nonum\chapter{#1}\pagestyle{bibliography}}
\def\abstractname{Abstract}%
\def\englishabstractname{Abstract}%
\def\contentsname{Contents}%
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-base.def b/macros/latex/contrib/ufrgscca/latex/ufrgscca-base-ptBR.def
index 54ac2f8edd..8854c1ded8 100644
--- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-base.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 1.12 (2023/09/23)
+%% This is version {2.0} {2023/11/23}
%%
%% The list of files that compose this work can be found in the README.md file at
%% https://ctan.org/pkg/ufrgscca
@@ -22,14 +22,7 @@
%% EE stands for "Engineering School"
%% CCA stands for "Control and Automation Engineering Course" (Portuguese acronym)
%%%==============================================================================
-\makeatletter
-\def\tc@tmp@packname{ufrgscca-ptBR-base}
-\def\tc@tmp@altpackname{ufrgsccaptbrbase}
-\def\tc@tmp@packdesc{UFRGS/CCA Portuguese base defs}
-\def\tc@tmp@packdate{2023/09/23}
-\def\tc@tmp@packversion{1.12}
-\let\@exp\expandafter
-\@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion}
+
%%%
%%
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-coord.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-coord.sty
index 55e754d97e..ffb88727a4 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 1.12 (2023/09/23)
+%% This is version {2.0} {2023/11/23}
%%
%% The list of files that compose this work can be found in the README.md file at
%% https://ctan.org/pkg/ufrgscca
@@ -23,1186 +23,593 @@
%% CCA stands for "Control and Automation Engineering Course" (Portuguese acronym)
%%%==============================================================================
\NeedsTeXFormat{LaTeX2e}[2022/06/01]
-\def\tc@tmp@packname{ufrgscca-coord}
-\def\tc@tmp@altpackname{ufrgsccacoord}
-\def\tc@tmp@packdesc{UFRGS/CCA coord commands}
-\def\tc@tmp@packdate{2023/09/23}
-\def\tc@tmp@packversion{1.12}
-\let\@exp\expandafter
-\@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion}
-\@exp\@exp\@exp\ProvidesPackage\@exp\@exp\@exp{\@exp\tc@tmp@packname\@exp}\@exp[\tc@tmp@packdate\space v\tc@tmp@packversion\space\tc@tmp@packdesc]
-
-\newif\iftcif@coord@emptyforms\tcif@coord@emptyformsfalse
-\DeclareKeys[ufrgscca-coord]{
- calendar-I.usage = general,
- calendar-I.if = tcif@coord@calendarI,
- calendar-II.usage = general,
- calendar-II.if = tcif@coord@calendarII,
- checklist.usage = general,
- checklist.if = tcif@coord@checklist,
- report.usage = general,
- report.if = tcif@coord@report,
- report-II.usage = general,
- report-II.if = tcif@coord@report,
- report-I.usage = general,
- report-I.if = tcif@coord@reportI,
- reportxinfo.usage = general,
- reportxinfo.if = tcif@coord@reportxinfo,
- boards.usage = general,
- boards.if = tcif@coord@boards,
- boarddates.usage = general,
- boarddates.if = tcif@coord@boarddates,
- studentlist.usage = general,
- studentlist.if = tcif@coord@studentlist,
- revforms.usage = general,
- revforms.if = tcif@coord@forms@revforms,
- referral-I.usage = general,
- referral-I.if = tcif@coord@forms@referralI,
- referral-II.usage = general,
- referral-II.if = tcif@coord@forms@referralII,
- referral.usage = general,
- referral.if = tcif@coord@forms@referralII,
- cocertificate.usage = general,
- cocertificate.if = tcif@coord@forms@cocertificate,
-}
-\ProcessKeyOptions[ufrgscca-coord]\relax
-\NewDocumentCommand{\setreports}{m}{\SetKeys[ufrgscca-coord]{#1}}
+\ProvidesExplPackage
+ {ufrgscca-coord}
+ {2023/11/23}
+ {2.0}
+ {UFRGS/CCA coord commands}
+
+
+%%%%%%%
+%%%
+%%% Just an attempt of having my packages info in a regular way
+%%% Idea being: { <pck-name> / pkg info } for each and all.
+%%%
+%%%%%%%
+\keys_define:nn { ufrgscca-coord / pkg info}
+ {
+ name .code:n = {ufrgscca-coord} ,
+ prefix .code:n = {ufrgscca} ,
+ date .code:n = {2023/11/23},
+ version .code:n = {2.0} ,
+ description .code:n = {UFRGS/CCA~ coordination~ report~ commands}
+ }
+\cs_if_exist:NF \__codedesc_pkg_info:nn
+ {
+ \cs_new_protected:Npn \__codedesc_pkg_info:nn #1#2
+ { \keys_set:nn {#1 / pkg info}{#2} }
+ }
+\cs_if_exist:NF \PkgInfo
+ { \NewDocumentCommand \PkgInfo {mm} { \keys_set:nn {#1 / pkg info}{#2} } }
+\cs_if_exist:NF \PkgDescription
+ {
+ \NewDocumentCommand \PkgDescription {m}
+ {
+ \noindent Package~ \textbf{\PkgInfo{#1}{name}}~Version:~\PkgInfo{#1}{version}~ -~ \PkgInfo{#1}{date}\par \emph{\PkgInfo{#1}{description}}~\par
+ }
+ }
+%%%%%%%
+%%% End of cut-n-paste
+%%%%%%%
+
+
+
+
+\cs_generate_variant:Nn \tl_set:Nn {Ne}
+
+\keys_define:nn { ufrgscca / coord }
+ {
+ calendar-I. bool_set:N = \l__ufrgscca_calendarI_bool ,
+ calendar-I. usage:n = general ,
+
+ calendar-II. bool_set:N = \l__ufrgscca_calendarII_bool ,
+ calendar-II. usage:n = general ,
+
+ report-I. bool_set:N = \l__ufrgscca_reportI_bool ,
+ report-I. usage:n = general ,
+
+ report-II. bool_set:N = \l__ufrgscca_reportII_bool ,
+ report-II. usage:n = general ,
+
+ checklist-I. bool_set:N = \l__ufrgscca_checklistI_bool ,
+ checklist-I. usage:n = general ,
+
+ checklist-II. bool_set:N = \l__ufrgscca_checklistII_bool ,
+ checklist-II. usage:n = general ,
+
+ boards. bool_set:N = \l__ufrgscca_boards_bool ,
+ boards. usage:n = general ,
+
+ revforms-I. bool_set:N = \l__ufrgscca_revformsI_bool ,
+ revforms-I. usage:n = general ,
+
+ revforms-II. bool_set:N = \l__ufrgscca_revformsII_bool ,
+ revforms-II. usage:n = general ,
+
+ referral-I. bool_set:N = \l__ufrgscca_referralI_bool ,
+ referral-I. usage:n = general ,
+
+ referral-II. bool_set:N = \l__ufrgscca_referralII_bool ,
+ referral-II. usage:n = general ,
+
+ cocertificate. bool_set:N = \l__ufrgscca_cocertificate_bool ,
+ cocertificate. usage:n = general ,
+ }
+
+\cs_new_protected:Npn \__ufrgscca_set_reports:n #1
+ { \keys_set:nn { ufrgscca / coord }{#1} }
+
\def\c@one#1:#2:{\csname #1\endcsname}
\def\c@two#1:#2:{\csname #1\endcsname[newpage]}
\def\tccoord@split#1:#2:#3#4#5,{#4#1:#2:}
\NewDocumentCommand{\tccoord@student@exec}{m}{\tccoord@split#1::\c@two\c@one\empty,}
\RequirePackage{longtable}
-\RequirePackage{ufrgscca-gen}
+\RequirePackage{multirow}
+
\RequirePackage{ufrgscca-core}
\RequirePackage{ufrgscca-forms}
-\RequirePackage{pgfcalendar}
-
-%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%
-\cmdfactory<coord>{boardstitle}
-\cmdfactory<coord>{boardsworklabel}
-\cmdfactory<coord>{TCCgradesNlabel,TCCgradesClabel}%
-
-\cmdfactory<coord>{calendartitle,tcccalendardesc}%
-\cmdfactory<coord>{tccreporttitle,tccreportopening,tccreportdesc,tccreportabsents,tccreportdismiss}%
-\cmdfactory<coord>{tccreferralopening}
-\cmdfactory<coord>{referralfailed,referralapproved}
-\cmdfactory<coord>{referralfailFF}
-\cmdfactory<coord>{referralexamapprovedtext,referralexamfailtext,referralfatetext}%
-\cmdfactory<coord>{referralexamapprovedtextTR,referralexamfailtextTR,referralfatetextTR}%
-\cmdfactory<coord>{boardlabel,cocertificatetitle,cocertificateopenning,cocertificatetext}%
-\cmdfactory<coord>{TCCperiod,boardstitleB,boardsOBS}%
-\cmdfactory<coord>{studentlistformtitle,studentlistactivity,studentlistdate}%
-
-\cmdfactory<coord>{advisornamegen,advisornameplural}
-\cmdfactory<coord>{tcceventAweek,tcceventBweek,tcceventCweek,tcceventDweek}
-\cmdfactory<coord>{tcceventEweek,tcceventFweek,tcceventGweek,tcceventHweek}
-\cmdfactory<coord>{tcceventIweek,tcceventJweek,tcceventKweek,tcceventLweek}
-
-
-\cmdfactory<coord>{internshipreferralopening,internshipreferralfatetext,internshipgrades,internshipreferralfailFF}
-\cmdfactory<coord>{internshipreferralexamapprovedtext,internshipreferralexamfailtext}
-\cmdfactory<coord>{internshipreferralexamhardapprovedtext,internshipreferralexamhardfailtext}
-
-
-%%% this should go to ufrgscca-coord !!!!
-
-\NewDocumentCommand{\grades}{mmmmm}{%
- \gdef\tc@TCCgradeA{#1}%
- \gdef\tc@TCCgradeB{#2}%
- \gdef\tc@TCCgradeC{#3}%
- \gdef\tc@TCCgradeD{#4}%
- \gdef\tc@TCCgradeFF{#5}%
- \gdef\tc@gradeA{#1}%
- \gdef\tc@gradeB{#2}%
- \gdef\tc@gradeC{#3}%
- \gdef\tc@gradeD{#4}%
- \gdef\tc@gradeFF{#5}%
-}%
-\let\TCCgrades\grades%
-%%% this should go to ufrgscca-coord !!!!
-
-\NewDocumentCommand{\gradesN}{mmm}{%
- \gdef\tc@TCCgradeAN{#1}%
- \gdef\tc@TCCgradeBN{#2}%
- \gdef\tc@TCCgradeCN{#3}%
- \gdef\tc@gradeAN{#1}%
- \gdef\tc@gradeBN{#2}%
- \gdef\tc@gradeCN{#3}%
-}%
-\let\TCCgradesN\gradesN
+%\RequirePackage{pgfcalendar}
+%
+
+\NewDocumentCommand{\ActivitySetNewEvent}{O{}mm}{
+ \tl_if_blank:nTF {#1}
+ {
+ \starray_new_term:nn {activity.calendar}{#2}
+ \starray_gset_prop:nnn {activity.calendar}{event}{#3}
+ }
+ {
+ \starray_new_term:nn {activity[#1].calendar}{#2}
+ \starray_gset_prop:nnn {activity[#1].calendar}{event}{#3}
+ }
+}
+
+\NewDocumentCommand{\ActivitySetEventDay}{O{}mmm}{
+ \tl_if_blank:nTF {#1}
+ {
+ \starray_gset_from_keyval:nn {activity.calendar[#2]}
+ {
+ date = {#3} ,
+ week = {#4} ,
+ }
+ }
+ {
+ \starray_gset_from_keyval:nn {activity[#1].calendar[#2]}
+ {
+ date = {#3} ,
+ week = {#4} ,
+ }
+ }
+}
-%%%%%%%%%
-%%%%%%%%% ufrgscca-coord !!!
-%%%%%%%%%
-\NewDocumentCommand{\tccoord@studentExam}{m}{%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}Exam\endcsname{#1}%
-}%
-\NewDocumentCommand{\tccoord@studentFF}{}{%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}FF\endcsname{1}%
- \gdef\tc@TCCff@flag{1}%
- \gdef\tc@ff@flag{1}%
-}%
-\NewDocumentCommand{\tccoord@studentDismiss}{}{%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}Dismiss\endcsname{1}%
- \gdef\tc@TCCdismiss@flag{1}%
- \gdef\tc@dismiss@flag{1}%
-}%
-\NewDocumentCommand{\studentFate}{O{}}{%%
- \ifthenelse{\equal{#1}{C}}{%%
- \tccoord@studentExam{C}%%
- }{%%
- \ifthenelse{\equal{#1}{D}}{%%
- \tccoord@studentExam{D}%%
- }{%%
- \ifthenelse{\equal{#1}{FF}}{%%
- \tccoord@studentFF%%
- }{%%
- \ifthenelse{\equal{#1}{Dismiss}}{%%
- \tccoord@studentDismiss%%
- }{%%
- }%%
- }%%
- }%%
- }%%
-}%%
%
+\NewDocumentCommand{\studentfate}{O{}}{%%
+ \str_case:nnF {#1}
+ {
+ {C}
+ {
+ \starray_gset_from_keyval:nn {student}
+ {
+ grade = C ,
+ flag-exam = \c_true_bool ,
+ flag-graded = \c_true_bool ,
+ flag-approved = \c_true_bool ,
+ }
+ }
+ {D}
+ {
+ \starray_gset_from_keyval:nn {student}
+ {
+ grade = D ,
+ flag-exam = \c_true_bool ,
+ flag-graded = \c_true_bool ,
+ }
+ }
+ {FF}
+ {
+ \starray_gset_from_keyval:nn {student}
+ {
+ grade = FF ,
+ flag-ff = \c_true_bool ,
+ flag-graded = \c_true_bool ,
+ }
+ }
+ {dismiss}
+ {
+ \starray_gset_from_keyval:nn {student}
+ {
+ flag-dismiss = \c_true_bool ,
+ flag-graded = \c_true_bool ,
+ }
+ }
+ {none}
+ {
+ \starray_gset_from_keyval:nn {student}
+ {
+ flag-dismiss = \c_true_bool ,
+ flag-graded = \c_true_bool ,
+ }
+ }
+ }
+ { %% in case of none of above...
+ \__ufrgscca_studentgrade:
+ }
+}%%
%
-\NewDocumentCommand{\studenttimeslot}{O{}mm}{%%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}date\endcsname{#2}%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}time\endcsname{#3}%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}local\endcsname{#1}%
-}%
-\let\timeslot\studenttimeslot%
+\tl_new:N \l__ufrgscca_tmpa_tl
+\tl_new:N \l__ufrgscca_tmpb_tl
+\tl_new:N \l__ufrgscca_tmpc_tl
+\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}}
+ {
+ {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}
+ }
+ {
+ \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}
+ }
+ {
+ \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}
+ }
%
-\NewDocumentCommand{\tccdate}{mm}{%%
- \expandafter\gdef\csname date:#1\endcsname{#2}%
+\NewDocumentCommand{\timeslot}{O{}mm}{%%
+ \starray_gset_from_keyval:nn {student}
+ {
+ board-local = #1 ,
+ board-date = #2 ,
+ board-time = #3 ,
+ }
}%
%
-%\def\c@one#1:#2:{\csname #1\endcsname}
-%\def\c@two#1:#2:{\csname #1\endcsname[newpage]}
-\NewDocumentCommand{\studentturnindate}{m}{\tccoord@studentdatesplit#1,}
-%23/12/2022
-\def\tccoord@studentdatesplit#1/#2/#3,{
- \pgfcalendarifdate{#3-#2-#1}{at least=\tc@internshipcommitB+1}{\tccoord@studentFF}{}
- \pgfcalendarifdate{#3-#2-#1}{between=\tc@internshipcommitA+1 and \tc@internshipcommitB}{\tccoord@studentExam{X}}{}
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}date\endcsname{#1/#2/#3}%
+\NewDocumentCommand{\studentCase}{mmmmm}{
+ \starray_term_syntax:n{student}
+ \bool_case:nF
+ {
+ {\starray_parsed_get_prop:n{flag-ff}}
+ {#5}
+ {\starray_parsed_get_prop:n{flag-exam}}
+ {
+ \bool_if:nTF{\starray_parsed_get_prop:n{flag-approved}}
+ {#3}
+ {#4}
+ }
+ }
+ {
+ \bool_if:nTF{\starray_parsed_get_prop:n{flag-approved}}
+ {#1}
+ {#2}
+ }
}
-\NewDocumentCommand{\intershipcommitdates}{mm}{%
- \tccoord@commitdatesplit#1,A,%
- \tccoord@commitdatesplit#2,B,%
-}
-\def\tccoord@commitdatesplit#1/#2/#3,#4,{
- \expandafter\xdef\csname tc@internshipcommit#4\endcsname{#3-#2-#1}%
- \expandafter\xdef\csname tc@internshipcommit#4#4\endcsname{#1/#2/#3}%
+\NewDocumentCommand{\studentDismissCase}{mm}{
+ \starray_term_syntax:n{student}
+ \bool_if:nTF {\starray_parsed_get_prop:n{flag-dismiss}}
+ {#1}
+ {#2}
}
-%%%%%%%%%
-%%%%%%%%% ufrgscca-coord !?!!
-%%%%%%%%%
-\NewDocumentCommand{\studentTCCtitle}{m}{%%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}title\endcsname{#1}%
-}%
-\let\TCCtitle\studentTCCtitle%
-%
-%%%%%%%%%
-%%%%%%%%% ufrgscca-coord !!!
-%%%%%%%%%
-\NewDocumentCommand{\studentremark}{m}{%%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}remark\endcsname{#1}%
-}%
-%
-
+\NewDocumentCommand{\studentremark}{m}{
+ \starray_gset_prop:nnn {student}{remarks}{#1}
+}
-%
-\NewDocumentCommand{\tccoord@checklist}{m}{\expandafter\gdef\csname tc@student\Alph{tc@studentcount}:#1\endcsname{}}%
-\NewDocumentCommand{\checklist}{m}{\forcsvlist{\tccoord@checklist}{#1}}%
-%
-\NewDocumentCommand{\addtostudent}{mm}{\@ifundefined{#1}{}{\csappto{#1.hook}{#2}}}
-%
-\NewDocumentCommand{\checkedbox}{}{\ooalign{$\square$\cr\hidewidth\raise.3ex\hbox{$\checkmark\mkern-7mu$}\hidewidth\cr}}%
-\NewDocumentCommand{\uncheckedbox}{}{$\square$}%
-\NewDocumentCommand{\tccoord@@check}{mm}{\@ifundefined{tc@student#1:#2}{\uncheckedbox}{\checkedbox}}%
-\NewDocumentCommand{\tccoord@check}{mm}{\@ifundefined{#2}{}{\tccoord@@check{#1}{\csname #2\endcsname} \csname @\csname #2\endcsname\endcsname}}%
-\NewDocumentCommand{\checkdef}{mmm}{\expandafter\gdef\csname #1\endcsname{#2}\expandafter\gdef\csname @#2\endcsname{#3}}%
-%\chekmark%
-
-%%%%%
-%%%%% ufrgscca-coord !!!!
-%%%%%
-\NewDocumentCommand{\tccoord@studentboardsnewpage}{}{% %%% see ufrgscca-core for counters...
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}BoardsNP\endcsname{1}%
-}%
-
-\NewDocumentCommand{\NewStudent}{m+m}{%%
- \expandafter\NewDocumentCommand\csname #1\endcsname{O{}}{%%
- #2%
- \csname #1.hook\endcsname%
- \@ifundefined{tccoord@studentboards##1}{}{\csname tccoord@studentboards##1\endcsname}%%
- \iftcif@coord@forms@revforms%
- \tcforms@examinersForms%
- \fi%
- \iftcif@coord@forms@referralII%
- \tccoord@TCCreferralletter%
- \fi%
- \iftcif@coord@forms@referralI%
- \tccoord@TCCIreferralletter%
- \fi%
- \iftcif@coord@forms@cocertificate%
- \tccoord@TCCcocertificateletter%
- \fi%
-%
- \@defaultboard%
- }%%
- \expandafter\NewDocumentCommand\csname #1.hook\endcsname{}{}%
-}%
+\NewDocumentCommand{\studentNewPageCase}{mm}
+ {
+ \starray_term_syntax:n{student}
+ \bool_if:nTF {\starray_parsed_get_prop:n{flag-newpage}}
+ {#1}
+ {#2}
+ }
-\NewDocumentCommand{\NewInternshipStudent}{m+m}{%%
- \expandafter\NewDocumentCommand\csname #1\endcsname{O{}}{%%
- #2%
- \csname #1.hook\endcsname%
- \iftcif@coord@forms@referralII%
- \tccoord@internshipreferalletter%
- \fi%
- }%%
- \expandafter\NewDocumentCommand\csname #1.hook\endcsname{}{}%
+\NewDocumentCommand{\studentnewpage}{O{}}{
+ \tl_if_blank:nTF {#1}
+ { \starray_gset_prop:nnn {student}{flag-newpage}{\c_true_bool} }
+ { \starray_gset_prop:nnn {student[#1]}{flag-newpage}{\c_true_bool} }
}%
-\NewDocumentCommand{\@distinctboard}{}{\def\tc@nBoard{}}%
-\NewDocumentCommand{\@defaultboard}{}{\let\tc@nBoard\undefined}%
-%
-%
-\newcounter{tc@calendareventcount}%
-\NewDocumentCommand{\tcccalendarevent}{mm}{%%
- \stepcounter{tc@calendareventcount}%%
- \expandafter\gdef\csname tc@tcccalendarevent\Alph{tc@calendareventcount}week\endcsname{#1}%%
- \expandafter\gdef\csname tc@tcccalendarevent\Alph{tc@calendareventcount}desc\endcsname{#2}%%
-}%
-\NewDocumentCommand{\tcccalendarhead}{mmm}{\gdef\tc@tcccalendarhead{#1 & #2 & #3\\}}%
-%
-\newcounter{tc@calendareventdatecount}%
-\NewDocumentCommand{\tcccalendareventdate}{m}{%%
- \stepcounter{tc@calendareventdatecount}%%
- \expandafter\gdef\csname tc@tcccalendarevent\Alph{tc@calendareventdatecount}date\endcsname{#1}%%
+\NewDocumentCommand{\boardtitle}{m}{%%
+ \SetTerms{%
+ board.title = {#1} ,
+ }
}%
-%
-\NewDocumentCommand{\tccoord@calendarlinereset}{m}{\@ifundefined{tc@tcccalendarevent#1week}{}{\csundef{tc@tcccalendarevent#1week}}}%
-%
-\NewDocumentCommand{\tcccalendarreset}{}{
- \forcsvlist{\tccoord@calendarlinereset}{A,B,C,D,E,F,G,H,I,J,K,L,M,N,O}%
- \setcounter{tc@calendareventcount}{0}%%
- \setcounter{tc@calendareventdatecount}{0}%
-}
-%
-\NewDocumentCommand{\examinergrades}{mmmO{0}}{%%
- \ifthenelse{\equal{#1}{}}{%%
- \expandafter\def\csname tc@student\Alph{tc@studentcount}@examiner\Alph{tc@examinercount}grade\endcsname{0}%
- \expandafter\def\csname tc@student\Alph{tc@studentcount}@examiner\Alph{tc@examinercount}gradeI\endcsname{0}%
- }{%
- \ifthenelse{\equal{#4}{0}}{%
- \expandafter\def\csname tc@student\Alph{tc@studentcount}@examiner\Alph{tc@examinercount}pointA\endcsname{#1}%%
- \expandafter\def\csname tc@student\Alph{tc@studentcount}@examiner\Alph{tc@examinercount}pointB\endcsname{#2}%%
- \expandafter\def\csname tc@student\Alph{tc@studentcount}@examiner\Alph{tc@examinercount}pointC\endcsname{#3}%%
- \expandafter\def\csname tc@student\Alph{tc@studentcount}@examiner\Alph{tc@examinercount}pointD\endcsname{#4}%%
- \expandafter\edef\csname tc@student\Alph{tc@studentcount}@examiner\Alph{tc@examinercount}grade\endcsname{\fpeval{round((\tc@TCCpointAweight * #1 + \tc@TCCpointBweight * #2 + \tc@TCCpointCweight * #3) / (\tc@TCCpointAweight + \tc@TCCpointBweight + \tc@TCCpointCweight),2,1)} }%
- \expandafter\edef\csname tc@student\Alph{tc@studentcount}@examiner\Alph{tc@examinercount}gradeI\endcsname{0}%
- }{%
- \expandafter\def\csname tc@student\Alph{tc@studentcount}@examiner\Alph{tc@examinercount}pointA\endcsname{\fpeval{#1}}%% * \tc@TCCIpointscale}}%%
- \expandafter\def\csname tc@student\Alph{tc@studentcount}@examiner\Alph{tc@examinercount}pointB\endcsname{\fpeval{#2}}%% * \tc@TCCIpointscale}}%%
- \expandafter\def\csname tc@student\Alph{tc@studentcount}@examiner\Alph{tc@examinercount}pointC\endcsname{\fpeval{#3}}%% * \tc@TCCIpointscale}}%%
- \expandafter\def\csname tc@student\Alph{tc@studentcount}@examiner\Alph{tc@examinercount}pointD\endcsname{\fpeval{#4}}%% * \tc@TCCIpointscale}}%%
- \expandafter\edef\csname tc@student\Alph{tc@studentcount}@examiner\Alph{tc@examinercount}grade\endcsname{0}%
- \expandafter\edef\csname tc@student\Alph{tc@studentcount}@examiner\Alph{tc@examinercount}gradeI\endcsname{\fpeval{round((\tc@TCCIpointAweight * #1 + \tc@TCCIpointBweight * #2 + \tc@TCCIpointCweight * #3 + \tc@TCCIpointDweight * #4) / (\tc@TCCIpointAweight + \tc@TCCIpointBweight + \tc@TCCIpointCweight + \tc@TCCIpointDweight),2,1)} }%
-% \expandafter\edef\csname tc@student\Alph{tc@studentcount}@examiner\Alph{tc@examinercount}gradeI\endcsname{\fpeval{round((\tc@TCCIpointAweight * #1 + \tc@TCCIpointBweight * #2 + \tc@TCCIpointCweight * #3 + \tc@TCCIpointDweight * #4) * \tc@TCCIpointscale / (\tc@TCCIpointAweight + \tc@TCCIpointBweight + \tc@TCCIpointCweight + \tc@TCCIpointDweight),2,1)} }%
- }%
- }%
-}%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% TCC calendar%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\def\tc@calendartab{11.5cm}%
-\NewDocumentCommand{\tccoord@TCCcalendarline}{m}{\@ifundefined{tc@tcccalendarevent#1week}{}{\textbf{\csname tc@tcccalendarevent#1date\endcsname} & \csname tc@tcccalendarevent#1week\endcsname & \csname tc@tcccalendarevent#1desc\endcsname\\\hline}}%
-%%%
-%%
-%%%
-\NewDocumentCommand{\tccoord@TCCcalendarI}{}{%
- \tc@formtopbox{\tcdef@forms@formstitleTR}{\tcdef@coord@calendartitle}%
-%
- { \footnotesize%
- \begin{center}
-%
- \resizebox{\textwidth}{!}{%%
- \begin{tabular}{ccp{\tc@calendartab}}%
- \tc@tcccalendarhead\hline%
- \forcsvlist{\tccoord@TCCcalendarline}{A,B,C,D,E,F,G,H,I,J,K,L,M,N,O}%
- \end{tabular}}%
-%
- \end{center}%
- %\if@lmodern
- \tiny
- %\fi
- \tcdef@coord@tcccalendardesc%
- }%
- \vfill%
-%
- \pagebreak%
-}%
-%
-\NewDocumentCommand{\tccoord@TCCcalendarII}{}{%
- \tc@formtopbox{\tcdef@forms@formstitle}{\tcdef@coord@calendartitle}%
-%
- { \footnotesize%
- \begin{center}
-%
- \resizebox{\textwidth}{!}{%%
- \begin{tabular}{ccp{\tc@calendartab}}%
- \tc@tcccalendarhead\hline%
- \forcsvlist{\tccoord@TCCcalendarline}{A,B,C,D,E,F,G,H,I,J,K,L,M,N,O}%
- \end{tabular}}%
-%
- \end{center}%
- %\if@lmodern
- \tiny
- %\fi
- \tcdef@coord@tcccalendardesc%
- }%
- \vfill%
-%
- \pagebreak%
-}%
-%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% Student list form%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\def\tc@stlistrule{65mm}%
-\def\tc@stlisttab{70mm}%
-%%%
-%%
-%%%
-\NewDocumentCommand{\tccoord@studentlistrow}{m}{%%
- \@ifundefined{tc@student#1}{\rule{\tc@stlistrule}{.1pt}}{\csname tc@student#1\endcsname}\hrulefill & \rule{\tc@stlistrule}{.1pt}\\%
+\NewDocumentCommand{\boardobs}{m}{%%
+ \SetTerms{%
+ board.obs = {#1} ,
+ }
}%
-%
-\NewDocumentCommand{\tccoord@studentlistform}{}{%
- \stepcounter{tc@studentcount}%
- \tc@formtopbox{\tcdef@forms@formstitle}{\tcdef@coord@studentlistformtitle}%
- \vspace{20mm}%
-%
- {\small%
- \begin{tabular}{p{\tc@stlisttab}@{ }p{\tc@stlisttab}}%
- \tcdef@forms@formsstudentlabelgen & \tcdef@forms@studentsignaturegen\\\hline\\[2mm]%
-%
- \forcsvlist{\tccoord@studentlistrow}{A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y}
- \end{tabular}}%
- \vfill%
-%
- \pagebreak%
-}%
-%
-%%%
-%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% student info row (for reports and referral letters)%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\def\tc@BoardTabA{38mm}%
-\def\tc@BoardTabB{38mm}%
-\def\tc@BoardTabC{60mm}%
-\def\tc@BoardTabD{13mm}%
-%%%
-%%
-%%%
-\NewDocumentCommand{\tccoord@studentboardrow}{m}{%%
- \@ifundefined{tc@student#1}{}{%
- \@ifundefined{tc@student#1Dismiss}{%%
- \@ifundefined{tc@student#1FF}{%%
- \@ifundefined{tc@student#1time}{}{%%
- \multirow{4}{\tc@BoardTabA}{\textbf{\csname tc@student#1\endcsname}} & \multirow{4}{\tc@BoardTabB}{{\hspace{-0.4em}\csname tc@student#1@advisor\endcsname}\ifcsdef{tc@student#1@coadvisor}{\break\csname tc@student#1@coadvisor\endcsname}{}} & \break\csname tc@student#1@examinerA\endcsname & \multirow{5}{\tc@BoardTabD}{\iftcif@coord@boarddates\else\csname tc@student#1date\endcsname\\\fi
- \csname tc@student#1time\endcsname\\[1mm]\csname tc@student#1local\endcsname
- }\\*%
- & & \csname tc@student#1@examinerB\endcsname & \\*%
- & & \csname tc@student#1@examinerC\endcsname & \\*%
- & & (\csname tc@student#1@altexaminerA\endcsname\ ) & \\*%
- \multicolumn{3}{l}{\textsc{\tcdef@coord@boardsworklabel:} \begin{minipage}{0.90\textwidth}\textit{\csname tc@student#1title\endcsname}\end{minipage}} & \\[2mm]\hline%
- }%
- }{}%
- }{}%
- }%
-}%
-%
-\NewDocumentCommand{\tccoord@testdaterow}{mm}{%%
-% \@ifundefined{tcif@coord@boarddates}{}{%%
- \iftcif@coord@boarddates%
- \@ifundefined{tc@student#2}{}{%%
- \@ifundefined{tc@student#2Dismiss}{%%
- \@ifundefined{tc@student#2FF}{%%
- \@ifundefined{tc@student#2BoardsNP}{%%
- \tccoord@@testdaterow{\csname tc@student#1date\endcsname}{\csname tc@student#2date\endcsname}%%
- }{\kill\pagebreak\tccoord@daterow{#2}}%%
- }{}%%
- }{}%%
- }%%
- \fi
- %}%%@boarddates
-}%%
-%
-\NewDocumentCommand{\tccoord@@testdaterow}{mm}{\ifthenelse{\equal{#1}{#2}}{\\[-4.35mm]\hline\\[-4mm]}{\tccoord@@daterow{#2}}}%
-\NewDocumentCommand{\tccoord@daterow}{m}{\gdef\tc@date{\csname tc@student#1date\endcsname}\tccoord@@daterow{\tc@date}}%
-\NewDocumentCommand{\tccoord@@daterow}{m}{& & \multicolumn{2}{r}{\textsc{\textbf{\csname date:#1\endcsname\ --- #1}}} \\*%
- \textsc{\tcdef@forms@formsstudentlabelgen} & \textsc{\tcdef@forms@formsadvisorlabelgen} & \textsc{\tcdef@forms@formsboardtitle} & \textsc{\tcdef@forms@formstimelabel}\\*\hline}%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% TCC Boards announce table%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\newcounter{tccoord@@auxA}%
-\newcounter{tccoord@@auxB}%
-\NewDocumentCommand{\tccoord@@studenttestrow}{m}{%
- \setcounter{tccoord@@auxA}{#1}\setcounter{tccoord@@auxB}{#1}\stepcounter{tccoord@@auxB} \tccoord@studentboardrow{\Alph{tccoord@@auxA}}\tccoord@testdaterow{\Alph{tccoord@@auxA}}{\Alph{tccoord@@auxB}}%
-}%
-\NewDocumentCommand{\tccoord@TCCboards}{}{%
- \stepcounter{tc@studentcount}%
- \tc@formtopbox{\tcdef@forms@formstitle}{\tcdef@coord@TCCperiod}%
-%
- {%%
- \footnotesize\gdef\tc@date{\csname tc@studentAdate\endcsname}%
- \setlength\LTleft{-8mm} \begin{center}%
- {%%
- \begin{longtable}{p{\tc@BoardTabA}p{\tc@BoardTabB}p{\tc@BoardTabC}p{\tc@BoardTabD}}%
- \multicolumn{4}{c}{\textbf{\textsc{\tcdef@coord@boardstitle}}}\\\hline%
- \iftcif@coord@boarddates\else\textsc{\tcdef@forms@formsstudentlabelgen} & \textsc{\tcdef@forms@formsadvisorlabelgen} & \textsc{\tcdef@forms@formsboardtitle} & \textsc{\tcdef@forms@formstimelabel}\\\hline\fi%
- \endhead%
- \tccoord@testdaterow{T}{A}%
- \forcsvlist{\tccoord@@studenttestrow}{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19}
- \tccoord@studentboardrow{T}% letter 'T' is 20 !
-%
- \end{longtable}%
- }%
- \end{center}%
- {\bf \tcdef@coord@boardsOBS}%
- }%
- \vfill%
- \pagebreak%
-}%
-%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% \tccoord@fate => A,B,C,D as a function of student grade%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tccoord@fate}{m}{%
- \ifthenelse{1 = \fpeval{#1 < \tc@TCCgradeCN}}%
- {\tc@TCCgradeD}%
- {
- \ifthenelse{1 = \fpeval{#1 < \tc@TCCgradeBN}}%
- {\tc@TCCgradeC}%
- {
- \ifthenelse{1 = \fpeval{#1 < \tc@TCCgradeAN}}%
- {\tc@TCCgradeB}%
- {\tc@TCCgradeA}%
- }%
- }%
-}
-\NewDocumentCommand{\tccoord@@fate}{m}{\tccoord@fate{\csname tc@student#1Temp\endcsname}}%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% \tc@student grade => average of the 3 examiners grade%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tccoord@studentgrade}{m}{%%
- \@ifundefined{tc@student#1}{}{%
- \expandafter\edef\csname tc@student#1Temp\endcsname{%%
-\fpeval{round((\csname tc@student#1@examinerAgrade\endcsname + \csname tc@student#1@examinerBgrade\endcsname + \csname tc@student#1@examinerCgrade\endcsname )/3,2,1)}%
- }%
- }%
-}%
-%
-%%
-% TCC-I
-% \tc@student grade => average of the 2 examiners grade%
-%%
-\NewDocumentCommand{\tccoord@studentgradeI}{m}{%%
- \@ifundefined{tc@student#1}{}{%
- \expandafter\edef\csname tc@student#1Temp\endcsname{%%
-\fpeval{round((\csname tc@student#1@examinerBgradeI\endcsname + \csname tc@student#1@examinerCgradeI\endcsname )/2,2,1)}%
- }%
- }%
-}%
-%
-\NewDocumentCommand{\tccoord@internshipstudentgrade}{m}{%
- \@ifundefined{tc@student#1}{}{%
- \expandafter\edef\csname tc@student#1Temp\endcsname{%%
- \fpeval{round((2 * (\csname tc@student#1@supervisorgradeA\endcsname + \csname tc@student#1@supervisorgradeB\endcsname) + \csname tc@student#1@tutorgrade\endcsname + \csname tc@student#1@internshipcoordgrade\endcsname )/28,2,1)}%
- }%
- }%
-}
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% examiners info (grades) for report/referral letters%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tccoord@examinersline}{mm}{%%
-& \hspace{-0.4em}\csname tc@student#1@examiner#2\endcsname & \csname tc@student#1@examiner#2pointA\endcsname & \csname tc@student#1@examiner#2pointB\endcsname & \csname tc@student#1@examiner#2pointC\endcsname & \csname tc@student#1@examiner#2grade\endcsname &%
-}%
-%
-%%
-% TCC-I
-% examiners info (grades) for report/referral letters%
-%%
-\NewDocumentCommand{\tccoord@examinerslineI}{mm}{%%
-& \hspace{-0.4em}\csname tc@student#1@examiner#2\endcsname & \csname tc@student#1@examiner#2pointA\endcsname & \csname tc@student#1@examiner#2pointB\endcsname & \csname tc@student#1@examiner#2pointC\endcsname & \csname tc@student#1@examiner#2pointD\endcsname & \csname tc@student#1@examiner#2gradeI\endcsname &%
-}%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% student extra info (process number, ID, email) for report%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tccoord@studentextrainfo}{m}{%%
- (\csname tc@student#1Nproc\endcsname )\ \ \csname tc@student#1ID\endcsname\ / \csname tc@student#1email\endcsname%%
-}%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% student info (all examiners, advisor, etc.) for report and referral letters.%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tccoord@@studentrow}{m}{%
- \setcounter{tc@studentcount}{#1}%
- \tccoord@studentrow[tc@studentextrainfo]{\Alph{tc@studentcount}}%
-}%
-\NewDocumentCommand{\tccoord@studentrow}{O{}m}{%%
- \@ifundefined{tc@student#2}{}{%%
- \@ifundefined{tc@student#2FF}{%%
- \@ifundefined{tc@student#2Dismiss}{%%
- \multirow{4}{\tc@ReportTabA}{\csname tc@student#2\endcsname} %%
- \tccoord@examinersline{#2}{A}\\*%%
- \tccoord@examinersline{#2}{B}\\*%%
- \tccoord@examinersline{#2}{C}\\*%%
- & \multicolumn{4}{c}{\ifcsdef{tc@student#2@coadvisor}{\tcdef@coord@advisornameplural}{\tcdef@cover@advisorname} : \csname tc@student#2@advisor\endcsname \ifcsdef{tc@student#2@coadvisor}{ /\csname tc@student#2@coadvisor\endcsname}}{} & \textbf{\csname tc@student#2Temp\endcsname} & %%
- \textbf{\tccoord@@fate{#2}}%%
- \ifblank{#1}{\\}{\\*%%
- \multicolumn{7}{l}{\tcdef@coord@boardsworklabel: \csname tc@student#2title\endcsname}\\*%%
- \iftcif@coord@reportxinfo%
- \multicolumn{7}{l}{\tccoord@studentextrainfo{#2}}\\*%
- \ifcsdef{tc@student#2remark}{\multicolumn{6}{c}{{\bf \csname tc@student#2remark\endcsname}}\\}{}%
- \fi%
- }%%
- \hline%%
- }{%%
- }%%
- }{%%
- }%%
- }%%
-}%
-%
-%
-%%
-% TCC-I
-% student info (all examiners, advisor, etc.) for report and referral letters.%
-%%
-\NewDocumentCommand{\tccoord@@studentrowI}{m}{%
- \setcounter{tc@studentcount}{#1}%
- \tccoord@studentrowI[tc@studentextrainfo]{\Alph{tc@studentcount}}%
-}%
-\NewDocumentCommand{\tccoord@studentrowI}{O{}m}{%%
- \@ifundefined{tc@student#2}{}{%%
- \@ifundefined{tc@student#2FF}{%%
- \@ifundefined{tc@student#2Dismiss}{%%
- \multirow{3}{\tc@ReportTabA}{\csname tc@student#2\endcsname} %%
- \tccoord@examinerslineI{#2}{B}\\*%%
- \tccoord@examinerslineI{#2}{C}\\*%%
- & \multicolumn{5}{c}{\ifcsdef{tc@student#2@coadvisor}{\tcdef@coord@advisornameplural}{\tcdef@cover@advisorname} : \csname tc@student#2@advisor\endcsname \ifcsdef{tc@student#2@coadvisor}{ /\csname tc@student#2@coadvisor\endcsname}}{} & \textbf{\csname tc@student#2Temp\endcsname} & %%
- \textbf{\tccoord@@fate{#2}}%%
- \ifblank{#1}{\\}{\\*%%
- \multicolumn{8}{l}{\tcdef@coord@boardsworklabel: \csname tc@student#2title\endcsname}\\*%%
- \iftcif@coord@reportxinfo%
- \multicolumn{8}{l}{\tccoord@studentextrainfo{#2}}\\*%
- \ifcsdef{tc@student#2remark}{\multicolumn{6}{c}{{\bf \csname tc@student#2remark\endcsname}}\\}{}%
- \fi%
- }%%
- \hline%%
- }{%%
- }%%
- }{%%
- }%%
- }%%
-}%
-%
-%
-%
-\NewDocumentCommand{\tccoord@studentxinforow}{m}{%
- \multicolumn{7}{l}{\tccoord@studentextrainfo{#1}}\\*%
- \ifcsdef{tc@student#1remark}{\multicolumn{6}{c}{{\bf \csname tc@student#1remark\endcsname}}\\}{}%
-}%
-%
-%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% student FF info (report)%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tccoord@@studentFFrow}{m}{%%
- \setcounter{tc@studentcount}{#1}%
- \tccoord@studentFFrow{\Alph{tc@studentcount}}%
-}%
-\NewDocumentCommand{\tccoord@studentFFrow}{m}{%%
- \@ifundefined{tc@student#1}{}{%%
- \@ifundefined{tc@student#1Dismiss}{%%
- \@ifundefined{tc@student#1FF}{%%
- }{\\*%%
- \multicolumn{6}{l}{\csname tc@student#1\endcsname } & \tc@TCCgradeFF\\*%%
- \iftcif@coord@reportxinfo%
- \multicolumn{6}{l}{\tccoord@studentextrainfo{#1}}\\*%
- \ifcsdef{tc@student#1remark}{\multicolumn{6}{c}{{\bf \csname tc@student#1remark\endcsname}}\\}{}%
- \fi%
- \multicolumn{6}{l}{\ifcsdef{tc@student#1@coadvisor}{\tcdef@coord@advisornameplural}{\tcdef@cover@advisorname} : \csname tc@student#1@advisor\endcsname\ifcsdef{tc@student#1@coadvisor}{ /\csname tc@student#1@coadvisor\endcsname}{}} & \\\hline%%
- }%%
- }{}%%
- }%%
-}%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% student info (report), dimiss case%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tccoord@@studentDismissrow}{m}{%%
- \setcounter{tc@studentcount}{#1}%
- \tccoord@studentDismissrow{\Alph{tc@studentcount}}%
-}%
-\NewDocumentCommand{\tccoord@studentDismissrow}{mO{}}{%%
- \@ifundefined{tc@student#1}{}{%%
- \@ifundefined{tc@student#1FF}{%%
- \@ifundefined{tc@student#1Dismiss}{%%
- }{\ifblank{#2}{}{\setcounter{tc@studentcount}{#2}}\\*%%
- \multicolumn{6}{l}{\csname tc@student#1\endcsname} & \\*%%
- \iftcif@coord@reportxinfo%
- \multicolumn{6}{l}{\tccoord@studentextrainfo{#1}}\\*%
- \ifcsdef{tc@student#1remark}{\multicolumn{6}{c}{{\bf \csname tc@student#1remark\endcsname}}\\}{}%
- \fi%
- \multicolumn{6}{l}{\ifcsdef{tc@student#1@coadvisor}{\tcdef@coord@advisornameplural}{\tcdef@cover@advisorname} : \csname tc@student#1@advisor\endcsname\ifcsdef{tc@student#1@coadvisor}{ /\csname tc@student#1@coadvisor\endcsname}{}} & \\\hline%%
- }%%
- }{}%%
- }%%
-}%
-%
-%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% TCC report (student grades, FF, dismiss)%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\def\tc@ReportTabA{32mm}%
-\def\tc@ReportTabB{42mm}%
-\def\tc@ReportTabC{15mm}%
-\def\tc@ReportTabD{15mm}%
-\def\tc@ReportTabE{15mm}%
-\def\tc@ReportTabEx{15mm}%
-\def\tc@ReportTabF{8mm}%
-\def\tc@ReportTabG{12mm}%
-%%%%
-%%
-%%%%
-\NewDocumentCommand{\tccoord@TCCreport}{}{%
- \stepcounter{tc@studentcount}%
- \tc@formtopbox{\tcdef@forms@formstitle}{\tcdef@coord@tccreporttitle\ - \tcdef@coord@TCCperiod}%
- {%%
-% \footnotesize%
- \tiny%
- \forcsvlist{\tccoord@studentgrade}{A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,X,Y}%
- \begin{center}%
- \begin{longtable}{p{\tc@ReportTabA}@{\ }p{\tc@ReportTabB}@{\ }p{\tc@ReportTabC}@{\ }p{\tc@ReportTabD}@{\ }p{\tc@ReportTabE}@{\ }p{\tc@ReportTabF}@{\ }p{\tc@ReportTabG}}%
- \multicolumn{7}{c}{\tcdef@forms@formstitle\ \tcdef@coord@TCCperiod}\\\hline%
- & \tcdef@coord@boardlabel & \tc@TCCpointAlabel & \tc@TCCpointBlabel & \tc@TCCpointClabel &%
- \tcdef@coord@TCCgradesNlabel & \tcdef@coord@TCCgradesClabel\\\hline%
- \endhead%
- \forcsvlist{\tccoord@@studentrow}{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25}
- \@ifundefined{tc@TCCff@flag}{}{%
- & & & & & & \\%
- & & & & & & \\%
- \multicolumn{6}{l}{{\bf \tcdef@coord@tccreportabsents}}\\\hline%
- \forcsvlist{\tccoord@@studentFFrow}{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25}%
- }%
- \@ifundefined{tc@TCCdismiss@flag}{}{%
- & & & & & & \\%
- & & & & & & \\%
- \multicolumn{6}{l}{{\bf \tcdef@coord@tccreportdismiss}}\\\hline%
- \forcsvlist{\tccoord@@studentDismissrow}{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25}
- }%%
- \end{longtable}%%
- \end{center}%%
- } %end of footnotesize%
-
- \vfill%
- \pagebreak%
-}%
-%
-%%%%
-\NewDocumentCommand{\tccoord@TCCIreport}{}{%
- \stepcounter{tc@studentcount}%
- \tc@formtopbox{\tcdef@forms@formstitleTR}{\tcdef@coord@tccreporttitle\ - \tcdef@coord@TCCperiod}%
- {%%
-% \footnotesize%
- \tiny%
- \forcsvlist{\tccoord@studentgradeI}{A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,X,Y}%
- \begin{center}%
- \begin{longtable}{p{\tc@ReportTabA}@{\ }p{\tc@ReportTabB}@{\ }p{\tc@ReportTabC}@{\ }p{\tc@ReportTabD}@{\ }p{\tc@ReportTabE}@{\ }p{\tc@ReportTabEx}@{\ }p{\tc@ReportTabF}@{\ }p{\tc@ReportTabG}}%
- \multicolumn{7}{c}{\tcdef@forms@formstitleTR\ \tcdef@coord@TCCperiod}\\\hline%
- & \tcdef@coord@boardlabel & \tc@TCCIpointAlabel & \tc@TCCIpointBlabel & \tc@TCCIpointClabel & \tc@TCCIpointDlabel &%
- \tcdef@coord@TCCgradesNlabel & \tcdef@coord@TCCgradesClabel\\\hline%
- \endhead%
- \forcsvlist{\tccoord@@studentrowI}{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25}
- \@ifundefined{tc@TCCff@flag}{}{%
- & & & & & & \\%
- & & & & & & \\%
- \multicolumn{6}{l}{{\bf \tcdef@coord@tccreportabsents}}\\\hline%
- \forcsvlist{\tccoord@@studentFFrow}{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25}%
- }%
- \@ifundefined{tc@TCCdismiss@flag}{}{%
- & & & & & & \\%
- & & & & & & \\%
- \multicolumn{6}{l}{{\bf \tcdef@coord@tccreportdismiss}}\\\hline%
- \forcsvlist{\tccoord@@studentDismissrow}{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25}
- }%%
- \end{longtable}%%
- \end{center}%%
- } %end of footnotesize%
-
- \vfill%
- \pagebreak%
-}%
-%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% student check list row%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tccoord@@LCcheck}{mmm}{%
- & \tccoord@check{#1}{check#2#3}%
-}%
-\NewDocumentCommand{\tccoord@@Lcheck}{mm}{%
- \forcsvlist{\tccoord@@LCcheck{#1}{#2}}{A,B,C,D,E}\\*%
-}%
-\NewDocumentCommand{\tccoord@studentcheckrow}{m}{%%
- \@ifundefined{tc@student#1}{}{%%
- \@ifundefined{tc@student#1FF}{%%
- \@ifundefined{tc@student#1Dismiss}{\\[-2ex]%%
- \multirow{4}{\tc@ReportTabA}{\csname tc@student#1\endcsname} %
- \forcsvlist{\tccoord@@Lcheck{#1}}{A,B,C,D}\hline%%
- }{}%%
- }{}%%
- }%%
+\NewDocumentCommand{\boarddate}{mm}{%%
+ \SetConsts{%
+ date:#1 = {#2} ,
+ }
}%
%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% TCC check list%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tccoord@TCCchecklist}{}{%
- \stepcounter{tc@studentcount}%
- \tc@formtopbox{\tcdef@forms@formstitle}{Check List - \tcdef@coord@TCCperiod}%
- {%%
-% \footnotesize%
- \scriptsize%
- \setlength\LTleft{-10mm}%
- \begin{center}%
- \begin{longtable}{p{\tc@ReportTabA}lllll}%
- \\\hline%
- \endhead%
- \forcsvlist{\tccoord@studentcheckrow}{A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,X,Y}%
- \end{longtable}%%
- \end{center}%%
- } %end of footnotesize%
-
- \vfill%
- \pagebreak%
+\NewDocumentCommand{\semester}{m}{%%
+ \SetTerms{%
+ semester = {#1} ,
+ }
}%
%
-%
-%
-%
-%
-%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%
-%
-%
-%
-%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% TCC referral letters :: approved/failed/FF%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tccoord@TCCcocertificateletter}{}{% tc@student\Alph{tc@studentcount}@#1
- \@ifundefined{tc@student\Alph{tc@studentcount}@coadvisor}{}{%
- \tc@formtopbox{\tcdef@forms@formstitle}{\tcdef@coord@cocertificatetitle}%
-
- \noindent \tcdef@coord@cocertificateopenning%
- \vfill%
-\begin{center}
-{\sc \csname tc@student\Alph{tc@studentcount}@coadvisor\endcsname}
-\end{center}
-
-\vfill
-
-\tcdef@coord@cocertificatetext
+%%%%%%\NewDocumentCommand{\studentturnindate}{m}{\tccoord@studentdatesplit#1,}
+%%%%%%%23/12/2022
+%%%%%%
+%%%%%%\def\tccoord@studentdatesplit#1/#2/#3,{
+%%%%%% \pgfcalendarifdate{#3-#2-#1}{at least=\tc@internshipcommitB+1}{\tccoord@studentFF}{}
+%%%%%% \pgfcalendarifdate{#3-#2-#1}{between=\tc@internshipcommitA+1 and \tc@internshipcommitB}{\tccoord@studentExam{X}}{}
+%%%%%% \expandafter\gdef\csname tc@student\Alph{tc@studentcount}date\endcsname{#1/#2/#3}%
+%%%%%%}
+%%%%%%
+%%%%%%\NewDocumentCommand{\intershipcommitdates}{mm}{%
+%%%%%% \tccoord@commitdatesplit#1,A,%
+%%%%%% \tccoord@commitdatesplit#2,B,%
+%%%%%%}
+%%%%%%
+%%%%%%\def\tccoord@commitdatesplit#1/#2/#3,#4,{
+%%%%%% \expandafter\xdef\csname tc@internshipcommit#4\endcsname{#3-#2-#1}%
+%%%%%% \expandafter\xdef\csname tc@internshipcommit#4#4\endcsname{#1/#2/#3}%
+%%%%%%}
- \vfill%
- \begin{flushright}%
- \tc@city, \tc@publday\ de \tc@publmonth\ de \tc@publyear .%
- \vfill %
-% \vfill%
+\cs_new_protected:Npn \__ufrgscca_checkedbox:
+ { $\checkmark$ }
- $\overline{\text{\tcdef@core@TCCcoord}}$\\%
- \tcdef@core@TCCcoordtitle%
- \vfill
- $\overline{\text{\tcdef@core@coursecoord}}$\\%
- \tcdef@core@coursecoordtitle\\%
- \tcdef@cover@course%
-
- \end{flushright}%
- \vfill%
- \pagebreak%
- }{}%
-}%
-%
-%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% referral fate :: failed or approved as per student grade%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tccoord@referralfate}{m}{\ifthenelse{1 = \fpeval{#1 <= \tc@TCCgradeCN}}{\tcdef@coord@referralfailed}{\tcdef@coord@referralapproved}}%
-%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% TCC referral letters :: approved/failed/FF%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tccoord@TCCreferralletter}{}{%
- \@ifundefined{tc@student\Alph{tc@studentcount}Dismiss}{%
- \tc@formtopbox{\tcdef@forms@formstitle}{\tcdef@coord@TCCperiod}%
-
- \noindent\tcdef@coord@tccreferralopening%
- \vfill%
-
- \@ifundefined{tc@student\Alph{tc@studentcount}FF}{%
- \@ifundefined{tc@student\Alph{tc@studentcount}Exam}{%
- \tccoord@studentgrade{\Alph{tc@studentcount}}%
- \tcdef@coord@referralfatetext%
-
- \vfill%
-
- {\footnotesize%
- \begin{center}%
- \resizebox{\textwidth}{!}{%
- \begin{tabular}{p{\tc@ReportTabA}@{\ }p{\tc@ReportTabB}@{\ }c@{\ }c@{\ }c@{\ }c@{\ }c}%\hline%
- & \tcdef@coord@boardlabel & \tc@TCCpointAlabel & \tc@TCCpointBlabel & \tc@TCCpointClabel &%
- \tcdef@coord@TCCgradesNlabel & \tcdef@coord@TCCgradesClabel\\\hline%
- \tccoord@studentrow{\Alph{tc@studentcount}}%
- \end{tabular}%
- }%
- \end{center}%
- }%
- }{%
- \ifthenelse{\equal{\csname tc@student\Alph{tc@studentcount}Exam\endcsname}{D}}{%
- \tcdef@coord@referralexamfailtext%
- \vfill%
- }{%
- \tcdef@coord@referralexamapprovedtext%
- \vfill%
- }%
- {%%
- \footnotesize%
- \begin{center}%
- \begin{tabular}{p{\tc@ReportTabA}@{\ }p{\tc@ReportTabB}@{\ }c}%\hline%
- & \tcdef@coord@boardlabel \\\hline%
- \multirow{3}{\tc@ReportTabA}{\csname tc@student\Alph{tc@studentcount}\endcsname} %
- &\csname tc@student\Alph{tc@studentcount}@examinerA\endcsname\\%
- &\csname tc@student\Alph{tc@studentcount}@examinerB\endcsname\\%
- &\csname tc@student\Alph{tc@studentcount}@examinerC\endcsname\\%
- \multicolumn{2}{l}{\tcdef@forms@formsadvisorlabel : \csname tc@student\Alph{tc@studentcount}@advisor\endcsname} \\\hline%
- \end{tabular}%
- \end{center}%
- }%
- }%
- }{%
- \tcdef@coord@referralfailFF%
- }%
-
- \vfill%
- \begin{flushright}%
- \tc@city, \tc@publday\ de \tc@publmonth\ de \tc@publyear .%
- \vfill %
-
- \tcdef@core@TCCcoordtitle%
- \vfill%
-
- $\overline{\text{\tcdef@core@TCCcoord}}$%
- \end{flushright}%
- \vfill%
- \pagebreak%
- }{}%
-}%
-%
+\cs_new_protected:Npn \__ufrgscca_uncheckedbox:
+ { $\square$ }
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% TCC-I referral letters :: approved/failed/FF%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tccoord@TCCIreferralletter}{}{%
- \@ifundefined{tc@student\Alph{tc@studentcount}Dismiss}{%
- \tc@formtopbox{\tcdef@forms@formstitleTR}{\tcdef@coord@TCCperiod}%
-
- \noindent\tcdef@coord@tccreferralopening%
- \vfill%
-
- \@ifundefined{tc@student\Alph{tc@studentcount}FF}{%
- \@ifundefined{tc@student\Alph{tc@studentcount}Exam}{%
- \tccoord@studentgradeI{\Alph{tc@studentcount}}%
- \tcdef@coord@referralfatetextTR%
-
- \vfill%
-
- {\footnotesize%
- \begin{center}%
- \resizebox{\textwidth}{!}{%
- \begin{tabular}{p{\tc@ReportTabA}@{\ }p{\tc@ReportTabB}@{\ }c@{\ }c@{\ }c@{\ }c@{\ }c@{\ }c}%\hline%
- & \tcdef@coord@boardlabel & \tc@TCCIpointAlabel & \tc@TCCIpointBlabel & \tc@TCCIpointClabel & \tc@TCCIpointDlabel &%
- \tcdef@coord@TCCgradesNlabel & \tcdef@coord@TCCgradesClabel\\\hline%
- \tccoord@studentrowI{\Alph{tc@studentcount}}%
- \end{tabular}%
- }%
- \end{center}%
- }%
- }{%
- \ifthenelse{\equal{\csname tc@student\Alph{tc@studentcount}Exam\endcsname}{D}}{%
- \tcdef@coord@referralexamfailtextTR%
- \vfill%
- }{%
- \tcdef@coord@referralexamapprovedtextTR%
- \vfill%
- }%
- {%%
- \footnotesize%
- \begin{center}%
- \begin{tabular}{p{\tc@ReportTabA}@{\ }p{\tc@ReportTabB}@{\ }c}%\hline%
- & \tcdef@coord@boardlabel \\\hline%
- \multirow{3}{\tc@ReportTabA}{\csname tc@student\Alph{tc@studentcount}\endcsname} %
- &\csname tc@student\Alph{tc@studentcount}@examinerB\endcsname\\%
- &\csname tc@student\Alph{tc@studentcount}@examinerC\endcsname\\%
- \multicolumn{2}{l}{\tcdef@forms@formsadvisorlabel : \csname tc@student\Alph{tc@studentcount}@advisor\endcsname} \\\hline%
- \end{tabular}%
- \end{center}%
- }%
- }%
- }{%
- \tcdef@coord@referralfailFF%
- }%
-
- \vfill%
- \begin{flushright}%
- \tc@city, \tc@publday\ de \tc@publmonth\ de \tc@publyear .%
- \vfill %
-
- \tcdef@core@TCCIcoordtitle%
- \vfill%
-
- $\overline{\text{\tcdef@core@TCCcoord}}$%
- \end{flushright}%
- \vfill%
- \pagebreak%
- }{}%
-}%
-%
+\cs_generate_variant:Nn \starray_gset_prop:nnn {nne}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% Internship referal letter%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tccoord@internshipreferalletter}{}{%
- \@ifundefined{tc@student\Alph{tc@studentcount}Dismiss}{%
- \tc@formtopbox{\tcdef@forms@formsinternshiptitle}{}%
-
- \noindent\tcdef@coord@internshipreferralopening%
- \vfill%
- \tccoord@internshipstudentgrade{\Alph{tc@studentcount}}
-
- \@ifundefined{tc@student\Alph{tc@studentcount}FF}{%
- \@ifundefined{tc@student\Alph{tc@studentcount}Exam}{%
- \tcdef@coord@internshipreferralfatetext
-
- \vfill%
- \tcdef@coord@internshipgrades%
- }{
- %%% in Exam...
- \ifthenelse{\equal{\csname tc@student\Alph{tc@studentcount}Exam\endcsname}{X}}{%..report past due date
- \ifthenelse{1 = \fpeval{\tccore@@ref{student}{Temp} < \tc@TCCgradeCN}}{%
- \tccoord@studentExam{D}%
- \tcdef@coord@internshipreferralexamfailtext
- \vfill%
- \tcdef@coord@internshipgrades%
- \vfill%
- }{%
- \tccoord@studentExam{C}%
- \tcdef@coord@internshipreferralexamapprovedtext
- \vfill%
- \tcdef@coord@internshipgrades%
- \vfill%
+\NewDocumentCommand{\examinergrades}{mmmO{}}{
+ \tl_if_blank:nTF {#1}
+ { \starray_gset_prop:nnn {student.reviewer}{grade}{0} }
+ {
+ \tl_if_blank:nTF {#4}
+ { %% 3 grades, TCC II
+ \starray_gset_from_keyval:nn {student.reviewer}
+ {
+ pointA = #1 ,
+ pointB = #2 ,
+ pointC = #3 ,
+ gradetype = 2 ,
+ }
+ \starray_gset_prop:nne {student.reviewer}{grade}
+ {%
+ \fpeval{round((#1 * \UseConst{TCC-II.weightA} + #2 * \UseConst{TCC-II.weightB} + #3 * \UseConst{TCC-II.weightC}) / ( \UseConst{TCC-II.weightA} + \UseConst{TCC-II.weightB} + \UseConst{TCC-II.weightC}) , 2 , 1) }
+ }
+ }
+ { %% 4 grades, TCC I
+ \starray_gset_from_keyval:nn {student.reviewer}
+ {
+ pointA = #1 ,
+ pointB = #2 ,
+ pointC = #3 ,
+ pointD = #4 ,
+ gradetype = 1 ,
+ }
+ \starray_gset_prop:nne {student.reviewer}{grade}
+ {%
+ \fpeval{round((#1 * \UseConst{TCC-I.weightA} + #2 * \UseConst{TCC-I.weightB} + #3 * \UseConst{TCC-I.weightC} + #4 * \UseConst{TCC-I.weightD}) / ( \UseConst{TCC-I.weightA} + \UseConst{TCC-I.weightB} + \UseConst{TCC-I.weightC} + \UseConst{TCC-I.weightD}) , 2 , 1) }
+ }
+
}
- }{%%... in Exam due 'report form'
- \ifthenelse{\equal{\csname tc@student\Alph{tc@studentcount}Exam\endcsname}{D}}{%
- \tcdef@coord@internshipreferralexamhardfailtext
- \vfill%
- \tcdef@coord@internshipgrades%
- \vfill%
- }{%
- \tcdef@coord@internshipreferralexamhardapprovedtext
- \vfill%
- \tcdef@coord@internshipgrades%
- \vfill%
- }%
- }
}
- }{
- %%% FF... failed/report not delivered.
- \tcdef@coord@internshipreferralfailFF
- }
+
+}
- \vfill%
+\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}
+
+ \seq_gset_from_clist:cn {l__ufrgscca_#2_seq}{#3}
+ \str_case:nn {#1}
+ {
+ {tcc}
+ {
+ \seq_map_tokens:cn {l__ufrgscca_#2_seq} {\__ufrgscca_grade:n}
+ \seq_map_tokens:cn {l__ufrgscca_#2_seq} {\__ufrgscca_listclassify:nn {#2}}
+ }
+ {tccI}
+ {
+ \seq_map_tokens:cn {l__ufrgscca_#2_seq} {\__ufrgscca_grade:n}
+ \seq_map_tokens:cn {l__ufrgscca_#2_seq} {\__ufrgscca_listclassify:nn {#2}}
+ }
+ {tccII}
+ {
+ \seq_map_tokens:cn {l__ufrgscca_#2_seq} {\__ufrgscca_grade:n}
+ \seq_map_tokens:cn {l__ufrgscca_#2_seq} {\__ufrgscca_listclassify:nn {#2}}
+ }
+ {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}}
+ }
+ }
+}
- \vfill%
-\begin{flushright}%
- \tc@city, \tc@publday\ de \tc@publmonth\ de \tc@publyear .%
- \vfill %
+\cs_new_protected:Npn \__ufrgscca_grade:n #1
+ {
+ \starray_set_iter_from_hash:nn {student}{#1}
+ \starray_term_syntax:n {student[#1]}
+ \bool_if:nF {\starray_parsed_get_prop:n {flag-graded}}
+ { \__ufrgscca_studentgrade: }
+ }
- \tcdef@core@internshipcoordtitle%
- \vfill%
- $\overline{\text{\tcdef@core@internshipcoord}}$%
-\end{flushright}%
-\vfill%
+\cs_new_protected:Npn \__ufrgscca_listclassify:nn #1#2
+ {
+ \starray_set_iter_from_hash:nn {student}{#2}
+ \starray_term_syntax:n {student}
+ \bool_case:nF
+ {
+ {\starray_parsed_get_prop:n {flag-ff}}{\seq_gput_right:cn {l__ufrgscca_#1_ff_seq}{#2}}
+ {\starray_parsed_get_prop:n {flag-dismiss}}{\seq_gput_right:cn {l__ufrgscca_#1_dismiss_seq}{#2}}
+ }
+ {\seq_gput_right:cn {l__ufrgscca_#1_graded_seq}{#2}}
+
+ }
-\pagebreak%
-}{}
+\NewDocumentCommand{\tcreports}{O{}m}{
+ {
+ \__ufrgscca_set_reports:n {#1}
+ \seq_gset_eq:Nc \l__ufrgscca_baselist_seq {l__ufrgscca_#2_seq}
+ \seq_gset_eq:Nc \l__ufrgscca_baselist_ff_seq {l__ufrgscca_#2_ff_seq}
+ \seq_gset_eq:Nc \l__ufrgscca_baselist_dismiss_seq {l__ufrgscca_#2_dismiss_seq}
+ \seq_gset_eq:Nc \l__ufrgscca_baselist_graded_seq {l__ufrgscca_#2_graded_seq}
+
+ \bool_if:NT \l__ufrgscca_calendarI_bool
+ { \MakeForm{calendar-I} }
+ \bool_if:NT \l__ufrgscca_calendarII_bool
+ { \MakeForm{calendar-II} }
+ \bool_if:NT \l__ufrgscca_reportI_bool
+ { \MakeForm{report-I} }
+ \bool_if:NT \l__ufrgscca_reportII_bool
+ { \MakeForm{report-II} }
+ \bool_if:NT \l__ufrgscca_checklistI_bool
+ { \MakeForm{checklist-I} }
+ \bool_if:NT \l__ufrgscca_checklistII_bool
+ { \MakeForm{checklist-II} }
+ \bool_if:NT \l__ufrgscca_boards_bool
+ { \MakeForm{boards} }
+ \seq_map_inline:cn {l__ufrgscca_baselist_seq}
+ {
+ \studentselect{##1}
+ \bool_if:NT \l__ufrgscca_cocertificate_bool
+ {
+ \studentCoadvCase
+ {\MakeForm{cocertificate}}
+ {}
+ }
+ \bool_if:NT \l__ufrgscca_referralI_bool
+ {
+ \studentDismissCase
+ {}
+ { \MakeForm{referral-I} }
+ }
+ \bool_if:NT \l__ufrgscca_revformsI_bool
+ {
+ \SetReviewer{2}
+ \MakeForm{examinersform-I}
+ \SetReviewer{3}
+ \MakeForm{examinersform-I}
+ \MakeForm{rectifyapproval-I}
+ }
+ \bool_if:NT \l__ufrgscca_referralII_bool
+ {
+ \MakeForm{referral-II}
+ }
+ \bool_if:NT \l__ufrgscca_revformsII_bool
+ {
+ \SetReviewer{1}
+ \MakeForm{examinersform-II}
+ \MakeForm{correctionsform-II}
+ \SetReviewer{2}
+ \MakeForm{examinersform-II}
+ \MakeForm{correctionsform-II}
+ \SetReviewer{3}
+ \MakeForm{examinersform-II}
+ \MakeForm{correctionsform-II}
+ \MakeForm{rectifyapproval-II}
+ }
+ }
+ }
}
-%
-%
-%
+\prop_new:N \l__ufrgscca_check_prop
+\prop_new:N \l__ufrgscca_checkA_prop
+\prop_new:N \l__ufrgscca_checkB_prop
+\prop_new:N \l__ufrgscca_checkref_prop
+\NewDocumentCommand{\checkdef}{mmm}{
+ \starray_get_prop:nnN {activity}{chkmarked}\l__ufrgscca_check_prop
+ \prop_gput:Nnn \l__ufrgscca_check_prop {#1}{\__ufrgscca_checkedbox:~\ #3}
+ \starray_gset_prop:nnV {activity}{chkmarked}\l__ufrgscca_check_prop
-\NewDocumentCommand{\tccoord@calendarfill}{}{%
-%
- \@ifundefined{tc@tcccalendareventdateh}{\tcccalendareventdate{---}}{}%
- \@ifundefined{tc@tcccalendareventdateh}{\tcccalendareventdate{---}}{}%
- \@ifundefined{tc@tcccalendareventdateh}{\tcccalendareventdate{---}}{}%
- \@ifundefined{tc@tcccalendareventdateh}{\tcccalendareventdate{---}}{}%
- \@ifundefined{tc@tcccalendareventdateh}{\tcccalendareventdate{---}}{}%
- \@ifundefined{tc@tcccalendareventdateh}{\tcccalendareventdate{---}}{}%
- \@ifundefined{tc@tcccalendareventdateh}{\tcccalendareventdate{---}}{}%
- \@ifundefined{tc@tcccalendareventdateh}{\tcccalendareventdate{---}}{}%
+ \starray_get_prop:nnN {activity}{chkunmarked}\l__ufrgscca_check_prop
+ \prop_gput:Nnn \l__ufrgscca_check_prop {#1}{\__ufrgscca_uncheckedbox:~\ #3}
+ \starray_gset_prop:nnV {activity}{chkunmarked}\l__ufrgscca_check_prop
+
+ \starray_get_prop:nnN {activity}{chkref}\l__ufrgscca_check_prop
+ \prop_gput:Nnn \l__ufrgscca_check_prop {#2}{#1}
+ \starray_gset_prop:nnV {activity}{chkref}\l__ufrgscca_check_prop
}
+\cs_generate_variant:Nn \prop_gput:Nnn {Nee}
-\NewDocumentCommand{\setstudentlist}{mm}{\tcgen@cdef<coord>{list#1}{#2}}
-\NewDocumentCommand{\tcreports}{O{}m}{%%
- \setreports{#1}
- \tccoord@calendarfill%
- \iftcif@coord@calendarI%
- \tccoord@TCCcalendarI%
- \fi%
- \iftcif@coord@calendarII%
- \tccoord@TCCcalendarII%
- \fi%
- \@ifundefined{tcdef@coord@list#2}{}{%
- \expandafter\expandafter\expandafter\forcsvlist\expandafter\expandafter\expandafter\tccoord@student@exec\expandafter\expandafter\expandafter{\csname tcdef@coord@list#2\endcsname}
- }
- \iftcif@coord@checklist%
- \tccoord@TCCchecklist%
- \fi%
- \iftcif@coord@reportI%
- \tccoord@TCCIreport%
- \fi%
- \iftcif@coord@report%
- \tccoord@TCCreport%
- \fi%
- \iftcif@coord@boards%
- \tccoord@TCCboards%
- \fi%
- \iftcif@coord@studentlist%
- \tccoord@studentlistform%
- \fi%
-}%%
-
-
-\NewDocumentCommand{\internshipreports}{O{}m}{%%
- \setreports{#1}
- \@ifundefined{tcdef@coord@list#2}{}{%
- \expandafter\expandafter\expandafter\forcsvlist\expandafter\expandafter\expandafter\tccoord@student@exec\expandafter\expandafter\expandafter{\csname tcdef@coord@list#2\endcsname}
+\tl_new:N \l__ufrgscca_checkB_tl
+\tl_new:N \l__ufrgscca_checkref_tl
+\NewDocumentCommand{\checklist}{O{}m}{
+ \tl_if_blank:nF {#1}
+ { \starray_set_iter_from_hash:nn {activity}{#1} }
+ \starray_get_prop:nnN {student}{checklist}\l__ufrgscca_check_prop
+ \starray_get_prop:nnN {activity}{chkmarked}\l__ufrgscca_checkB_prop
+ \starray_get_prop:nnN {activity}{chkref}\l__ufrgscca_checkref_prop
+ \clist_map_inline:nn {#2}
+ {
+ \prop_get:NnNT \l__ufrgscca_checkref_prop {##1} \l__ufrgscca_checkref_tl
+ {
+ \prop_get:NeN \l__ufrgscca_checkB_prop {\l__ufrgscca_checkref_tl} \l__ufrgscca_checkB_tl
+ \prop_gput:Nee \l__ufrgscca_check_prop {\l__ufrgscca_checkref_tl} {\l__ufrgscca_checkB_tl}
+ }
}
- \iftcif@coord@checklist%
- \tccoord@TCCchecklist%
- \fi%
- \iftcif@coord@report%
- \tccoord@TCCreport%
- \fi%
-}%%
-
+ \starray_gset_prop:nnV {student}{checklist}{\l__ufrgscca_check_prop}
+}
-%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%
-%
-\iftcif@english%
-\input{ufrgscca-en-coord.def}%
-\else%
-\input{ufrgscca-ptBR-coord.def}%
-\fi%
+\prop_new:N \l__ufrgscca_check_list_prop
+\tl_new:N \l__ufrgscca_tmpx_tl
+\tl_new:N \l__ufrgscca_tmpy_tl
+\tl_new:N \l__ufrgscca_table_tl
+
+
+\cs_new_protected:Npn \__ufrgscca_checktable_lines:nn #1#2 {
+ \starray_get_prop:nnN {activity} {chkunmarked} \l__ufrgscca_checkA_prop
+ \starray_get_prop:nnN {student}{checklist}\l__ufrgscca_check_prop
+
+ \prop_map_inline:Nn \l__ufrgscca_check_prop
+ { \prop_gput:Nnn \l__ufrgscca_checkA_prop {##1}{##2} }
+
+ \tl_gclear:N \l__ufrgscca_table_tl
+ \clist_map_inline:nn {#1}
+ {
+ \tl_gclear:N \l_tmpa_tl
+ \clist_map_inline:nn {#2}
+ {
+ \tl_gset:Nn \l__ufrgscca_tmpx_tl {##1####1}
+ \prop_get:NeNTF \l__ufrgscca_checkA_prop {\l__ufrgscca_tmpx_tl} \l__ufrgscca_tmpy_tl
+ {\tl_gput_right:Ne \l__ufrgscca_table_tl {\l_tmpa_tl~ \l__ufrgscca_tmpy_tl}}
+ {\tl_gput_right:Ne \l__ufrgscca_table_tl {\l_tmpa_tl~ }}
+ \tl_gset:Nn \l_tmpa_tl {~&~}
+ }
+ \tl_put_right:Nn \l__ufrgscca_table_tl {\\*}
+ }
+ \l__ufrgscca_table_tl
+}
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-core.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-core.sty
index 43aed0aede..1972c1d250 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 1.12 (2023/09/23)
+%% This is version {2.0} {2023/11/23}
%%
%% The list of files that compose this work can be found in the README.md file at
%% https://ctan.org/pkg/ufrgscca
@@ -23,288 +23,573 @@
%% CCA stands for "Control and Automation Engineering Course" (Portuguese acronym)
%%%==============================================================================
\NeedsTeXFormat{LaTeX2e}[2022/06/01]
-\def\tc@tmp@packname{ufrgscca-core}
-\def\tc@tmp@altpackname{ufrgsccacore}
-\def\tc@tmp@packdesc{UFRGS/CCA core commands}
-\def\tc@tmp@packdate{2023/09/23}
-\def\tc@tmp@packversion{1.12}
-\let\@exp\expandafter
-\@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion}
-\@exp\@exp\@exp\ProvidesPackage\@exp\@exp\@exp{\@exp\tc@tmp@packname\@exp}\@exp[\tc@tmp@packdate\space v\tc@tmp@packversion\space\tc@tmp@packdesc]
+
+
+\ProvidesExplPackage
+ {ufrgscca-core}
+ {2023/11/23}
+ {2.0}
+ {UFRGS/CCA core commands}
+
+
+%%%%%%%
+%%%
+%%% Just an attempt of having my packages info in a regular way
+%%% Idea being: { <pck-name> / pkg info } for each and all.
+%%%
+%%%%%%%
+\keys_define:nn { ufrgscca-core / pkg info}
+ {
+ name .code:n = {ufrgscca-core} ,
+ prefix .code:n = {ufrgscca} ,
+ date .code:n = {2023/11/23},
+ version .code:n = {2.0} ,
+ description .code:n = {UFRGS/CCA~core~commands/data}
+ }
+\cs_if_exist:NF \__codedesc_pkg_info:nn
+ {
+ \cs_new_protected:Npn \__codedesc_pkg_info:nn #1#2
+ { \keys_set:nn {#1 / pkg info}{#2} }
+ }
+\cs_if_exist:NF \PkgInfo
+ { \NewDocumentCommand \PkgInfo {mm} { \keys_set:nn {#1 / pkg info}{#2} } }
+\cs_if_exist:NF \PkgDescription
+ {
+ \NewDocumentCommand \PkgDescription {m}
+ {
+ \noindent Package~ \textbf{\PkgInfo{#1}{name}}~Version:~\PkgInfo{#1}{version}~ -~ \PkgInfo{#1}{date}\par \emph{\PkgInfo{#1}{description}}~\par
+ }
+ }
+%%%%%%%
+%%% End of cut-n-paste
+%%%%%%%
+
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
-% student commands%
+% starray based student commands%
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-%
-\NewDocumentCommand{\tccore@articledefx}{mmmmm}{%
- \expandafter\gdef\csname #1article\endcsname{#2}%
- \expandafter\gdef\csname #1narticle\endcsname{#3}%
- \expandafter\gdef\csname #1Article\endcsname{#4}%
- \expandafter\gdef\csname #1Narticle\endcsname{#5}%
-}%
-\NewDocumentCommand{\tccore@articledefn}{m}{%
- \tccore@articledefx{#1}{o(a)}{(a)}{O(A)}{(A)}%
-}%
-\NewDocumentCommand{\tccore@articledefm}{m}{%
- \tccore@articledefx{#1}{o}{}{O}{}%
-}%
-\NewDocumentCommand{\tccore@articledeff}{m}{%
- \tccore@articledefx{#1}{a}{a}{A}{A}%
-}%
-\NewDocumentCommand{\tccore@articledef}{mm}{%
- \ifthenelse{\equal{#2}{m}}{%%
- \tccore@articledefm{#1}%%
- }{%%
- \ifthenelse{\equal{#2}{f}}{%%
- \tccore@articledeff{#1}%%
- }{%%
- \tccore@articledefn{#1}%%
- }%%
- }%%
-}%
+%%%%\def\tc@IDrule{30mm}%
+%%%%\def\tc@emailrule{40mm}%
+%%%%\def\tc@namerule{50mm}%
+%%%%\def\tc@titlerule{40mm}%
+%%%%\def\tc@phonerule{20mm}%
+%%%%\def\tc@agreerule{25mm}%
+%%%%\def\tc@daterule{15mm}%
-%
-% Exception:: those are only used at ufrgscca-forms, but, it make sense to be used at 'local.tex'
-%
-\cmdfactory<core>{formlocal}
-\cmdfactory<core>{tccbrief,tcccoadvisorbrief,tccadvisorsreview}
-\cmdfactory<core>{tccArgument}
-
-\cmdfactory<core>{TCCcoordtitle,TCCIcoordtitle}
-\NewDocumentCommand{\TCCcoord}{mO{}}{%
- \tcgen@cdef<core>{TCCcoord}{#1}%
- \tccore@articledef{tcdef@core@TCCcoord}{#2}%%
+\dim_new:N \l__ufrgscca_ID_rule_dim
+\dim_new:N \l__ufrgscca_email_rule_dim
+\dim_new:N \l__ufrgscca_name_rule_dim
+\dim_new:N \l__ufrgscca_title_rule_dim
+\dim_new:N \l__ufrgscca_worktitle_rule_dim
+\dim_new:N \l__ufrgscca_phone_rule_dim
+\dim_new:N \l__ufrgscca_agree_rule_dim
+\dim_new:N \l__ufrgscca_date_rule_dim
+\dim_new:N \l__ufrgscca_register_rule_dim
+\dim_new:N \l__ufrgscca_office_rule_dim
+\dim_new:N \l__ufrgscca_field_rule_dim
+
+\dim_set:Nn \l__ufrgscca_ID_rule_dim {30mm}
+\dim_set:Nn \l__ufrgscca_email_rule_dim {40mm}
+\dim_set:Nn \l__ufrgscca_name_rule_dim {50mm}
+\dim_set:Nn \l__ufrgscca_title_rule_dim {30mm}
+\dim_set:Nn \l__ufrgscca_worktitle_rule_dim {60mm}
+\dim_set:Nn \l__ufrgscca_phone_rule_dim {20mm}
+\dim_set:Nn \l__ufrgscca_agree_rule_dim {25mm}
+\dim_set:Nn \l__ufrgscca_date_rule_dim {15mm}
+\dim_set:Nn \l__ufrgscca_register_rule_dim {20mm}
+\dim_set:Nn \l__ufrgscca_office_rule_dim {25mm}
+\dim_set:Nn \l__ufrgscca_field_rule_dim {30mm}
+
+
+
+
+\starray_new:n {student}
+\starray_def_from_keyval:nn {student}
+ {
+ first = ,
+ last = ,
+ name = \rule{\l__ufrgscca_name_rule_dim}{.1pt} ,
+ Nproc = \rule{\l__ufrgscca_ID_rule_dim}{.1pt} ,
+ ID = \rule{\l__ufrgscca_ID_rule_dim}{.1pt} ,
+ email = \rule{\l__ufrgscca_email_rule_dim}{.1pt} ,
+ worktitle = \rule{\l__ufrgscca_worktitle_rule_dim}{.1pt} ,
+ article = o(a) ,
+ Article = O(A) ,
+ narticle = (a) ,
+ Narticle = (A) ,
+ carticle = ao(à) ,
+ Carticle = Ao(À) ,
+ remarks = ,
+ 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} ,
+ gradeavrg = 0,
+ grade = ,
+ flag-graded = \c_false_bool , %%% IF gradeavrg AND finalgrade already calculated (or defined)
+ flag-exam = \c_false_bool ,
+ flag-ff = \c_false_bool ,
+ flag-dismiss = \c_false_bool , %%% IF it was the 1st semester.
+ flag-newpage = \c_false_bool , %% if it should go in a new page (board)
+ flag-distinctboard = \c_false_bool , %% if advisor isn't in the board
+ flag-approved = \c_false_bool ,
+ flag-coadvisor = \c_false_bool ,
+ advisor . struct = {
+ first = ,
+ last = ,
+ name = \rule{\l__ufrgscca_name_rule_dim}{.1pt},
+ institution = \rule{\l__ufrgscca_name_rule_dim}{.1pt},
+ title = \rule{\l__ufrgscca_title_rule_dim}{.1pt} ,
+ email = \rule{\l__ufrgscca_email_rule_dim}{.1pt} ,
+ phone = \rule{\l__ufrgscca_phone_rule_dim}{.1pt} ,
+ article = o(a) ,
+ Article = O(A) ,
+ narticle = (a) ,
+ Narticle = (A) ,
+ carticle = ao(à) ,
+ Carticle = Ao(À) ,
+ assessment = \BlankLines{6}
+ } ,
+ coadvisor . struct = {
+ first = ,
+ last = ,
+ name = \rule{\l__ufrgscca_name_rule_dim}{.1pt},
+ institution = \rule{\l__ufrgscca_name_rule_dim}{.1pt},
+ title = \rule{\l__ufrgscca_title_rule_dim}{.1pt} ,
+ email = \rule{\l__ufrgscca_email_rule_dim}{.1pt} ,
+ phone = \rule{\l__ufrgscca_phone_rule_dim}{.1pt} ,
+ article = o(a) ,
+ Article = O(A) ,
+ narticle = (a) ,
+ Narticle = (A) ,
+ carticle = ao(à) ,
+ Carticle = Ao(À) ,
+ reason = \BlankLines{6}
+ } ,
+ reviewer . struct = {
+ first = ,
+ last = ,
+ name = \rule{\l__ufrgscca_name_rule_dim}{.1pt},
+ institution = \rule{\l__ufrgscca_name_rule_dim}{.1pt},
+ title = \rule{\l__ufrgscca_title_rule_dim}{.1pt} ,
+ email = \rule{\l__ufrgscca_email_rule_dim}{.1pt} ,
+ phone = \rule{\l__ufrgscca_phone_rule_dim}{.1pt} ,
+ article = o(a) ,
+ Article = O(A) ,
+ narticle = (a) ,
+ Narticle = (A) ,
+ carticle = ao(à) ,
+ Carticle = Ao(À) ,
+ pointA = ,
+ pointB = ,
+ pointC = ,
+ pointD = ,
+ grade = 0 ,
+ gradetype = ,
+ } ,
+ altreviewer . struct = {
+ first = ,
+ last = ,
+ name = \rule{\l__ufrgscca_name_rule_dim}{.1pt},
+ institution = \rule{\l__ufrgscca_name_rule_dim}{.1pt},
+ title = \rule{\l__ufrgscca_title_rule_dim}{.1pt} ,
+ email = \rule{\l__ufrgscca_email_rule_dim}{.1pt} ,
+ phone = \rule{\l__ufrgscca_phone_rule_dim}{.1pt} ,
+ article = o(a) ,
+ Article = O(A) ,
+ narticle = (a) ,
+ Narticle = (A) ,
+ carticle = ao(à) ,
+ Carticle = Ao(À)
+ } ,
+ internship . struct = {
+ company = \rule{\l__ufrgscca_name_rule_dim}{.1pt},
+ field = \rule{\l__ufrgscca_field_rule_dim}{.1pt},
+ start = \rule{\l__ufrgscca_date_rule_dim}{.1pt},
+ end = \rule{\l__ufrgscca_date_rule_dim}{.1pt},
+ length = \rule{\l__ufrgscca_date_rule_dim}{.1pt},
+ } ,
+ tutor . struct = {
+ first = ,
+ last = ,
+ name = \rule{\l__ufrgscca_name_rule_dim}{.1pt},
+ title = \rule{\l__ufrgscca_title_rule_dim}{.1pt} ,
+ email = \rule{\l__ufrgscca_email_rule_dim}{.1pt} ,
+ phone = \rule{\l__ufrgscca_phone_rule_dim}{.1pt} ,
+ article = o(a) ,
+ Article = O(A) ,
+ narticle = (a) ,
+ Narticle = (A) ,
+ carticle = ao(à) ,
+ Carticle = Ao(À)
+ } ,
+ supervisor . struct = {
+ first = ,
+ last = ,
+ name = \rule{\l__ufrgscca_name_rule_dim}{.1pt},
+ register = \rule{\l__ufrgscca_name_rule_dim}{.1pt},
+ title = \rule{\l__ufrgscca_title_rule_dim}{.1pt} ,
+ office = \rule{\l__ufrgscca_office_rule_dim}{.1pt} ,
+ email = \rule{\l__ufrgscca_email_rule_dim}{.1pt} ,
+ phone = \rule{\l__ufrgscca_phone_rule_dim}{.1pt} ,
+ article = o(a) ,
+ Article = O(A) ,
+ narticle = (a) ,
+ Narticle = (A) ,
+ carticle = ao(à) ,
+ Carticle = Ao(À)
+ } ,
+ }
+
+
+\prop_new:N \l__ufrgscca_forms_prop
+\starray_new:n {activity}
+\starray_def_from_keyval:nn {activity}
+ {
+ name = Nome~ da~ Atividade ,
+ acronym = ACRO ,
+ coord . struct =
+ {
+ name = Nome~ do(a)~ Coordenador(a) ,
+ title = Coordenador(a)~ de ,
+ article = o(a) ,
+ Article = O(A) ,
+ narticle = (a) ,
+ Narticle = (A) ,
+ carticle = ao(à) ,
+ Carticle = Ao(À)
+ } ,
+ calendar . struct =
+ {
+ date = {-Dia-} ,
+ week = {-semana-} ,
+ event = {-Descrição-} ,
+ } ,
+ chkmarked = , %%% This shall be a prop list of marked itens
+ chkunmarked = , %%% This shall be a prop list of unmarked itens
+ chkref = , %%% This shall be a prop list of ref itens
+ }
+
+\NewDocumentCommand{\NewActivity}{m} {
+ \starray_new_term:nn {activity}{#1}
+ \starray_new_term:nn {activity.coord}{}
+ \starray_gset_prop:nnV {activity}{checkmarked}\c_empty_prop
+ \starray_gset_prop:nnV {activity}{checkunmarked}\c_empty_prop
+ \starray_gset_prop:nnV {activity}{checkref}\c_empty_prop
}
-\cmdfactory<core>{internshipcoordtitle}
-\NewDocumentCommand{\internshipcoord}{mO{}}{%
- \tcgen@cdef<core>{internshipcoord}{#1}%
- \tccore@articledef{tcdef@core@internshipcoord}{#2}%%
+
+\NewDocumentCommand{\ActivitySet}{O{}mm} {
+ \tl_if_blank:nTF {#1}
+ {
+ \starray_set_prop:nnn {activity}{name}{#3}
+ \starray_set_prop:nnn {activity}{acronym}{#2}
+ }
+ {
+ \starray_set_prop:nnn {activity[#1]}{name}{#3}
+ \starray_set_prop:nnn {activity[#1]}{acronym}{#2}
+ }
+}
+
+\NewDocumentCommand{\ActivitySetCoordTitle}{O{}m} {
+ \tl_if_blank:nTF {#1}
+ { \starray_set_prop:nnn {activity.coord}{title}{#2} }
+ { \starray_set_prop:nnn {activity[#1].coord}{title}{#2} }
}
-\cmdfactory<core>{coursecoordtitle}%
-\NewDocumentCommand{\coursecoord}{mO{}}{%
- \tcgen@cdef<core>{coursecoord}{#1}%
- \tccore@articledef{tcdef@core@coursecoord}{#2}%%
+\NewDocumentCommand{\ActivitySetCoord}{O{}mO{}}{
+ \tl_if_blank:nTF {#1}
+ {
+ \starray_gset_prop:nnn {activity.coord}{name}{#2}
+ \__ufrgscca_setgender:nn {activity.coord}{#3}
+ }
+ {
+ \starray_gset_prop:nnn {activity[#1].coord}{name}{#2}
+ \__ufrgscca_setgender:nn {activity[#1].coord}{#3}
+ }
}
+
+\NewDocumentCommand{\ActivitySelect}{m}{ \starray_set_iter_from_hash:nn {activity}{#1} }
+
+
+\NewDocumentCommand{\Activity}{O{}m}{
+ \tl_if_blank:nTF {#1}
+ { \starray_get_prop:nn {activity}{#2} }
+ { \starray_get_prop:nn {activity[#1]}{#2} }
+}
+\NewDocumentCommand{\ActivityCoord}{O{}m}{
+ \tl_if_blank:nTF {#1}
+ { \starray_get_prop:nn {activity.coord}{#2} }
+ { \starray_get_prop:nn {activity[#1].coord}{#2} }
+}
+
+
+\NewDocumentCommand{\ActivityCalLine}{O{}m}{
+ \tl_if_blank:nF {#1}
+ {\starray_set_iter_from_hash:nn {activity}{#1}}
+ \starray_set_iter_from_hash:nn {activity.calendar}{#2}
+ \starray_get_prop:nn {activity.calendar}{date} & \starray_get_prop:nn {activity.calendar}{week} & \starray_get_prop:nn {activity.calendar}{event}
+}
+
+
%
-%
-\def\tccore@ref@advisor{tc@student\Alph{tc@studentcount}@advisor}
-\def\tccore@ref@coadvisor{tc@student\Alph{tc@studentcount}@coadvisor}
-\def\tccore@ref@tutor{tc@student\Alph{tc@studentcount}@tutor}
-\def\tccore@ref@supervisor{tc@student\Alph{tc@studentcount}@supervisor}
-\def\tccore@ref@internship{tc@student\Alph{tc@studentcount}@internship}
-
-\NewDocumentCommand{\tccore@examiners}{m}{\def\tc@@examiners{tc@student\Alph{tc@studentcount}@#1}}%
-\def\tccore@ref@examiner{\tc@@examiners}
-\def\tccore@ref@student{tc@student\Alph{tc@studentcount}}
-\def\tccore@ref@coursecoord{tcdef@core@coursecoord}
-\def\tccore@ref@TCCcoord{tcdef@core@TCCcoord}
-\def\tccore@ref@internshipcoord{tcdef@core@internshipcoord}
-
-\NewDocumentCommand{\tccore@@ref}{mm}{\expandafter\csname\csname tccore@ref@#1\endcsname#2\endcsname}%
-%
-%
-\let\tc@org@author\author
-%
-\newcounter{tc@studentcount}%
-\RenewDocumentCommand{\author}{mmO{}}{%
- \stepcounter{tc@studentcount}%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}last\endcsname{#1}%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}first\endcsname{#2}%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}\endcsname{#2 #1}%
- \tccore@articledef{tc@student\Alph{tc@studentcount}}{#3}%%
-}%
-%
-\NewDocumentCommand{\authorinfo}{O{}mm}{%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}Nproc\endcsname{#1}%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}ID\endcsname{#2}%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}email\endcsname{#3}%
-}%
-\NewDocumentCommand{\student}{mmO{}}{\author{#1}{#2}[#3]}%
-\NewDocumentCommand{\studentinfo}{O{}mm}{\authorinfo[#1]{#2}{#3}}%
-%----------
-%----------
-%
-\NewDocumentCommand{\tccore@ProfFields}{mmmmm}{%%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}@#1last\endcsname{#3}%%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}@#1first\endcsname{#4}%%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}@#1\endcsname{#2~#4 #3}%%
- \tccore@articledef{tc@student\Alph{tc@studentcount}@#1}{#5}%
+\cs_new_protected:Npn \__ufrgscca_setgender:nn #1#2
+ {
+ \str_if_eq:nnT {#2}{m}
+ {
+ \starray_gset_from_keyval:nn {#1}
+ {
+ article = o ,
+ Article = O ,
+ narticle = ,
+ Narticle = ,
+ carticle = ao ,
+ Carticle = Ao
+ }
+ }
+ \str_if_eq:nnT {#2}{f}
+ {
+ \starray_gset_from_keyval:nn {#1}
+ {
+ article = a ,
+ Article = A ,
+ narticle = a ,
+ Narticle = A ,
+ carticle = à ,
+ Carticle = À
+ }
+ }
+ }
+
+
+\NewDocumentCommand{\student}{O{}mmO{}}{%
+ \tl_if_blank:nTF {#1}
+ {\starray_new_term:nn {student}{}}
+ {\starray_new_term:nn {student}{#1}}
+ \starray_gset_from_keyval:nn {student}
+ {
+ first = {#3} ,
+ last = {#2} ,
+ name = {#3~ #2} ,
+ }
+ \__ufrgscca_setgender:nn {student}{#4}
+ \starray_gset_prop:nnV {student}{checklist}\c_empty_prop
}%
-\NewDocumentCommand{\tccore@ProfInfo}{mmmmm}{%%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}@#1institution\endcsname{#2}%%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}@#1titleinfo\endcsname{#3}%%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}@#1email\endcsname{#4}%%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}@#1phone\endcsname{#5}%%
+ %
+\NewDocumentCommand{\eDataSet}{m}{
+ \starray_term_syntax:n{#1}
+}
+
+\cs_new:Npn \eDataFields #1
+ { \starray_parsed_get_prop:n{#1} }
+
+
+\NewDocumentCommand{\DataFields}{mm}{
+ \starray_get_prop:nn{#1}{#2}
+}
+\NewDocumentCommand{\SetReviewer}{m}{
+ \starray_set_iter:nn {student.reviewer}{#1}
+}
+ %
+
+\NewDocumentCommand{\studentCoadvCase}{mm}{
+ \starray_term_syntax:n{student}
+ \bool_if:nTF {\starray_parsed_get_prop:n{flag-coadvisor}}
+ {#1}
+ {#2}
+}
+
+
+
+\NewDocumentCommand{\distinctboard}{}{
+ \starray_gset_prop:nnn {student}{flag-distinctboard}{\c_true_bool}
+}
+
+\NewDocumentCommand{\studentDistinctBoardCase}{mm}
+ {
+ \starray_term_syntax:n{student}
+ \bool_if:nTF {\starray_parsed_get_prop:n{flag-distinctboard}}
+ {#1}
+ {#2}
+ }
+
+
+\NewDocumentCommand{\studentiterate}{m}{
+ \starray_iterate_over:nn{student}{#1}
+}
+
+
+\NewDocumentCommand{\worktitle}{m}{%%
+ \starray_gset_prop:nnn {student}{worktitle}{#1}
+}
+
+\NewDocumentCommand{\workbrief}{m}{
+ \starray_gset_prop:nnn {student}{brief}{#1}
+}
+
+\NewDocumentCommand{\workchange}{m}{
+ \starray_gset_prop:nnn {student}{reason}{#1}
+}
+
+\NewDocumentCommand{\advisorreview}{m}{
+ \starray_gset_prop:nnn {student.advisor}{assessment}{#1}
+}
+
+\NewDocumentCommand{\coadvisorreason}{m}{
+ \starray_gset_prop:nnn {student.coadvisor}{reason}{#1}
+}
+
+
+
+\NewDocumentCommand{\studentinfo}{O{}mm}{%
+ \starray_gset_from_keyval:nn {student}
+ {
+ Nproc = {#1} ,
+ ID = {#2} ,
+ email = {#3} ,
+ }
}%
-%
-%
-%
-\newcounter{tc@examinercount}[tc@studentcount]%
-%
+
+
+\bool_if:NT \l__ufrgscca_oldrenews_bool
+ {
+ \RenewDocumentCommand{\author}{O{}mmO{}}{\student[#1]{#2}{#3}[#4]}%
+ \NewDocumentCommand{\authorinfo}{O{}mm}{\studentinfo[#1]{#2}{#3}}%
+ \NewDocumentCommand{\title}{m}{\worktitle{#1}}%
+ }
+
+
+\NewDocumentCommand{\studentselect}{m}{ \starray_set_iter_from_hash:nn {student}{#1} }
+
+\cs_new_protected:Npn \__ufrgscca_set_prof:nnnnn #1#2#3#4#5
+ {
+ \starray_gset_from_keyval:nn {student.#1}
+ {
+ last = {#3} ,
+ first = {#4} ,
+ name = {#2~#4~ #3} ,
+ }
+ \__ufrgscca_setgender:nn {student.#1}{#5}
+ }
+
+
+\cs_new_protected:Npn \__ufrgscca_set_prof_info:nnnnn #1#2#3#4#5
+ {
+ \starray_gset_from_keyval:nn {student.#1}
+ {
+ institution = {#2} ,
+ title = {#3} ,
+ email = {#4} ,
+ phone = {#5} ,
+ }
+ }
+
+
\NewDocumentCommand{\advisor}{O{}mmO{}}{%%
- \tccore@ProfFields{advisor}{#1}{#2}{#3}{#4}%%
-%%% the advisor is also the first examiner if not @nBoard%
- \@ifundefined{tc@nBoard}{\examiner[#1]{#2}{#3}[#4]}{}%%
-}%
+ \starray_new_term:nn {student.advisor}{}
+ \__ufrgscca_set_prof:nnnnn {advisor}{#1}{#2}{#3}{#4}
+ \starray_term_syntax:n{student}
+ \bool_if:nF {\starray_parsed_get_prop:n{flag-distinctboard}}
+ { \examiner[#1]{#2}{#3}[#4] }
+}
+
\NewDocumentCommand{\advisorinfo}{mmmm}{%%
- \tccore@ProfInfo{advisor}{#1}{#2}{#3}{#4}%%
-%%% the advisor is also the first examiner if not @nBoard%
- \@ifundefined{tc@nBoard}{\examinerinfo{#1}{#2}{#3}{#4}}{}%%
+ \__ufrgscca_set_prof_info:nnnnn {advisor}{#1}{#2}{#3}{#4}
+ \starray_term_syntax:n{student}
+ \bool_if:nF {\starray_parsed_get_prop:n{flag-distinctboard}}
+ { \examinerinfo{#1}{#2}{#3}{#4} }
}%
-%
+
+
\NewDocumentCommand{\coadvisor}{O{}mmO{}}{%%
- \tccore@ProfFields{coadvisor}{#1}{#2}{#3}{#4}%%
+ \starray_new_term:nn {student.coadvisor}{}
+ \__ufrgscca_set_prof:nnnnn {coadvisor}{#1}{#2}{#3}{#4}
+ \starray_set_prop:nnn {student}{flag-coadvisor}{\c_true_bool}
}%
+
\NewDocumentCommand{\coadvisorinfo}{mmmm}{%%
- \tccore@ProfInfo{coadvisor}{#1}{#2}{#3}{#4}%%
+ \__ufrgscca_set_prof_info:nnnnn {coadvisor}{#1}{#2}{#3}{#4}
}%
-%
-%
+
+
+\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{}}{%%
- \tccore@ProfFields{tutor}{#1}{#2}{#3}{#4}%%
+ \starray_new_term:nn {student.tutor}{}
+ \__ufrgscca_set_prof:nnnnn {tutor}{#1}{#2}{#3}{#4}
}%
+
\NewDocumentCommand{\tutorinfo}{mmmm}{%%
- \tccore@ProfInfo{tutor}{#1}{#2}{#3}{#4}%%
+ \__ufrgscca_set_prof_info:nnnnn {tutor}{#1}{#2}{#3}{#4}
}%
-%
-%
+
\NewDocumentCommand{\supervisor}{O{}mmO{}}{%%
- \tccore@ProfFields{supervisor}{#1}{#2}{#3}{#4}%%
+ \starray_new_term:nn {student.supervisor}{}
+ \__ufrgscca_set_prof:nnnnn {supervisor}{#1}{#2}{#3}{#4}
}%
\NewDocumentCommand{\supervisorinfo}{mmmm}{%%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}@supervisorregister\endcsname{#1}%%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}@supervisoroffice\endcsname{#2}%%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}@supervisoremail\endcsname{#3}%%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}@supervisorphone\endcsname{#4}%%
+ \starray_gset_from_keyval:nn {student.supervisor}
+ {
+ register = {#1} ,
+ office = {#2} ,
+ email = {#3} ,
+ phone = {#4} ,
+ }
}%
\NewDocumentCommand{\internship}{mmmmm}{%%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}@internshipcompany\endcsname{#1}%%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}@internshipfield\endcsname{#2}%%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}@internshipstart\endcsname{#3}%%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}@internshipend\endcsname{#4}%%
- \expandafter\gdef\csname tc@student\Alph{tc@studentcount}@internshiplength\endcsname{#5}%%
+ \starray_new_term:nn {student.internship}{}
+ \starray_gset_from_keyval:nn {student.internship}
+ {
+ company = {#1} ,
+ field = {#2} ,
+ start = {#3} ,
+ end = {#4} ,
+ length = {#5} ,
+ }
}%
-%
-%
+
\NewDocumentCommand{\examiner}{O{}mmO{}}{%%
- \stepcounter{tc@examinercount}%%
- \tccore@ProfFields{examiner\Alph{tc@examinercount}}{#1}{#2}{#3}{#4}%%
+ \starray_new_term:nn {student.reviewer}{}
+ \__ufrgscca_set_prof:nnnnn {reviewer}{#1}{#2}{#3}{#4}
}%
\NewDocumentCommand{\examinerinfo}{mmmm}{%%
- \tccore@ProfInfo{examiner\Alph{tc@examinercount}}{#1}{#2}{#3}{#4}%%
+ \__ufrgscca_set_prof_info:nnnnn {reviewer}{#1}{#2}{#3}{#4}
}%
-%
-\newcounter{tc@altexaminercount}[tc@studentcount]%
+
\NewDocumentCommand{\altexaminer}{O{}mmO{}}{%%
- \stepcounter{tc@altexaminercount}%%
- \tccore@ProfFields{altexaminer\Alph{tc@altexaminercount}}{#1}{#2}{#3}{#4}%%
+ \starray_new_term:nn {student.altreviewer}{}
+ \__ufrgscca_set_prof:nnnnn {altreviewer}{#1}{#2}{#3}{#4}
}%
\NewDocumentCommand{\altexaminerinfo}{mmmm}{%%
- \tccore@ProfInfo{altexaminer\Alph{tc@altexaminercount}}{#1}{#2}{#3}{#4}%%
-}%
-%
-%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%
-%
-%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-%% assure that student/advisor/examiners... commands are defined with underlines (if not already defined)%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\def\tc@IDrule{30mm}%
-\def\tc@emailrule{40mm}%
-\def\tc@namerule{50mm}%
-\def\tc@titlerule{40mm}%
-\def\tc@phonerule{20mm}%
-\def\tc@agreerule{25mm}%
-\def\tc@daterule{15mm}%
-%%%
-%%
-%%%
-\NewDocumentCommand{\tccore@emptyfields}{}{%
-
- \@ifundefined{tc@studentA}{%
- \student{\rule{\tc@namerule}{.1pt}}{}%
- \studentinfo{\rule{\tc@IDrule}{.1pt}}{\rule{\tc@emailrule}{.1pt}}%
- }{}%
- \@ifundefined{tc@studentA@advisor}{%
- \advisor{\rule{\tc@namerule}{.1pt}}{}%
- \advisorinfo{}{\rule{\tc@titlerule}{.1pt}}{\rule{\tc@emailrule}{.1pt}}{\rule{\tc@phonerule}{.1pt}}%
- }{}%
-%
- \@ifundefined{tc@studentA@examinerC}{%
- \examiner{\rule{\tc@namerule}{.1pt}}{}%
- \examinerinfo{}{\rule{\tc@titlerule}{.1pt}}{\rule{\tc@emailrule}{.1pt}}{\rule{\tc@phonerule}{.1pt}}%
- }{}%
- \@ifundefined{tc@studentA@examinerC}{%
- \examiner{\rule{\tc@namerule}{.1pt}}{}%
- \examinerinfo{}{\rule{\tc@titlerule}{.1pt}}{\rule{\tc@emailrule}{.1pt}}{\rule{\tc@phonerule}{.1pt}}%
- }{}%
- \@ifundefined{tc@studentA@examinerC}{%
- \examiner{\rule{\tc@namerule}{.1pt}}{}%
- \examinerinfo{}{\rule{\tc@titlerule}{.1pt}}{\rule{\tc@emailrule}{.1pt}}{\rule{\tc@phonerule}{.1pt}}%
- }{}%
- \@ifundefined{tc@studentA@altexaminerA}{%
- \altexaminer{\rule{\tc@namerule}{.1pt}}{}%
- \altexaminerinfo{}{\rule{\tc@titlerule}{.1pt}}{\rule{\tc@emailrule}{.1pt}}{\rule{\tc@phonerule}{.1pt}}%
- }{}%
- %
- \@ifundefined{tc@studentA@supervisor}{%
- \supervisor{\rule{\tc@namerule}{.1pt}}{}%
- \supervisorinfo{\rule{\tc@phonerule}{.1pt}}{\rule{\tc@titlerule}{.1pt}}{\rule{\tc@emailrule}{.1pt}}{\rule{\tc@phonerule}{.1pt}}%
- }{}%
- %
- \@ifundefined{tc@studentA@tutor}{%
- \tutor{\rule{\tc@namerule}{.1pt}}{}%
- \tutorinfo{}{\rule{\tc@titlerule}{.1pt}}{\rule{\tc@emailrule}{.1pt}}{\rule{\tc@phonerule}{.1pt}}%
- }{}%
- %
- %
- \@ifundefined{tc@studentA@internshipcompany}{%
- \internship{\rule{\tc@namerule}{.1pt}}{\rule{\tc@titlerule}{.1pt}}{\rule{\tc@daterule}{.1pt}}{\rule{\tc@daterule}{.1pt}}{\rule{\tc@daterule}{.1pt}}%
- }{}%
-
- %
- % add an \iftcif@forms !!!
- %
- \@ifundefined{tcdef@core@tccbrief}{%
- \tccbrief{\tcdef@core@formsblanklines}%
- }{}%
- \@ifundefined{tcdef@core@tccArgument}{%
- \tccArgument{\tcdef@core@formsblanklines}%
- }{}%
- \@ifundefined{tcdef@core@tcccoadvisorbrief}{%
- \tcccoadvisorbrief{\tcdef@core@formsblanklines}%
- }{}%
- \@ifundefined{tcdef@core@tccadvisorsreview}{%
- \tccadvisorsreview{\tcdef@core@formsblanklines}%
- }{}%
+ \__ufrgscca_set_prof_info:nnnnn {altreviewer}{#1}{#2}{#3}{#4}
}%
-\NewDocumentCommand{\tccore@resetfields}{}{%
- \setcounter{tc@studentcount}{0}
- \csundef{tc@studentA}
- \csundef{tc@studentA@advisor}
- \csundef{tc@studentA@coadvisor}
- \csundef{tc@studentA@examinerC}
- \csundef{tc@studentA@altexaminerA}
- \csundef{tc@studentA@supervisor}
- \csundef{tc@studentA@tutor}
- \csundef{tc@studentA@internshipcompany}
-% \csundef{tc@studentA@internshipfield}
-% \csundef{tc@studentA@internshipstart}
-% \csundef{tc@studentA@internshipend}
-% \csundef{tc@studentA@internshiplength}
- \csundef{tcdef@core@tccbrief}
- \csundef{tcdef@core@tccArgument}
- \csundef{tcdef@core@tcccoadvisorbrief}
- \csundef{tcdef@core@tccadvisorsreview}
-}
+
+\cs_new_protected:Npn \__ufrgscca_emptyfields:
+ {
+ \starray_new_term:nn {student}{empty}
+ \starray_new_term:nn {student.advisor}{}
+ \starray_new_term:nn {student.coadvisor}{}
+ \starray_new_term:nn {student.reviewer}{}
+ \starray_new_term:nn {student.reviewer}{}
+ \starray_new_term:nn {student.reviewer}{}
+ \starray_new_term:nn {student.altreviewer}{}
+ \starray_new_term:nn {student.supervisor}{}
+ \starray_new_term:nn {student.tutor}{}
+ \starray_new_term:nn {student.internship}{}
+ }
+
+\def\emptybox{\framebox[3em]{\color{white}W}}
+
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-cover-ptBR.tex b/macros/latex/contrib/ufrgscca/latex/ufrgscca-cover-ptBR.tex
new file mode 100644
index 0000000000..cb385e9cc6
--- /dev/null
+++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-cover-ptBR.tex
@@ -0,0 +1,322 @@
+%%%==============================================================================
+%% Copyright 2022-23 by Alceu Frigeri
+%%
+%% This work may be distributed and/or modified under the conditions of
+%%
+%% * The [LaTeX Project Public License](http://www.latex-project.org/lppl.txt),
+%% version 1.3c (or later), and/or
+%% * The [GNU Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.html),
+%% version 3 (or later)
+%%
+%% This work has the LPPL maintenance status *maintained*.
+%%
+%% The Current Maintainer of this work is Alceu Frigeri
+%%
+%% This is version {2.0} {2023/11/23}
+%%
+%% The list of files that compose this work can be found in the README.md file at
+%% https://ctan.org/pkg/ufrgscca
+%%
+%%%==============================================================================
+%% UFRGS stands for "Federal University of Rio Grande do Sul" in south Brazil
+%% EE stands for "Engineering School"
+%% CCA stands for "Control and Automation Engineering Course" (Portuguese acronym)
+%%%==============================================================================
+
+
+%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%
+
+
+\SetTerms{%
+ advisor.descpage = %
+ {%
+ \noindent%
+ \studentCoadvCase{%
+ \UseTerm{advisors}:\\
+ \DataFields{student.advisor}{name}\\[1ex]
+ \DataFields{student.coadvisor}{name}
+ }{%
+ \UseTerm{advisor}:\\
+ \DataFields{student.advisor}{name}
+ }
+ } ,
+ advisor.approvalpage = %
+ {%
+ \noindent%
+ \studentCoadvCase{%
+ \UseTerm{advisors}:\\
+ \DataFields{student.advisor}{name}, \DataFields{student.advisor}{institution}\\
+ \DataFields{student.advisor}{title}\\[1ex]
+ \DataFields{student.coadvisor}{name}, \DataFields{student.coadvisor}{institution}\\
+ \DataFields{student.coadvisor}{title}
+ }{
+ \UseTerm{advisor}:\\
+ \DataFields{student.advisor}{name}, \DataFields{student.advisor}{institution}\\
+ \DataFields{student.advisor}{title}
+ }
+ } ,
+ internship.tutorapproval =
+ { ~\\
+ \noindent\UseTerm{tutor}:\\
+ \DataFields{student.tutor}{name}, \DataFields{student.tutor}{institution}\\
+ \DataFields{student.tutor}{title}\\[1ex]
+
+ \noindent\UseTerm{supervisor}:\\
+ \DataFields{student.supervisor}{name}, \DataFields{student.supervisor}{institution}\\
+ \DataFields{student.supervisor}{office}\\
+ \DataFields{student.internship}{company}\\
+
+
+ } ,
+ cover.students = %
+ {%
+ \eDataSet{student}
+ \centering{\MakeUppercase{\eDataFields{name}} - \eDataFields{ID}}
+ } ,
+ cover.topbase = %
+ {%
+ \centering
+ \MakeUppercase{\UseHeading{university}}\\
+ \MakeUppercase{\UseHeading{unit}}\\
+ \MakeUppercase{\UseHeading{course}}
+ } ,
+ cover.title = %
+ {%
+ \eDataSet{student}
+ \centering\textbf{\MakeUppercase{\eDataFields{worktitle}}}
+ } ,
+ cover.bottom = {%
+ \centering \UseConst{publ.city}\\ \UseConst{publ.date}\par
+ } ,
+ ppc.top = %
+ {%
+ \centering
+ \MakeUppercase{\UseHeading{university}}\\
+ \MakeUppercase{\UseHeading{unit}}\\
+ \MakeUppercase{\UseHeading{ppc.comgrad}}\\
+ \MakeUppercase{\UseHeading{ppc.nde}}\\
+ \MakeUppercase{\UseHeading{ppc.course}}\\
+
+ } ,
+ report.top = %
+ {%
+ \centering
+ \MakeUppercase{\UseHeading{university}}\\
+ \MakeUppercase{\UseHeading{unit}}\\
+ \MakeUppercase{\UseHeading{department}}\\
+ \MakeUppercase{\UseHeading{class.code}~ -~ \UseHeading{class.name}}\\
+ } ,
+}
+
+\SetTerms{
+ cover.students =
+ {
+ \studentiterate
+ {
+ \eDataSet{student}
+ \centering{\MakeUppercase{\eDataFields{name}}~ -~ \eDataFields{ID}}\\
+ }
+ }
+}
+
+
+%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%
+%%%
+%%% TCC I
+%%%
+%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%
+
+\SetCoverFields{tccI}{clist}{cover,desc,approval}
+\SetCoverFields{tccI}{top}{ \UseTerm{cover.topbase} }
+\SetCoverFields{tccI}{students}{ \UseTerm{cover.students} }
+\SetCoverFields{tccI}{title}{ \UseTerm{cover.title} }
+\SetCoverFields{tccI}{bottom}{\centering \UseConst{publ.city}\\ \UseConst{publ.year}\par}
+
+\SetCoverFields{tccI}{text-descpage}{ \UseTerm{tccI.text-descpage} }
+
+\SetCoverFields{tccI}{advisor-descpage}{ \UseTerm{advisor.descpage} }
+
+\SetCoverFields{tccI}{bottom-descpage}{\centering \UseConst{publ.city}\\ \UseConst{publ.year}\par}
+
+\SetCoverFields{tccI}{text-approvalpage}{ \UseTerm{tccI.text-approvalpage} }
+\SetCoverFields{tccI}{advisor-approvalpage}{ \UseTerm{advisor.approvalpage} }
+
+\SetCoverFields{tccI}{bottom-approvalpage}{ \UseTerm{cover.bottom} }
+
+
+\SetCoverFields{tccI}{board}{
+\noindent \UseTerm{board}:\\
+\indent \DataFields{student.reviewer[2]}{name}, \DataFields{student.reviewer[2]}{institution}\\
+\indent \DataFields{student.reviewer[2]}{title}\\
+\\
+\indent \DataFields{student.reviewer[3]}{name}, \DataFields{student.reviewer[2]}{institution}\\
+\indent \DataFields{student.reviewer[3]}{title}\\
+}
+
+
+\SetCoverFields{tccI}{coord}{
+\noindent\hrulefill\\
+\ActivityCoord[course]{name}\\
+\ActivityCoord[course]{title}\\
+\Activity[course]{name}
+}
+
+
+
+%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%
+%%%
+%%% TCC II
+%%%
+%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%
+
+\SetCoverFields{tccII}{clist}{cover,desc,approval}
+\SetCoverFields{tccII}{top}{ \UseTerm{cover.topbase} }
+\SetCoverFields{tccII}{students}{ \UseTerm{cover.students} }
+\SetCoverFields{tccII}{title}{ \UseTerm{cover.title} }
+\SetCoverFields{tccII}{bottom}{\centering \UseConst{publ.city}\\ \UseConst{publ.year}\par}
+
+\SetCoverFields{tccII}{text-descpage}{ \UseTerm{tccII.text-descpage} }
+
+\SetCoverFields{tccII}{advisor-descpage}{ \UseTerm{advisor.descpage} }
+
+\SetCoverFields{tccII}{bottom-descpage}{\centering \UseConst{publ.city}\\ \UseConst{publ.year}\par}
+
+\SetCoverFields{tccII}{text-approvalpage}{ \UseTerm{tccII.text-approvalpage} }
+\SetCoverFields{tccII}{advisor-approvalpage}{ \UseTerm{advisor.approvalpage} }
+
+\SetCoverFields{tccII}{bottom-approvalpage}{ \UseTerm{cover.bottom} }
+
+
+\SetCoverFields{tccII}{board}{
+\noindent \UseTerm{board}:\\
+\indent \DataFields{student.reviewer[1]}{name}, \DataFields{student.reviewer[1]}{institution}\\
+\indent \DataFields{student.reviewer[1]}{title}\\[-1ex]
+
+\indent \DataFields{student.reviewer[2]}{name}, \DataFields{student.reviewer[2]}{institution}\\
+\indent \DataFields{student.reviewer[2]}{title}\\[-1ex]
+
+\indent \DataFields{student.reviewer[3]}{name}, \DataFields{student.reviewer[2]}{institution}\\
+\indent \DataFields{student.reviewer[3]}{title}\\
+}
+
+
+\SetCoverFields{tccII}{coord}{
+\noindent\hrulefill\\
+\ActivityCoord[course]{name}\\
+\ActivityCoord[course]{title}\\
+\Activity[course]{name}
+}
+
+
+
+
+\SetCoverFields{ppc}{clist}{cover}
+\SetCoverFields{ppc}{top}{ \UseTerm{ppc.top} }
+\SetCoverFields{ppc}{students}{ }
+\SetCoverFields{ppc}{title}{ \centering PROJETO~ PEDAGÓGICO~ DO\\
+CURSO~ EM~ ENGENHARIA~ DE\\
+CONTROLE~ E~ AUTOMAÇÃO }
+\SetCoverFields{ppc}{bottom}{\centering \UseConst{publ.city}\\ \UseConst{publ.year}\par}
+
+
+
+%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%
+%%%
+%%% Internship
+%%%
+%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%
+
+\SetCoverFields{internship}{clist}{cover,approval}
+\SetCoverFields{internship}{top}{ \UseTerm{cover.topbase} }
+\SetCoverFields{internship}{students}{ \UseTerm{cover.students} }
+\SetCoverFields{internship}{title}{ \centering\textbf{ RELATÓRIO DE ESTÁGIO SUPERVISIONADO OBRIGATÓRIO EM ENG. DE CONTROLE E AUTOMAÇÃO}}
+\SetCoverFields{internship}{bottom}{\centering \UseConst{publ.city}\\ \UseConst{publ.year}\par}
+
+\SetCoverFields{internship}{text-approvalpage}{
+ Este Relatório foi julgado adequado para a obtenção do conceito final na Atividade de Estágio Supervisionado Obrigatório em Eng. de Controle
+ e Automação e aprovado em sua forma final pel\DataFields{student.tutor}{article} Tutor\DataFields{student.tutor}{narticle}, Supervisor\DataFields{student.supervisor}{narticle} e Coordenador\DataFields{activity[internship].coord}{narticle} da Atividade.}
+
+\SetCoverFields{internship}{advisor-approvalpage}{ \UseTerm{internship.tutorapproval} }
+
+\SetCoverFields{internship}{bottom-approvalpage}{ \centering \UseConst{publ.city}\\\UseConst{publ.month}~ \UseConst{publ.year}\par }
+
+
+\SetCoverFields{internship}{board}{}
+
+
+\SetCoverFields{internship}{coord}{
+\noindent\hrulefill\\
+\ActivityCoord[internship]{name}\\
+\ActivityCoord[internship]{title}
+}
+
+
+
+%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%
+%%%
+%%% Nonrequired / Internship-optional
+%%%
+%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%
+
+\SetCoverFields{internship-opt}{clist}{cover,approval}
+\SetCoverFields{internship-opt}{top}{ \UseTerm{cover.topbase} }
+\SetCoverFields{internship-opt}{students}{ \UseTerm{cover.students} }
+\SetCoverFields{internship-opt}{title}{ \centering\textbf{ RELATÓRIO DE ESTÁGIO SUPERVISIONADO NÃO OBRIGATÓRIO EM ENG. DE CONTROLE E AUTOMAÇÃO}}
+\SetCoverFields{internship-opt}{bottom}{\centering \UseConst{publ.city}\\ \UseConst{publ.year}\par}
+
+\SetCoverFields{internship-opt}{text-approvalpage}{
+ Este Relatório foi julgado adequado para uma Atividade de Estágio Supervisionado Não Obrigatório em Eng. de Controle
+ e Automação e aprovado em sua forma final pel\DataFields{student.tutor}{article} Tutor\DataFields{student.tutor}{narticle} e Supervisor\DataFields{student.supervisor}{narticle}.}
+
+\SetCoverFields{internship-opt}{advisor-approvalpage}{ \UseTerm{internship.tutorapproval} }
+
+\SetCoverFields{internship-opt}{bottom-approvalpage}{ \centering \UseConst{publ.city}\\\UseConst{publ.month}~ \UseConst{publ.year}\par }
+
+
+\SetCoverFields{internship-opt}{board}{}
+
+
+\SetCoverFields{internship-opt}{coord}{}
+
+
+
+%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%
+%%%
+%%% class report
+%%%
+%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%
+
+\SetCoverFields{class-report}{clist}{cover}
+\SetCoverFields{class-report}{top}{ \UseTerm{report.top} }
+\SetCoverFields{class-report}{students}{ \UseTerm{cover.students} }
+\SetCoverFields{class-report}{title}{ \UseTerm{cover.title} }
+\SetCoverFields{class-report}{bottom}{\centering \UseConst{publ.city}\\\UseConst{publ.month}~ \UseConst{publ.year}\par}
+
+\SetCoverFields{class-report}{text-approvalpage}{}
+
+\SetCoverFields{class-report}{advisor-approvalpage}{}
+
+\SetCoverFields{class-report}{bottom-approvalpage}{}
+
+
+\SetCoverFields{class-report}{board}{}
+
+
+\SetCoverFields{class-report}{coord}{}
+
+
+
+
+
+
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-cover.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-cover.sty
index e433c3021b..9cfd99a620 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 1.12 (2023/09/23)
+%% This is version {2.0} {2023/11/23}
%%
%% The list of files that compose this work can be found in the README.md file at
%% https://ctan.org/pkg/ufrgscca
@@ -23,382 +23,217 @@
%% CCA stands for "Control and Automation Engineering Course" (Portuguese acronym)
%%%==============================================================================
\NeedsTeXFormat{LaTeX2e}[2022/06/01]
-\def\tc@tmp@packname{ufrgscca-cover}
-\def\tc@tmp@altpackname{ufrgsccacover}
-\def\tc@tmp@packdesc{UFRGS/CCA cover commands}
-\def\tc@tmp@packdate{2023/09/23}
-\def\tc@tmp@packversion{1.12}
-\let\@exp\expandafter
-\@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion}
-\@exp\@exp\@exp\ProvidesPackage\@exp\@exp\@exp{\@exp\tc@tmp@packname\@exp}\@exp[\tc@tmp@packdate\space v\tc@tmp@packversion\space\tc@tmp@packdesc]
-
-\DeclareKeys[ufrgscca-cover]{
- report.usage = load,
- report.if = tcif@report,
- internship.usage = load,
- internship.if = tcif@internship,
- nonrequired.usage = load,
- nonrequired.if = tcif@nonrequired,
-}
-\ProcessKeyOptions[ufrgscca-cover]\relax
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% student commands%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\cmdfactory<cover>{course}
-\cmdfactory<cover>{courseacronym}%
-\cmdfactory<cover>{graduationtitle}
-\cmdfactory<cover>{university,universityacronym,universitydivision}
-\cmdfactory<cover>{divisiongradcouncil}%
-\cmdfactory<cover>{department,classcode,classname,subject}%
-\cmdfactory<cover>{secretaryacronym,secdivisionacronym}%
-\cmdfactory<cover>{advisorname,coadvisorname}
-\cmdfactory<cover>{examinername}%
-\cmdfactory<cover>{reportspecificinfo,approvalspecificinfo}%
-\cmdfactory<cover>{advisorwidth}
-\cmdfactory<cover>{profname,coprofname}%
-\cmdfactory<cover>{tutorname,supervisorname}%
-\cmdfactory<cover>{internshiptitle}%
-\cmdfactory<cover>{internshipinfo}%
-%
-\advisorwidth{0.55\textwidth}%
-%
-\NewDocumentCommand{\class}{mm}{\classcode{#1}\classname{#2}}%
-%
-
-
-%%%%%%%%%%%%%%%%%%%%%%%
-%%%%
-%%% cover pages and related macros%
-%%%%
-%%%%%%%%%%%%%%%%%%%%%%%
-\newlength{\tc@formwinvoffset}%
-\setlength{\tc@formwinvoffset}{24mm}%
-\NewDocumentCommand\tc@formtopbox{O{}+m+m}{%%
- \begin{center}%%
- \noindent%%
- \parbox[t]{\textwidth}{%%
- \centering%%
- \vbox to \tc@formwinvoffset{%%
- \tccover@covertopinfo%%
- {\sc #2}%
- }%%
- }%
-
- {\bf #3}\@ifundefined{#1}{}{\footnote[1]{\csname #1\endcsname}}%%
- \end{center}%%
-}%
-
-
-%
-\NewDocumentCommand{\tccover@covertopinfo}{}{%%
- \@ifundefined{tcdef@cover@university}{}{\MakeUppercase{\tcdef@cover@university}\\}%
- \@ifundefined{tcdef@cover@universitydivision}{}{\MakeUppercase{\tcdef@cover@universitydivision}\\}%
- \@ifundefined{tcdef@cover@course}{}{\MakeUppercase{\tcdef@cover@course}\\}%
- \@ifundefined{tcdef@cover@department}{}{\MakeUppercase{\tcdef@cover@department}\\}%%
- \@ifundefined{tcdef@cover@classname}{}{\MakeUppercase{\tcdef@cover@classcode\ --\ \tcdef@cover@classname}\\}%
- \@ifundefined{tcdef@cover@subject}{}{\MakeUppercase{\tcdef@cover@subject}}%
-}%
-
-
-\NewDocumentCommand{\tccover@coveradvisorinfo}{}{%%
- \@ifundefined{tc@studentA@advisor}{}{\vfill{\scshape\tcdef@cover@advisorname}:\\\null\hfill\tc@studentA@advisor}%
- \@ifundefined{tc@studentA@coadvisor}{}{\\[6ex]{\scshape\tcdef@cover@coadvisorname}:\\\null\hfill\tc@studentA@coadvisor}%
-}%
-%
-\NewDocumentCommand{\tccover@reportadvisorinfo}{}{%%
- \@ifundefined{tc@studentA@advisor}{}{\vfill{\scshape\iftcif@internship\tcdef@cover@advisorname\else\tcdef@cover@profname\fi}:\\\null\hfill\tc@studentA@advisor}%
- \@ifundefined{tc@studentA@coadvisor}{}{\\[6ex]{\scshape\iftcif@internship\tcdef@cover@coadvisorname\else\tcdef@cover@coprofname\fi}:\\\null\hfill\tc@studentA@coadvisor}%
-}%
-%
-%%%%%%%%%%%%%%%%%%%
-\let\tc@org@maketitle\maketitle
-\RenewDocumentCommand{\maketitle}{}{\coverpages}%
+\ProvidesExplPackage
+ {ufrgscca-cover}
+ {2023/11/23}
+ {2.0}
+ {UFRGS/CCA cover commands}
-\NewDocumentCommand{\coverpages}{}{%%
- \thecoverpage%that´s the first page%
- \thetitlepage%that´s the second page (for tcc)%
- \tccapprovalpage%that´s the third page (for tcc)%
-}%
-
-\iftcif@report
- \RenewDocumentCommand{\coverpages}{}{%%
- \thecoverpage%that´s the first page%
- }%
-\fi
-
-\iftcif@internship
- \AtBeginDocument{\title{\tcdef@cover@internshiptitle}}
- \RenewDocumentCommand{\coverpages}{}{%%
- \thecoverpage%that´s the first page%
- \internapprovalpage%that´s the second page (for internship)%
- }%
-\fi
-
-%
-%%%%%%%%%
+%%%%%%%
%%%
-%% 1st cover page%
+%%% Just an attempt of having my packages info in a regular way
+%%% Idea being: { <pck-name> / pkg info } for each and all.
%%%
-%%%%%%%%%
-%%
-\newlength{\tc@coverwinwidth}\setlength{\tc@coverwinwidth}{95mm}%%
-\newlength{\tc@coverwinheight}\setlength{\tc@coverwinheight}{64mm}%%
-\newlength{\tc@coverwinvoffset}\setlength{\tc@coverwinvoffset}{112mm}%%
+%%%%%%%
+\keys_define:nn { ufrgscca-cover / pkg info}
+ {
+ name .code:n = {ufrgscca-cover} ,
+ prefix .code:n = {ufrgscca} ,
+ date .code:n = {2023/11/23},
+ version .code:n = {2.0} ,
+ description .code:n = {UFRGS/CCA~ cover~pages}
+ }
+\cs_if_exist:NF \__codedesc_pkg_info:nn
+ {
+ \cs_new_protected:Npn \__codedesc_pkg_info:nn #1#2
+ { \keys_set:nn {#1 / pkg info}{#2} }
+ }
+\cs_if_exist:NF \PkgInfo
+ { \NewDocumentCommand \PkgInfo {mm} { \keys_set:nn {#1 / pkg info}{#2} } }
+\cs_if_exist:NF \PkgDescription
+ {
+ \NewDocumentCommand \PkgDescription {m}
+ {
+ \noindent Package~ \textbf{\PkgInfo{#1}{name}}~Version:~\PkgInfo{#1}{version}~ -~ \PkgInfo{#1}{date}\par \emph{\PkgInfo{#1}{description}}~\par
+ }
+ }
+%%%%%%%
+%%% End of cut-n-paste
+%%%%%%%
+
+
+\NewDocumentCommand{\class}{mm}{%
+ \SetHeadings{%
+ class.code = {#1} ,
+ class.name = {#2} ,
+ }
+}%
+%
+
+\cs_generate_variant:Nn \text_uppercase:n {e}
+
\NewDocumentCommand{\location}{mm}{%%
- \gdef\tc@city{#1}%%
- \gdef\tc@state{#2}%%
+ \SetConsts{%
+ publ.city = {#1} ,
+ publ.state = {#2} ,
+ }
}%%
-\NewDocumentCommand{\thecoverpage}{}{%%
- \begin{titlepage}%
- \noindent\tc@covertopbox%
- \vfill%
- \iftcif@report{%%
- \@ifundefined{tc@studentA@advisor}{}{%%
- \hspace*{\fill}\parbox[b]{\tcdef@cover@advisorwidth}{\tccover@reportadvisorinfo}%
- \vfill%
- }%%
- }%%
- \else\fi
- \centerline{\tc@city}%
- \centerline{\tc@date}%
- \end{titlepage}%%
- \tc@pagebreak
-}%
-%
-%
-%%%%%%%%%
-%%%
-%% 2nd cover page (title page)%
-%%%
-%%%%%%%%%
-\NewDocumentCommand{\thetitlepage}{}{%%
- \begin{titlepage}%
- \noindent\tc@covertopbox%
- \vfill%
- \@ifundefined{tcdef@cover@reportspecificinfo}{}{%
- \hspace*{\fill}\makebox[.55\textwidth][l]{%%
- \parbox[b]{8.5cm}{\tcdef@cover@reportspecificinfo}%%
- }%
- \vfill%
- }%
- \@ifundefined{tc@studentA@advisor}{}{%
- \hspace*{\fill}\parbox[b]{\tcdef@cover@advisorwidth}{%%
- \tccover@coveradvisorinfo%
- }%
- \vfill%
- }%
- \centerline{\tc@city}%
- \centerline{\tc@date}%
- \end{titlepage}%
- \tc@pagebreak
-}%
-%
-%
-%
-\NewDocumentCommand{\tccover@studentdesc}{m}{\@ifundefined{#1}{}{\MakeUppercase{\textbf{\csname #1\endcsname\ - \csname #1ID\endcsname}}\\}}
-%
-
-
-\NewDocumentCommand\tc@covertopbox{}{%%
- \parbox[t]{\textwidth}{%%
- \centering%%
- \vbox to \tc@coverwinvoffset{%%
- \tccover@covertopinfo\vfill\tc@winbox%
- }%
- }%
-}%
+\prop_new:N \l__ufrgscca_coverpages_prop
- \NewDocumentCommand\tc@winbox{}{%%
- %\fbox{%
- \parbox[b]{\tc@coverwinwidth}{%%
- \centering\vbox to \tc@coverwinheight{%%
- \vspace*{\fill}%
- \iftcif@report%
- \tccover@studentdesc{tc@studentA}%
- \tccover@studentdesc{tc@studentB}%
- \tccover@studentdesc{tc@studentC}%
- \tccover@studentdesc{tc@studentD}%%
- \else%
- \tccover@studentdesc{tc@studentA}%%
- \fi%
- \vspace{\stretch{4}}%
- {\large\MakeUppercase{\textbf{\@title}}\par}%
- \vfill%
- }%%
- %}%%
- }%%
- }%
-
-
-
-%
-%%%%%%%%%
-%%%
-%% 3rd cover page (approval page)%
-%%%
-%%%%%%%%%
-\NewDocumentCommand{\tccapprovalpage}{}{%%
- \begin{center}%
- \noindent\tc@covertopbox%
- \vfill%
- \@ifundefined{tcdef@cover@approvalspecificinfo}{}{%
- \hspace*{\fill}\makebox[.55\textwidth][l]{%%
- \parbox[b]{8.5cm}{\tcdef@cover@approvalspecificinfo}%%
- }%
- \vfill%
- }%
- \@ifundefined{tc@studentA@advisor}{}{%
- \hspace*{\fill}\parbox[b]{.70\textwidth}{%%
- \tccover@approvalpageadvisorinfo%
- }%
- \vfill%
- }%
- \@ifundefined{tc@studentA@examinerA}{}{%
- \hspace*{\fill}\parbox[b]{1.0\textwidth}{\tcdef@cover@examinername:}%
- \vfill%
- \hspace*{\fill}\parbox[b]{.90\textwidth}{%%
- \tccover@approvalpageexaminerinfo%
- }%
- \vfill%
- }%
- \@ifundefined{tcdef@core@coursecoord}{}{%
- \hspace*{\fill}\parbox[b]{.70\textwidth}{%%
- \tccover@approvalpagecoordinfo%
- }%
- \vfill%
- }%
- \vfill%
- \hfill\tc@city, \tc@monthyeardate
- \end{center}%
- \tc@pagebreak
-}%
-%
-%
-%
-%
-%
-%%%%%%%%%
-%%%
-%% 2nd cover page (internship, approval page)%
-%%%
-%%%%%%%%%
-\NewDocumentCommand{\internapprovalpage}{}{%%
- \begin{center}%
- \noindent\tc@covertopbox%
- \vfill%
- \@ifundefined{tcdef@cover@internshipinfo}{}{%
- \hspace*{\fill}\makebox[.55\textwidth][l]{%%
- \parbox[b]{8.5cm}{\tcdef@cover@internshipinfo}%%
- }%
- \vfill%
- }%
- \@ifundefined{tc@studentA@tutor}{}{%
- \hspace*{\fill}\parbox[b]{.70\textwidth}{%%
- \tccover@approvalpagetutorinfo%
- }%
- \vfill%
- }%
- \@ifundefined{tc@studentA@supervisor}{}{%
- \vfill%
- \hspace*{\fill}\parbox[b]{.70\textwidth}{%%
- \tccover@approvalpagesupervisorinfo%
- }%
- \vfill%
- }%
- \iftcif@nonrequired
- \else
- \@ifundefined{tcdef@core@coursecoord}{}{%
- \hspace*{\fill}\parbox[b]{.70\textwidth}{%%
- \tccover@approvalpageinternshipcoordinfo%
- }%
- \vfill%
- }%
- \fi
- \vfill%
- \hfill\tc@city, \tc@monthyeardate
- \end{center}%
- \tc@pagebreak
-}%
-%
-%
-%
-%
-%
-\NewDocumentCommand{\tccover@approvalpageadvisorinfo}{}{%%
- \@ifundefined{tc@studentA@advisor}{}{%%
- \vfill%
- \tcdef@cover@advisorname: \hrulefill\\%
- \tc@studentA@advisor, \tc@studentA@advisorinstitution\\%
- \tc@studentA@advisortitleinfo %
- }%
-}%
-\NewDocumentCommand{\tccover@approvalpagetutorinfo}{}{%%
- \@ifundefined{tc@studentA@tutor}{}{%%
- \vfill%
- \tcdef@cover@tutorname: \hrulefill\\%
- \tc@studentA@tutor, \tc@studentA@tutorinstitution\\%
- \tc@studentA@tutortitleinfo %
- }%
-}%
-
-\NewDocumentCommand{\tccover@@aprovalexaminerinfo}{m}{
- \@ifundefined{#1}{}{%%
- \csname #1\endcsname, \csname #1institution\endcsname\\%
- \csname #1titleinfo\endcsname\\%
- }%
-}%
-\NewDocumentCommand{\tccover@approvalpageexaminerinfo}{}{%%
- \vfill%
- \tccover@@aprovalexaminerinfo{tc@studentA@examinerA}%
-
- \tccover@@aprovalexaminerinfo{tc@studentA@examinerB}%
-
- \tccover@@aprovalexaminerinfo{tc@studentA@examinerC}%
-
- \tccover@@aprovalexaminerinfo{tc@studentA@examinerD}%
-
- \tccover@@aprovalexaminerinfo{tc@studentA@examinerE}%
-}%
-%
-\NewDocumentCommand{\tccover@approvalpagesupervisorinfo}{}{%%
- \vfill%
- \@ifundefined{tc@studentA@supervisor}{}{%%
- \tcdef@cover@supervisorname: \hrulefill\\%
- \tc@studentA@supervisor, \tc@studentA@supervisorregister\\%
- \tc@studentA@supervisoroffice\\%
- }%
-}%
-%
-
-
-\NewDocumentCommand{\tccover@approvalpagecoordinfo}{}{%%
- \@ifundefined{tcdef@core@coursecoord}{}{%%
- \vfill%
- \hrulefill\\%
- \tcdef@core@coursecoord\\%
- \tcdef@core@coursecoordtitle\\%
- \tcdef@cover@course%
- }%
-}%
-%
-\NewDocumentCommand{\tccover@approvalpageinternshipcoordinfo}{}{%%
- \@ifundefined{tcdef@core@internshipcoord}{}{%%
- \vfill%
- \hrulefill\\%
- \tcdef@core@internshipcoord\\%
- \tcdef@core@internshipcoordtitle\\%
- \tcdef@cover@course%
- }%
-}%
-
+\NewDocumentCommand{\SetCoverFields}{mm+m}{
+ \prop_put:Nnn \l__ufrgscca_coverpages_prop {#1.#2}{#3}
+}
+\NewDocumentCommand{\MakeCoverPages}{m}
+ {
+ \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
+ {
+ \keys_set:nn { ufrgscca / layout }{##1 = #1}
+ }
+
+ }
+
+
+\keys_define:nn { ufrgscca / layout }
+ {
+ cover .usage:n = general,
+ cover .code:n = {\__ufrgscca_cover_page:n{#1}},
+ desc .usage:n = general,
+ desc .code:n = {\__ufrgscca_desc_page:n{#1}},
+ approval .usage:n = general,
+ approval .code:n = {\__ufrgscca_approval_page:n{#1}},
+ }
+
+\cs_generate_variant:Nn \seq_map_inline:Nn {Ne}
+\cs_generate_variant:Nn \seq_set_from_clist:Nn {Ne}
+
+\coffin_new:N \l__ufrgscca_top_coffin
+\coffin_new:N \l__ufrgscca_student_coffin
+\coffin_new:N \l__ufrgscca_title_coffin
+\coffin_new:N \l__ufrgscca_desc_coffin
+\coffin_new:N \l__ufrgscca_adv_coffin
+\coffin_new:N \l__ufrgscca_board_coffin
+\coffin_new:N \l__ufrgscca_coord_coffin
+
+\dim_new:N \l__ufrgscca_top_ht_dim
+
+\dim_new:N \l__ufrgscca_student_voffset_dim
+\dim_new:N \l__ufrgscca_student_ht_dim
+
+\dim_new:N \l__ufrgscca_title_voffset_dim
+\dim_new:N \l__ufrgscca_title_wd_dim
+\dim_new:N \l__ufrgscca_title_ht_dim
+
+\dim_new:N \l__ufrgscca_desc_wd_dim
+\dim_new:N \l__ufrgscca_desc_ht_dim
+\dim_new:N \l__ufrgscca_desc_voffset_dim
+
+\dim_new:N \l__ufrgscca_adv_wd_dim
+\dim_new:N \l__ufrgscca_adv_ht_dim
+\dim_new:N \l__ufrgscca_adv_voffset_dim
+
+
+\cs_new_protected:Npn \__ufrgscca_cover_page_base:n #1
+ {
+ \dim_gset:Nn \l__ufrgscca_title_wd_dim {0.6\textwidth}% {95mm}
+ \dim_gset:Nn \l__ufrgscca_desc_wd_dim {0.6\textwidth}% {95mm}
+ \dim_gset:Nn \l__ufrgscca_adv_wd_dim {0.68\textwidth}% {95mm}
+
+ \vcoffin_gset:Nnn \l__ufrgscca_top_coffin {\textwidth}
+ { \prop_item:Nn \l__ufrgscca_coverpages_prop {#1.top} }
+
+ \vcoffin_gset:Nnn \l__ufrgscca_student_coffin {\l__ufrgscca_title_wd_dim}
+ { \prop_item:Nn \l__ufrgscca_coverpages_prop {#1.students} }
+
+ \vcoffin_gset:Nnn \l__ufrgscca_title_coffin {\l__ufrgscca_title_wd_dim}
+ { \prop_item:Nn \l__ufrgscca_coverpages_prop {#1.title} }
+
+ \dim_gset:Nn \l__ufrgscca_student_ht_dim {\coffin_ht:N \l__ufrgscca_student_coffin}
+ \dim_gset:Nn \l__ufrgscca_top_ht_dim {\coffin_ht:N \l__ufrgscca_top_coffin}
+ \dim_gset:Nn \l__ufrgscca_title_voffset_dim {0.29\textheight} %%{0.3\textheight}
+ \dim_gset:Nn \l__ufrgscca_desc_voffset_dim {0.42\textheight} %%{0.45\textheight}
+ \dim_gset:Nn \l__ufrgscca_adv_voffset_dim {0.54\textheight}
+ \dim_gset:Nn \l__ufrgscca_student_voffset_dim {(\l__ufrgscca_title_voffset_dim + \l__ufrgscca_top_ht_dim - \l__ufrgscca_student_ht_dim)/2}
+
+ \coffin_gjoin:NnnNnnnn \l__ufrgscca_top_coffin {hc}{t} \l__ufrgscca_student_coffin {hc}{t} {0pt} {-\l__ufrgscca_student_voffset_dim}
+ \coffin_gjoin:NnnNnnnn \l__ufrgscca_top_coffin {hc}{t} \l__ufrgscca_title_coffin {hc}{t} {0pt} {-\l__ufrgscca_title_voffset_dim}
+ }
+
+
+
+
+\cs_new_protected:Npn \__ufrgscca_cover_page:n #1
+ {
+ \__ufrgscca_cover_page_base:n{#1}
+
+ \noindent\coffin_typeset:Nnnnn \l__ufrgscca_top_coffin {l}{b} {0pt}{0pt}
+
+ \vfill
+ { \prop_item:Nn \l__ufrgscca_coverpages_prop {#1.bottom} }
+ %\newpage
+ \__ufrgscca_clearpage:
+ }
+
+\cs_new_protected:Npn \__ufrgscca_desc_page:n #1
+ {
+ \__ufrgscca_cover_page_base:n{#1}
+
+ \vcoffin_gset:Nnn \l__ufrgscca_desc_coffin {\l__ufrgscca_desc_wd_dim}
+ { \prop_item:Nn \l__ufrgscca_coverpages_prop {#1.text-descpage} }
+
+ \vcoffin_gset:Nnn \l__ufrgscca_adv_coffin {\l__ufrgscca_adv_wd_dim}
+ { \prop_item:Nn \l__ufrgscca_coverpages_prop {#1.advisor-descpage} }
+
+ \coffin_join:NnnNnnnn \l__ufrgscca_top_coffin {r}{t} \l__ufrgscca_desc_coffin {r}{t} {0pt} {-\l__ufrgscca_desc_voffset_dim}
+
+ %\coffin_join:NnnNnnnn \l__ufrgscca_top_coffin {r}{b} \l__ufrgscca_adv_coffin {r}{t} {0pt} {-3\parsep}
+ \coffin_join:NnnNnnnn \l__ufrgscca_top_coffin {r}{t} \l__ufrgscca_adv_coffin {r}{t} {0pt} {-\l__ufrgscca_adv_voffset_dim}
+
+ \noindent\coffin_typeset:Nnnnn \l__ufrgscca_top_coffin {l}{b} {0pt}{0pt}
+
+ \vfill
+ { \prop_item:Nn \l__ufrgscca_coverpages_prop {#1.bottom-descpage} }
+ %\newpage
+ \__ufrgscca_clearpage:
+ }
+
+
+\cs_new_protected:Npn \__ufrgscca_approval_page:n #1
+ {
+ \__ufrgscca_cover_page_base:n{#1}
+ \vcoffin_gset:Nnn \l__ufrgscca_desc_coffin {\l__ufrgscca_desc_wd_dim}
+ { \prop_item:Nn \l__ufrgscca_coverpages_prop {#1.text-approvalpage} }
+
+ \vcoffin_gset:Nnn \l__ufrgscca_adv_coffin {\l__ufrgscca_adv_wd_dim}
+ { \prop_item:Nn \l__ufrgscca_coverpages_prop {#1.advisor-approvalpage} }
+
+ \vcoffin_gset:Nnn \l__ufrgscca_board_coffin {\textwidth}
+ { \prop_item:Nn \l__ufrgscca_coverpages_prop {#1.board} }
+
+ \vcoffin_gset:Nnn \l__ufrgscca_coord_coffin {\l__ufrgscca_adv_wd_dim}
+ { \prop_item:Nn \l__ufrgscca_coverpages_prop {#1.coord} }
+
+ \coffin_join:NnnNnnnn \l__ufrgscca_top_coffin {r}{t} \l__ufrgscca_desc_coffin {r}{t} {0pt} {-\l__ufrgscca_desc_voffset_dim}
+
+ %\coffin_join:NnnNnnnn \l__ufrgscca_top_coffin {r}{b} \l__ufrgscca_adv_coffin {r}{t} {0pt} {-3\parsep}
+ \coffin_join:NnnNnnnn \l__ufrgscca_top_coffin {r}{t} \l__ufrgscca_adv_coffin {r}{t} {0pt} {-\l__ufrgscca_adv_voffset_dim}
+
+ \coffin_join:NnnNnnnn \l__ufrgscca_top_coffin {l}{b} \l__ufrgscca_board_coffin {l}{t} {0pt} {-3\parsep}
+ \coffin_join:NnnNnnnn \l__ufrgscca_top_coffin {r}{b} \l__ufrgscca_coord_coffin {r}{t} {0pt} {-3\parsep}
+
+ \noindent\coffin_typeset:Nnnnn \l__ufrgscca_top_coffin {l}{b} {0pt}{0pt}
+
+ \vfill
+ { \prop_item:Nn \l__ufrgscca_coverpages_prop {#1.bottom-approvalpage} }
+ %\newpage
+ \__ufrgscca_clearpage:
+ }
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-curr-graph.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-curr-graph.sty
deleted file mode 100644
index ccd5247bb6..0000000000
--- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-curr-graph.sty
+++ /dev/null
@@ -1,101 +0,0 @@
-%%%==============================================================================
-%% Copyright 2022-23 by Alceu Frigeri
-%%
-%% This work may be distributed and/or modified under the conditions of
-%%
-%% * The [LaTeX Project Public License](http://www.latex-project.org/lppl.txt),
-%% version 1.3c (or later), and/or
-%% * The [GNU Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.html),
-%% version 3 (or later)
-%%
-%% This work has the LPPL maintenance status *maintained*.
-%%
-%% The Current Maintainer of this work is Alceu Frigeri
-%%
-%% This is version 1.12 (2023/09/23)
-%%
-%% The list of files that compose this work can be found in the README.md file at
-%% https://ctan.org/pkg/ufrgscca
-%%
-%%%==============================================================================
-%% UFRGS stands for "Federal University of Rio Grande do Sul" in south Brazil
-%% EE stands for "Engineering School"
-%% CCA stands for "Control and Automation Engineering Course" (Portuguese acronym)
-%%%==============================================================================
-\NeedsTeXFormat{LaTeX2e}[2022/06/01]
-\def\tc@tmp@packname{ufrgscca-curr-graph}
-\def\tc@tmp@altpackname{tccurrgraph}
-\def\tc@tmp@packdesc{UFRGS/CCA graph curricula commands}
-\def\tc@tmp@packdate{2023/09/23}
-\def\tc@tmp@packversion{1.12beta}
-\let\@exp\expandafter
-\@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion}
-\@exp\@exp\@exp\ProvidesPackage\@exp\@exp\@exp{\@exp\tc@tmp@packname\@exp}\@exp[\tc@tmp@packdate\space v\tc@tmp@packversion\space\tc@tmp@packdesc]
-
-
-\RequirePackage{ufrgscca-curr}
-
-
-%%%%%%%%%%%
-%%%%%%%%%%%
-%%%%%%%%%%%
-
-\NewDocumentEnvironment{tikzGraphSem}{O{4.2:2.1}D<>{11.5:-18.5}}{%
- \StrCut{#1}{:}{\gr@dX}{\gr@dY}
- \StrCut{#2}{:}{\gr@xX}{\gr@yY}
- \def\gr@Xa{0}\def\gr@Xb{\gr@xX*\gr@dX}
- \def\gr@Ya{0}\def\gr@Yb{\gr@yY*\gr@dY}
- \begin{tikzpicture}[%
- disc/.style={%
- ellipse split, double, draw, line width=2pt,%
- every text node part/.style={font=\small\bfseries},%
- every lower node part/.style={font=\large\bfseries,color=blue}},%
- dep/.style={->,dotted,line width=3pt}]%
- \begin{scope}\clip(\gr@Xa,\gr@Ya) -- (\gr@Xa,\gr@Yb) -- (\gr@Xb,\gr@Yb) -- (\gr@Xb,\gr@Ya);%
- \filldraw[color=red](0.5*\gr@xX*\gr@dX,-0.25*\gr@dY)node{\Huge\textbf{\GraphTitle}};%
-}{%
- \end{scope}%
- \end{tikzpicture}%
-}
-
-\NewDocumentCommand\GraphSem{O{ob}m}{%
- \LstClass[\GraphClass]{#2}%
- \draw (\csname gr@etidx:\csname gr@et:\gr@sem.idx\endcsname.pos\endcsname*\gr@dX-0.5*\gr@dX,-\gr@dY) node[disc](Et. #2){Etapa #2 \nodepart{lower} \arabic{gr@cred#1},#1};%
-}
-
-\NewDocumentCommand\GraphClass{m}{%
- \edef\gr@topic{\csname gr@class:#1.topic\endcsname}%
- \edef\gr@color{\csname gr@topic:\gr@topic.color\endcsname}%
- \draw[\gr@color] (\csname gr@etidx:\csname gr@et:\gr@sem.idx\endcsname.pos\endcsname*\gr@dX-0.5*\gr@dX,\csname gr@class:#1.pos\endcsname*\gr@dY-1.25*\gr@dY) node[disc](#1){#1 \nodepart{lower} \csname gr@class:#1.cred\endcsname,\csname gr@class:#1.typ\endcsname};%
- \LstDep[\GraphDep]{#1}%
-}
-
-\NewDocumentCommand\GraphDep{m}{%
- \edef\gr@topic{\csname gr@class:\gr@disc.dep\gr@depSeq:#1.topic\endcsname}%
- \xdef\gr@DepColor{\csname gr@topic:\gr@topic.color\endcsname}%
- %\xdef\gr@DepColor{\csname gr@class:\gr@disc.dep\gr@depSeq:#1.topic\endcsname}%
- \def\gr@angOUT{\gr@ANG} \def\gr@angIN{180-\gr@ANG}%
- \xdef\gr@deppos{\csname gr@class:\gr@disc.dep\gr@depSeq:#1.pos\endcsname}%
- \def\gr@depcut{\StrCut{\gr@deppos}{:}{\gr@angOUT}{\gr@ANG}}%
- \gr@case@angle{\gr@deppos}%
- \path[dep,\gr@DepColor] (#1)edge[out=\gr@angOUT,in=\gr@angIN] (\gr@disc);%
-}
-
-\def\gr@Z{0} \def\gr@A{30} \def\gr@B{60} \def\gr@C{80}
-
-\mkswitch[\gr@depcut]\gr@case@angle
-\addcase\gr@case@angle{}{\def\gr@ANG{0}}
-\addcase\gr@case@angle{A}{\def\gr@ANG{\gr@A}}
-\addcase\gr@case@angle{B}{\def\gr@ANG{\gr@B}}
-\addcase\gr@case@angle{C}{\def\gr@ANG{\gr@C}}
-\addcase\gr@case@angle{-A}{\def\gr@ANG{-\gr@A}}
-\addcase\gr@case@angle{-B}{\def\gr@ANG{-\gr@B}}
-\addcase\gr@case@angle{-C}{\def\gr@ANG{-\gr@C}}
-\addcase\gr@case@angle{A*}{\def\gr@ANG{\gr@A}\def\gr@angIN{180+\gr@ANG}}
-\addcase\gr@case@angle{B*}{\def\gr@ANG{\gr@B}\def\gr@angIN{180+\gr@ANG}}
-\addcase\gr@case@angle{C*}{\def\gr@ANG{\gr@C}\def\gr@angIN{180+\gr@ANG}}
-\addcase\gr@case@angle{-A*}{\def\gr@ANG{-\gr@A}\def\gr@angIN{180+\gr@ANG}}
-\addcase\gr@case@angle{-B*}{\def\gr@ANG{-\gr@B}\def\gr@angIN{180+\gr@ANG}}
-\addcase\gr@case@angle{-C*}{\def\gr@ANG{-\gr@C}\def\gr@angIN{180+\gr@ANG}}
-
-
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-curr-tab.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-curr-tab.sty
deleted file mode 100644
index 660837626e..0000000000
--- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-curr-tab.sty
+++ /dev/null
@@ -1,163 +0,0 @@
-%%%==============================================================================
-%% Copyright 2022-23 by Alceu Frigeri
-%%
-%% This work may be distributed and/or modified under the conditions of
-%%
-%% * The [LaTeX Project Public License](http://www.latex-project.org/lppl.txt),
-%% version 1.3c (or later), and/or
-%% * The [GNU Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.html),
-%% version 3 (or later)
-%%
-%% This work has the LPPL maintenance status *maintained*.
-%%
-%% The Current Maintainer of this work is Alceu Frigeri
-%%
-%% This is version 1.12 (2023/09/23)
-%%
-%% The list of files that compose this work can be found in the README.md file at
-%% https://ctan.org/pkg/ufrgscca
-%%
-%%%==============================================================================
-%% UFRGS stands for "Federal University of Rio Grande do Sul" in south Brazil
-%% EE stands for "Engineering School"
-%% CCA stands for "Control and Automation Engineering Course" (Portuguese acronym)
-%%%==============================================================================
-\NeedsTeXFormat{LaTeX2e}[2022/06/01]
-\def\tc@tmp@packname{ufrgscca-curr-tab}
-\def\tc@tmp@altpackname{ufrgsccacurrtab}
-\def\tc@tmp@packdesc{UFRGS/CCA curricula tabular commands}
-\def\tc@tmp@packdate{2023/09/23}
-\def\tc@tmp@packversion{1.12beta}
-\let\@exp\expandafter
-\@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion}
-\@exp\@exp\@exp\ProvidesPackage\@exp\@exp\@exp{\@exp\tc@tmp@packname\@exp}\@exp[\tc@tmp@packdate\space v\tc@tmp@packversion\space\tc@tmp@packdesc]
-
-\RequirePackage{longtable}
-\RequirePackage{ufrgscca-curr}
-
-\NewDocumentCommand\TabClass{m}{%
- & #1 & \csname gr@class:#1.cred\endcsname & \csname gr@class:#1.typ\endcsname & \multicolumn{2}{J{11cm}}{\csname gr@class:#1.nam\endcsname}\\*%
- \edef\gr@disc{#1}%
- \ifcsdef{gr@class:#1.depA}{%
- & & & & %
- & \def\gr@tab{\ }%
- \LstDep[\TabDepX]<A>{#1}\\*%
- }{}%
- \ifcsdef{gr@class:#1.depB}{%
- & & & & OU\\*%
- & & & & %
- & \def\gr@tab{\ }%
- \LstDep[\TabDepX]<B>{#1}\\*%
- }{}%
- \ifcsdef{gr@class:#1.depC}{%
- & & & & OU\\*%
- & & & & %
- & \def\gr@tab{\ }%
- \LstDep[\TabDepX]<C>{#1}\\*%
- }{}%
- \ifshowind{\ifcsundef{gr@class:#1.remark}%
- {}{& & & & \multicolumn{2}{l}{{\larger[2]{\color{red} \csname gr@class:#1.remark\endcsname}}}\\*}}{}%
-\xdef\gr@topic{\csname gr@class:#1.topic\endcsname}%
-& & & & \multicolumn{2}{J{11cm}}{{\sc\color{\csname gr@topic:\gr@topic.color\endcsname} \csname gr@topic:\gr@topic.txt\endcsname}}\\*
-& & & & \multicolumn{2}{l}{{\smaller{\sc Súmula: }}}\\*%
-& & & & & {{\smaller\csname gr@class:#1.desc\endcsname}}\\ %
-\ifcsundef{gr@class:#1.bibA}{}{& & & & \multicolumn{2}{l}{{\smaller{\sc Bibliografia Básica Essencial: }}}\\* & & & & &{\smaller \textopenbullet\ \csname gr@class:#1.bibA\endcsname}\\*}%
-\ifcsundef{gr@class:#1.bibB}{}{& & & & &{\smaller \textopenbullet\ \csname gr@class:#1.bibB\endcsname}\\}%
-\ifcsundef{gr@class:#1.bibC}{}{& & & & &{\smaller \textopenbullet\ \csname gr@class:#1.bibC\endcsname}\\}%
-\ifcsundef{gr@class:#1.bibD}{}{& & & & &{\smaller \textopenbullet\ \csname gr@class:#1.bibD\endcsname}\\}%
-\ifcsundef{gr@class:#1.bibE}{}{& & & & &{\smaller \textopenbullet\ \csname gr@class:#1.bibE\endcsname}\\}%
-\ifcsundef{gr@class:#1.bibF}{}{& & & & &{\smaller \textopenbullet\ \csname gr@class:#1.bibF\endcsname}\\}%
-\ifcsundef{gr@class:#1.bibG}{}{& & & & &{\smaller \textopenbullet\ \csname gr@class:#1.bibG\endcsname}\\}%
-\ifcsundef{gr@class:#1.bibH}{}{& & & & &{\smaller \textopenbullet\ \csname gr@class:#1.bibH\endcsname}\\}%
-\ifcsundef{gr@class:#1.bibI}{}{& & & & &{\smaller \textopenbullet\ \csname gr@class:#1.bibI\endcsname}\\}%
-\ifcsundef{gr@class:#1.bibJ}{}{& & & & &{\smaller \textopenbullet\ \csname gr@class:#1.bibJ\endcsname}\\}%
-\ifcsundef{gr@class:#1.basicA}{}{& & & & \multicolumn{2}{l}{{\smaller{\sc Bibliografia Básica: }}}\\* & & & & &{\smaller \textopenbullet\ \csname gr@class:#1.basicA\endcsname}\\*}%
-\ifcsundef{gr@class:#1.basicB}{}{& & & & &{\smaller \textopenbullet\ \csname gr@class:#1.basicB\endcsname}\\}%
-\ifcsundef{gr@class:#1.basicC}{}{& & & & &{\smaller \textopenbullet\ \csname gr@class:#1.basicC\endcsname}\\}%
-\ifcsundef{gr@class:#1.basicD}{}{& & & & &{\smaller \textopenbullet\ \csname gr@class:#1.basicD\endcsname}\\}%
-\ifcsundef{gr@class:#1.basicE}{}{& & & & &{\smaller \textopenbullet\ \csname gr@class:#1.basicE\endcsname}\\}%
-\ifcsundef{gr@class:#1.basicF}{}{& & & & &{\smaller \textopenbullet\ \csname gr@class:#1.basicF\endcsname}\\}%
-\ifcsundef{gr@class:#1.basicG}{}{& & & & &{\smaller \textopenbullet\ \csname gr@class:#1.basicG\endcsname}\\}%
-\ifcsundef{gr@class:#1.basicH}{}{& & & & &{\smaller \textopenbullet\ \csname gr@class:#1.basicH\endcsname}\\}%
-\ifcsundef{gr@class:#1.basicI}{}{& & & & &{\smaller \textopenbullet\ \csname gr@class:#1.basicI\endcsname}\\}%
-\ifcsundef{gr@class:#1.basicJ}{}{& & & & &{\smaller \textopenbullet\ \csname gr@class:#1.basicJ\endcsname}\\}%
-\ifcsundef{gr@class:#1.compA}{}{& & & & \multicolumn{2}{l}{{\smaller{\sc Bibliografia Complementar: }}}\\* & & & & &{\smaller \textopenbullet\ \csname gr@class:#1.compA\endcsname}\\*}%
-\ifcsundef{gr@class:#1.compB}{}{& & & & &{\smaller \textopenbullet\ \csname gr@class:#1.compB\endcsname}\\}%
-\ifcsundef{gr@class:#1.compC}{}{& & & & &{\smaller \textopenbullet\ \csname gr@class:#1.compC\endcsname}\\}%
-\ifcsundef{gr@class:#1.compD}{}{& & & & &{\smaller \textopenbullet\ \csname gr@class:#1.compD\endcsname}\\}%
-\ifcsundef{gr@class:#1.compE}{}{& & & & &{\smaller \textopenbullet\ \csname gr@class:#1.compE\endcsname}\\}%
-\ifcsundef{gr@class:#1.compF}{}{& & & & &{\smaller \textopenbullet\ \csname gr@class:#1.compF\endcsname}\\}%
-\ifcsundef{gr@class:#1.compG}{}{& & & & &{\smaller \textopenbullet\ \csname gr@class:#1.compG\endcsname}\\}%
-\ifcsundef{gr@class:#1.compH}{}{& & & & &{\smaller \textopenbullet\ \csname gr@class:#1.compH\endcsname}\\}%
-\ifcsundef{gr@class:#1.compI}{}{& & & & &{\smaller \textopenbullet\ \csname gr@class:#1.compI\endcsname}\\}%
-\ifcsundef{gr@class:#1.compJ}{}{& & & & &{\smaller \textopenbullet\ \csname gr@class:#1.compJ\endcsname}\\}%
- \\[-1.5ex]%
-}
-
-
-%%%gr@class:\gr@disc.bib\Alph{gr@class:\gr@disc.bibcnt}
-
-\NewDocumentCommand\TabDepX{m}{%
- {
- \ifshowind{\ifcsundef{gr@class:#1.remark}{}{\color{red}\bfseries}}{}
- \gr@tab\ #1 (\csname gr@class:#1.et\endcsname) %
- }
- \def\gr@tab{E}%
-}
-
-\NewDocumentCommand\TabDep{m}{%
- & & & & & #1 - \csname gr@class:#1.nam\endcsname\ (\csname gr@class:#1.et\endcsname)\\[-0.1ex]%
-}
-
-\NewDocumentCommand\TabEtp{D<>{ob}O{\notoc\section}m}{%
- #2{Etapa #3}%
- \begin{longtable}{l@{\,}l@{\ }c@{\ }c@{\ }J{5mm}@{}J{10.7cm}}%
- \LstClass[\TabClass]{#3}%
-% & \textbf{Total} & \textbf{\arabic{gr@cred#1}} & \textbf{#1}\\%
- \end{longtable}%
-}
-
-\NewDocumentCommand\@TabTopic{m}{%
- #1 & \csname gr@class:#1.cred\endcsname & \csname gr@class:#1.typ\endcsname & \csname gr@class:#1.nam\endcsname & (\csname gr@class:#1.et\endcsname)\\%
-}
-
-\NewDocumentCommand\TabTopic{O{ob}m}{%
-
-\noindent\csname gr@topic:#2.txt\endcsname
-\@ifundefined{gr@topic:#2}{\\\textbf{--No Classes Associated--}}{
- \begin{longtable}{l@{\,}l@{\ }c@{\ }J{11.2cm}@{\,}l}\smaller%
- \LstTopic[\@TabTopic]{#2}%
- \end{longtable}%
- }
-}
-
-
-\NewDocumentCommand\TabClassCompact{m}{%
- & #1 & \csname gr@class:#1.cred\endcsname & \csname gr@class:#1.typ\endcsname & \multicolumn{2}{J{11cm}}{\csname gr@class:#1.nam\endcsname}\\*%
- \edef\gr@disc{#1}%
- \ifcsdef{gr@class:#1.depA}{%
- \LstDep[\TabDep]<A>{#1}%
- }{}%
- \ifcsdef{gr@class:#1.depB}{%
- & & & & OU\\*%
- & & & & %
- & \def\gr@tab{\ }%
- \LstDep[\TabDepX]<B>{#1}%
- }{}%
- \ifcsdef{gr@class:#1.depC}{%
- & & & & OU\\*%
- & & & & %
- & \def\gr@tab{\ }%
- \LstDep[\TabDepX]<C>{#1}%
- }{}%
-}
-
-\NewDocumentCommand\TabEtpCompact{D<>{ob}O{}m}{%
- %#2{Etapa #3}%
- \begin{tabular}{l@{\,}l@{\ }c@{\ }c@{\ }J{4mm}@{}J{10cm}}%
- &{\larger\textbf{Etapa #3}}\\
- \LstClass[\TabClassCompact]{#3}%
-% & \textbf{Total} & \textbf{\arabic{gr@cred#1}} & \textbf{#1}\\%
- \end{tabular}%
-}
-
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-curr.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-curr.sty
index c13ef1509a..51dd5a43ef 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 1.12 (2023/09/23)
+%% This is version {2.0} {2023/11/23}
%%
%% The list of files that compose this work can be found in the README.md file at
%% https://ctan.org/pkg/ufrgscca
@@ -23,128 +23,659 @@
%% CCA stands for "Control and Automation Engineering Course" (Portuguese acronym)
%%%==============================================================================
\NeedsTeXFormat{LaTeX2e}[2022/06/01]
-\def\tc@tmp@packname{ufrgscca-curr}
-\def\tc@tmp@altpackname{ufrgsccacurr}
-\def\tc@tmp@packdesc{UFRGS/CCA curricula commands}
-\def\tc@tmp@packdate{2023/09/23}
-\def\tc@tmp@packversion{1.12beta}
-\let\@exp\expandafter
-\@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion}
-\@exp\@exp\@exp\ProvidesPackage\@exp\@exp\@exp{\@exp\tc@tmp@packname\@exp}\@exp[\tc@tmp@packdate\space v\tc@tmp@packversion\space\tc@tmp@packdesc]
-
-
-\newcounter{gr@credob}
-\newcounter{gr@credel}
-\newcounter{gr@credalt}
-\newcounter{gr@credad}
-\NewDocumentCommand{\gr@setcred}{}{\setcounter{gr@credob}{0}\setcounter{gr@credel}{0}\setcounter{gr@credalt}{0}}
-\NewDocumentCommand{\gr@addclasscred}{m}{\addtocounter{gr@cred\csname gr@class:#1.typ\endcsname}{\csname gr@class:#1.cred\endcsname}}
-
-\let\@ex\expandafter
-
-%%%%%%%%%%%
-%%%%%%%%%%%
-%%%%%%%%%%%
-
-\NewDocumentCommand\topicdef{O{black}mm}{
- \expandafter\gdef\csname gr@topic:#2.txt\endcsname{#3}%
- \expandafter\gdef\csname gr@topic:#2.color\endcsname{#1}%
-}
-\NewDocumentCommand\defaulttopic{m}{\xdef\gr@defaulttopic{#1}}
-%%%%%%%%%%%
-%%%%%%%%%%%
-%%%%%%%%%%%
+\ProvidesExplPackage
+ {ufrgscca-curr}
+ {2023/11/23}
+ {2.0}
+ {UFRGS/CCA curricula commands}
-\NewDocumentCommand\semdef{O{#3}D<>{#3}m}{%
- \expandafter\gdef\csname gr@et:#3.idx\endcsname{x#3}%
- \expandafter\gdef\csname gr@etidx:x#3.cod\endcsname{#2}%
- \expandafter\gdef\csname gr@etidx:x#3.nam\endcsname{#3}%
- \expandafter\gdef\csname gr@etidx:x#3.pos\endcsname{#1}%
- \gdef\gr@sem{#3}%
- \gdef\gr@semcod{#2}%
-}
-%%%%%%%%%%%
-%%%%%%%%%%%
-%%%%%%%%%%%
-
-\NewDocumentCommand\classdef{O{\gr@defaulttopic}D<>{}mmmmm}{%
- \@ifundefined{gr@topic:#1.txt}%
- {\expandafter\gdef\csname gr@class:#3.topic\endcsname{\gr@defaulttopic}}%
- {\expandafter\gdef\csname gr@class:#3.topic\endcsname{#1}}%
- \expandafter\gdef\csname gr@class:#3.pos\endcsname{#2}%
- \expandafter\gdef\csname gr@class:#3.cred\endcsname{#4}%
- \expandafter\gdef\csname gr@class:#3.typ\endcsname{#5}%
- \expandafter\gdef\csname gr@class:#3.nam\endcsname{#6}%
- \expandafter\gdef\csname gr@class:#3.desc\endcsname{#7}%
- \expandafter\xdef\csname gr@class:#3.et\endcsname{\gr@semcod}%
- \gdef\gr@disc{#3}
- \newcounter{gr@class:#3.bibcnt}
- \newcounter{gr@class:#3.basiccnt}
- \newcounter{gr@class:#3.compcnt}
- \newcounter{gr@class:#3.dep}
- \stepcounter{gr@class:#3.dep}
- \ifcsundef{gr@et:\gr@sem}{\csgdef{gr@et:\gr@sem}{#3}}{\csgappto{gr@et:\gr@sem}{,#3}}
- \ifcsundef{gr@topic:#1}{\csgdef{gr@topic:#1}{#3}}{\csgappto{gr@topic:#1}{,#3}}
-}
-\NewDocumentCommand{\setclass}{m}{\ifcsundef{gr@class:#1.et}{{\color{red} #1 undef\\}}{\gdef\gr@disc{#1}}}
+%%%%%%%
+%%%
+%%% Just an attempt of having my packages info in a regular way
+%%% Idea being: { <pck-name> / pkg info } for each and all.
+%%%
+%%%%%%%
+\keys_define:nn { ufrgscca-curr / pkg info}
+ {
+ name .code:n = {ufrgscca-curr} ,
+ prefix .code:n = {ufrgscca} ,
+ date .code:n = {2023/11/23},
+ version .code:n = {2.0} ,
+ description .code:n = {UFRGS/CCA~ curricula~ commands}
+ }
+\cs_if_exist:NF \__codedesc_pkg_info:nn
+ {
+ \cs_new_protected:Npn \__codedesc_pkg_info:nn #1#2
+ { \keys_set:nn {#1 / pkg info}{#2} }
+ }
+\cs_if_exist:NF \PkgInfo
+ { \NewDocumentCommand \PkgInfo {mm} { \keys_set:nn {#1 / pkg info}{#2} } }
+\cs_if_exist:NF \PkgDescription
+ {
+ \NewDocumentCommand \PkgDescription {m}
+ {
+ \noindent Package~ \textbf{\PkgInfo{#1}{name}}~Version:~\PkgInfo{#1}{version}~ -~ \PkgInfo{#1}{date}\par \emph{\PkgInfo{#1}{description}}~\par
+ }
+ }
+%%%%%%%
+%%% End of cut-n-paste
+%%%%%%%
-\NewDocumentCommand{\classremark}{m}{%
- \expandafter\gdef\csname gr@class:\gr@disc.remark\endcsname{#1}%
-}
-%%%%%%%%%%%
-%%%%%%%%%%%
-%%%%%%%%%%%
+\starray_new:n {topics}
+\starray_new:n {classes}
+\starray_new:n {curricula}
-\NewDocumentCommand\depdef{O{\csname gr@class:\gr@disc.topic\endcsname}D<>{}m}{%
- \ifcsundef{gr@class:\gr@disc.dep\Alph{gr@class:\gr@disc.dep}}{\csgdef{gr@class:\gr@disc.dep\Alph{gr@class:\gr@disc.dep}}{#3}}{\csgappto{gr@class:\gr@disc.dep\Alph{gr@class:\gr@disc.dep}}{,#3}}
- \expandafter\gdef\csname gr@class:\gr@disc.dep\Alph{gr@class:\gr@disc.dep}:#3.topic\endcsname{#1}%
- \expandafter\gdef\csname gr@class:\gr@disc.dep\Alph{gr@class:\gr@disc.dep}:#3.pos\endcsname{#2}%
-}
+\starray_def_from_keyval:nn {topics}
+ {
+ self = ,
+ name = ,
+ color = ,
+ class lst = , %list (sequence) of classes
+ }
-%%%%%%%%%%%
-%%%%%%%%%%%
-%%%%%%%%%%%
+\starray_def_from_keyval:nn {classes}
+ {
+ cred = ,
+ self = ,
+ name = ,
+ summary = ,
+ topic = ,
+ remark = ,
+ bib seq = ,
+ bib basic seq = ,
+ bib compl seq = ,
+ ref . struct = {
+ curr = ,
+ sem = ,
+ kind = ,
+ } ,
+ }
-\NewDocumentCommand\bibdef{O{bib}m}{%
- \stepcounter{gr@class:\gr@disc.#1cnt}%
- \expandafter\gdef\csname gr@class:\gr@disc.#1\Alph{gr@class:\gr@disc.#1cnt}\endcsname{#2}%
-}
+\starray_def_from_keyval:nn {curricula}
+ {
+ self = ,
+ name = ,
+ text = ,
+ sem.struct = {
+ pos = ,
+ self = ,
+ name = ,
+ class . struct = {
+ name = ,
+ kind = ,
+ obs = ,
+ pos = ,
+ color = ,
+ prereqset . struct = {
+ prereq . struct = {
+ starred = ,
+ name = ,
+ ang = ,
+ }
+ } ,
+ } ,
+ } ,
+ }
+\NewDocumentCommand{\currdef}{mmm}
+ {
+ \starray_new_term:nn {curricula}{#1}
+ \starray_set_from_keyval:nn {curricula}
+ {
+ self = {#1} ,
+ name = {#2} ,
+ text = {#3} ,
+ }
+ }
-%%%%%%%%%%%
-%%%%%%%%%%%
-%%%%%%%%%%%
+\NewDocumentCommand{\semdef}{mmm}
+ {
+ \starray_new_term:nn {curricula.sem}{#1}
+ \starray_set_from_keyval:nn {curricula.sem}
+ {
+ self = {#1} ,
+ name = {#2} ,
+ pos = {#3} ,
+ }
+ }
+\NewDocumentCommand{\addclass}{O{}D<>{}mmO{}}
+ {
+ \starray_new_term:nn {curricula.sem.class}{#3}
+ \starray_set_from_keyval:nn {curricula.sem.class}
+ {
+ color = {#1} ,
+ pos = {#2} ,
+ name = {#3} ,
+ kind = {#4} ,
+ obs = {#5} ,
+ }
+ \starray_new_term:nn {curricula.sem.class.prereqset}{}
+ \starray_set_iter_from_hash:nn {classes}{#3}
-\NewDocumentCommand\altdef{}{%
- \stepcounter{gr@class:\gr@disc.dep}%
-}
+ \starray_new_term:nn {classes.ref}{}
+ \starray_get_prop:nnN {curricula}{self} \l_tmpa_tl
+ \starray_set_prop:nnV {classes.ref}{curr} \l_tmpa_tl
+ \starray_get_prop:nnN {curricula.sem}{self} \l_tmpa_tl
+ \starray_set_prop:nnV {classes.ref}{sem} \l_tmpa_tl
+ \starray_set_prop:nnn {classes.ref}{kind}{#4}
+ }
-%%%%%%%%%%%
-%%%%%%%%%%%
-%%%%%%%%%%%
+\NewDocumentCommand{\depdef}{sD<>{}m}
+ {
+ \starray_new_term:nn {curricula.sem.class.prereqset.prereq}{#3}
+ \starray_set_from_keyval:nn {curricula.sem.class.prereqset.prereq}
+ {
+ starred = {#1} ,
+ name = {#3} ,
+ ang = {#2}
+ }
+ }
-\NewDocumentCommand\goo{m}{}
-\NewDocumentCommand\gooble{m}{}
+\NewDocumentCommand{\altdep}{}
+ {
+ \starray_new_term:nn {curricula.sem.class.prereqset}{}
+ }
-\NewDocumentCommand\LstDep{O{\goo}D<>{A}m}{%
- \xdef\gr@disc{#3}%
- \xdef\gr@depSeq{#2}%
- \ifcsdef{gr@class:#3.dep#2}{\@ex\@ex\@ex\forcsvlist\@ex\@ex\@ex#1\@ex\@ex\@ex{\csname gr@class:#3.dep#2\endcsname}}{}
-}
-\NewDocumentCommand\LstClass{O{\gooble}m}{%
-\xdef\gr@sem{#2}%
-\gr@setcred%
-\@ex\@ex\@ex\forcsvlist\@ex\@ex\@ex\gr@addclasscred\@ex\@ex\@ex{\csname gr@et:#2\endcsname}%
-\@ex\@ex\@ex\forcsvlist\@ex\@ex\@ex#1\@ex\@ex\@ex{\csname gr@et:#2\endcsname}%
+
+
+\NewDocumentCommand\topicdef{O{}mm}
+ {
+ \starray_new_term:nn {topics}{#2}
+ \starray_set_from_keyval:nn {topics}
+ {
+ self = {#2} ,
+ name = {#3} ,
+ color = {#1} ,
+ }
+% \seq_clear:N \l_tmpa_seq
+ \starray_set_prop:nnV {topics}{class lst} \c_empty_seq
+ }
+
+\tl_new:N \l__ufrgscca_default_topic_tl
+\NewDocumentCommand\defaulttopic{m}
+ { \tl_set:Ne \l__ufrgscca_default_topic_tl{#1} }
+
+
+\NewDocumentCommand{\classdef}{O{\l__ufrgscca_default_topic_tl}mmm}
+ {
+ \starray_new_term:nn {classes}{#2}
+ \starray_set_from_keyval:nn {classes}
+ {
+ self = {#2} ,
+ cred = {#3} ,
+ name = {#4} ,
+ topic = {#1} ,
+ }
+% \seq_clear:N \l_tmpa_seq
+ \starray_set_prop:nnV {classes}{bib seq} \c_empty_seq
+ \starray_set_prop:nnV {classes}{bib basic seq} \c_empty_seq
+ \starray_set_prop:nnV {classes}{bib compl seq} \c_empty_seq
+
+ \starray_set_iter_from_hash:nn {topics}{#1}
+ \starray_get_prop:nnN {topics}{class lst} \l_tmpa_seq
+ \seq_put_right:Nn \l_tmpa_seq{#2}
+ \starray_set_prop:nnV {topics}{class lst} \l_tmpa_seq
+ }
+\NewDocumentCommand{\csummary}{m}
+ {
+ \starray_set_prop:nnn {classes}{summary}{#1}
+ }
+
+
+\NewDocumentCommand{\classremark}{m}
+ {
+ \starray_set_prop:nnn {classes}{remark}{#1}
+ }
+
+\NewDocumentCommand{\bibdef}{O{main}m}
+ {
+ \str_case:nnF {#1}
+ {
+ {main}
+ {
+ \starray_get_prop:nnN {classes}{bib seq} \l_tmpa_seq
+ \seq_put_right:Nn \l_tmpa_seq {#2}
+ \starray_set_prop:nnV {classes}{bib seq} \l_tmpa_seq
+ }
+ {basic}%{ \starray_get_prop:nnN {classes}{bib basic seq} \l_tmpa_seq }
+ {
+ \starray_get_prop:nnN {classes}{bib basic seq} \l_tmpa_seq
+ \seq_put_right:Nn \l_tmpa_seq {#2}
+ \starray_set_prop:nnV {classes}{bib basic seq} \l_tmpa_seq
+ }
+ {compl}%{ \starray_get_prop:nnN {classes}{bib compl seq} \l_tmpa_seq }
+ {
+ \starray_get_prop:nnN {classes}{bib compl seq} \l_tmpa_seq
+ \seq_put_right:Nn \l_tmpa_seq {#2}
+ \starray_set_prop:nnV {classes}{bib compl seq} \l_tmpa_seq
+ }
+ }
+ {
+ \starray_get_prop:nnN {classes}{bib seq} \l_tmpa_seq
+ \seq_put_right:Nn \l_tmpa_seq {#2}
+ \starray_set_prop:nnV {classes}{bib seq} \l_tmpa_seq
+ }
+ }
+
+\NewDocumentCommand{\classset}{m}
+ {
+ \starray_set_iter_from_hash:nn {classes}{#1}
+ }
+\let\setclass\classset
+
+%\NewDocumentCommand\xTabEtp{O{\notoc\section}m}{%
+
+\cs_generate_variant:Nn \starray_set_iter_from_hash:nn {ne}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%
+%%%
+%%%
+%%%
+%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\tl_new:N \l__ufrgscca_tmp_class_tl
+\tl_new:N \l__ufrgscca_tmp_name_tl
+\tl_new:N \l__ufrgscca_tmp_obs_tl
+\tl_new:N \l__ufrgscca_tmp_kind_tl
+\tl_new:N \l__ufrgscca_tmp_cred_tl
+\tl_new:N \l__ufrgscca_tmp_topic_tl
+\tl_new:N \l__ufrgscca_tmp_color_tl
+\tl_new:N \l__ufrgscca_tmp_summary_tl
+\tl_new:N \l__ufrgscca_tmp_OR_tl
+\seq_new:N \l__ufrgscca_tmp_bib_seq
+\seq_new:N \l__ufrgscca_tmp_bibB_seq
+\seq_new:N \l__ufrgscca_tmp_prereq_seq
+\bool_new:N \l__ufrgscca_tmp_second_bool
+
+\NewDocumentCommand\TabEtp{sO{\notoc\section}mO{\footnotesize}}{%
+ \starray_set_iter_from_hash:nn {curricula.sem}{#3}
+ \bool_if:nTF {#1}
+ {
+ #4
+ \begin{tabular}{l@{\,}l@{\ }c@{\ }c@{\ }J{5mm}@{}J{10.2cm}}%
+ \starray_get_prop:nnN {curricula.sem}{name} \l__ufrgscca_tmp_name_tl
+ \use:e { & \exp_not:N \multicolumn{5}{J{11cm}}{\exp_not:N \textbf{\l__ufrgscca_tmp_name_tl}}}\\*
+ }
+ {
+ \starray_term_syntax:n {curricula.sem}
+ #2{\starray_parsed_get_prop:n {name}}
+ #4
+ \begin{longtable}{l@{\,}l@{\ }c@{\ }c@{\ }J{5mm}@{}J{10.2cm}}%
+ }
+
+ \starray_iterate_over:nn {curricula.sem.class}
+ {
+ \starray_get_prop:nnN {curricula.sem.class}{name} \l__ufrgscca_tmp_class_tl
+ \starray_get_prop:nnN {curricula.sem.class}{kind} \l__ufrgscca_tmp_kind_tl
+ \starray_get_prop:nnN {curricula.sem.class}{color} \l__ufrgscca_tmp_color_tl
+ \starray_set_iter_from_hash:ne {classes}{\l__ufrgscca_tmp_class_tl}
+ \starray_get_prop:nnN {classes}{name} \l__ufrgscca_tmp_name_tl
+ \starray_get_prop:nnN {classes}{cred} \l__ufrgscca_tmp_cred_tl
+ \tl_if_empty:NT \l__ufrgscca_tmp_color_tl
+ {
+ \tl_set:Nn \l__ufrgscca_tmp_color_tl {black}
+ }
+
+ %% class identification
+ \bool_if:NTF \l__ufrgscca_showind_bool
+ {
+ \use:e { & \l__ufrgscca_tmp_class_tl
+ & \l__ufrgscca_tmp_cred_tl
+ & \l__ufrgscca_tmp_kind_tl
+ & \exp_not:N \multicolumn{2}{J{10.5cm}}{\exp_not:N \textcolor{\l__ufrgscca_tmp_color_tl}{\l__ufrgscca_tmp_name_tl}}\\*
+ }
+ }
+ {
+ \use:e { & \l__ufrgscca_tmp_class_tl
+ & \l__ufrgscca_tmp_cred_tl
+ & \l__ufrgscca_tmp_kind_tl
+ & \exp_not:N \multicolumn{2}{J{10.5cm}}{\l__ufrgscca_tmp_name_tl}\\*
+ }
+ }
+
+ %% Pre-reqs
+ \bool_gset_false:N \l__ufrgscca_tmp_second_bool
+ \starray_iterate_over:nn {curricula.sem.class.prereqset}
+ {
+ \seq_gclear:N \l__ufrgscca_tmp_prereq_seq
+ \starray_iterate_over:nn {curricula.sem.class.prereqset.prereq}
+ {
+ \starray_get_prop:nnN {curricula.sem.class.prereqset.prereq}{name} \l_tmpa_tl
+ \seq_gput_right:Ne \l__ufrgscca_tmp_prereq_seq {\l_tmpa_tl}
+ }
+ \seq_if_empty:NF \l__ufrgscca_tmp_prereq_seq
+ {
+ \bool_if:NTF \l__ufrgscca_tmp_second_bool
+ {
+ & & & & \multicolumn{2}{J{11cm}}{\smaller\makebox[10mm][l]{~\ ~OU}\seq_use:Nn \l__ufrgscca_tmp_prereq_seq {~E~} }\\*
+ }
+ {
+ & & & & \multicolumn{2}{J{11cm}}{\smaller\makebox[10mm][l]{}\seq_use:Nn \l__ufrgscca_tmp_prereq_seq {~E~} }\\*
+ \bool_gset_true:N \l__ufrgscca_tmp_second_bool
+ }
+ }
+ }
+ \starray_get_prop:nnN {curricula.sem.class}{obs} \l__ufrgscca_tmp_obs_tl
+ \tl_if_empty:NF \l__ufrgscca_tmp_obs_tl
+ {
+ \use:e { & & & & & {\exp_not:N \scriptsize{\exp_not:N \emph{\l__ufrgscca_tmp_obs_tl}}}\\* }
+ }
+ \bool_if:nF {#1}
+ {
+ %% Topic
+ \starray_get_prop:nnN {classes}{topic} \l__ufrgscca_tmp_topic_tl
+ \starray_set_iter_from_hash:ne {topics}{\l__ufrgscca_tmp_topic_tl}
+ \starray_get_prop:nnN {topics}{name} \l__ufrgscca_tmp_topic_tl
+ \starray_get_prop:nnN {topics}{color} \l__ufrgscca_tmp_color_tl
+ \tl_if_empty:NT \l__ufrgscca_tmp_color_tl
+ {
+ \tl_set:Nn \l__ufrgscca_tmp_color_tl {black}
+ }
+
+ \use:e { & & & & \exp_not:N \multicolumn{2}{J{11cm}}{\exp_not:N \smaller \exp_not:N \scshape\exp_not:N \textcolor{\l__ufrgscca_tmp_color_tl}{\l__ufrgscca_tmp_topic_tl}}\\* }
+
+ %% class summary
+ & & & & \multicolumn{2}{J{11cm}}{\smaller\scshape Súmula}\\*
+
+ \starray_get_prop:nnN {classes}{summary} \l__ufrgscca_tmp_summary_tl
+ \use:e { & & & & & \exp_not:N \smaller \l__ufrgscca_tmp_summary_tl\\*}
+
+ %% bibliography I
+ \starray_get_prop:nnN {classes}{bib seq} \l__ufrgscca_tmp_bib_seq
+ \seq_gset_eq:NN \l__ufrgscca_tmp_bibB_seq \l__ufrgscca_tmp_bib_seq
+ \seq_if_empty:NF \l__ufrgscca_tmp_bibB_seq
+ {
+ & & & & \multicolumn{2}{J{11cm}}{\smaller\scshape Bibliografia~ Básica~ Essencial}\\*
+ \seq_map_inline:Nn \l__ufrgscca_tmp_bibB_seq
+ {
+ & & & & & \smaller\textopenbullet ~\ ~ ##1\\
+ }
+ }
+
+ %% bibliography II
+ \starray_get_prop:nnN {classes}{bib basic seq} \l__ufrgscca_tmp_bib_seq
+ \seq_gset_eq:NN \l__ufrgscca_tmp_bibB_seq \l__ufrgscca_tmp_bib_seq
+ \seq_if_empty:NF \l__ufrgscca_tmp_bibB_seq
+ {
+ & & & & \multicolumn{2}{J{11cm}}{\smaller\scshape Bibliografia~ Básica}\\*
+ \seq_map_inline:Nn \l__ufrgscca_tmp_bibB_seq
+ {
+ & & & & & \smaller\textopenbullet ~\ ~ ##1\\
+ }
+ }
+
+ %% bibliography III
+ \starray_get_prop:nnN {classes}{bib compl seq} \l__ufrgscca_tmp_bib_seq
+ \seq_gset_eq:NN \l__ufrgscca_tmp_bibB_seq \l__ufrgscca_tmp_bib_seq
+ \seq_if_empty:NF \l__ufrgscca_tmp_bibB_seq
+ {
+ & & & & \multicolumn{2}{J{11cm}}{\smaller\scshape Bibliografia~ Complementar}\\*
+ \seq_map_inline:Nn \l__ufrgscca_tmp_bibB_seq
+ {
+ & & & & & \smaller\textopenbullet ~\ ~ ##1\\
+ }
+ }
+ \\[-1.5mm]
+ }
+ }
+ \bool_if:nTF {#1}
+ {
+ \end{tabular}
+ }
+ {
+ \end{longtable}
+ }
}
-\NewDocumentCommand\LstTopic{O{\goo}m}{%
-\xdef\gr@topic{#2}%
-\@ex\@ex\@ex\forcsvlist\@ex\@ex\@ex#1\@ex\@ex\@ex{\csname gr@topic:#2\endcsname}%
+
+\seq_new:N \l__ufrgscca_tmp_classlst_seq
+
+\NewDocumentCommand{\TabTopic}{m}
+ {
+ \starray_set_iter_from_hash:nnTF {topics}{#1}
+ {
+ \begin{tabular}{l@{\,}l@{\ -\ }J{11.5cm}}
+ \starray_get_prop:nnN {topics}{name} \l__ufrgscca_tmp_name_tl
+ \starray_get_prop:nnN {topics}{color} \l__ufrgscca_tmp_color_tl
+ \tl_if_empty:NF \l__ufrgscca_tmp_color_tl
+ {
+ \tl_set:Nn \l__ufrgscca_tmp_color_tl {black}
+ }
+ \use:e { & \exp_not:N \multicolumn{2}{J{11cm}}{\exp_not:N \textcolor{\l__ufrgscca_tmp_color_tl}{\exp_not:N \textbf{\l__ufrgscca_tmp_name_tl} }}}\\\hline
+ \starray_get_prop:nnN {topics}{class lst} \l__ufrgscca_tmp_classlst_seq
+ \seq_map_inline:Nn \l__ufrgscca_tmp_classlst_seq
+ {
+ \starray_set_iter_from_hash:nn {classes}{##1}
+ \starray_get_prop:nnN {classes}{name} \l__ufrgscca_tmp_name_tl
+ \use:e { & ##1 & \l__ufrgscca_tmp_name_tl\\}
+
+ }
+ \end{tabular}
+ }
+ {
+ \textbf{--Topic #1 non existant--}
+ }
+ }
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%
+%%%
+%%%
+%%%
+%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\bool_new:N \l__ufrgscca_colors_topic_bool
+\bool_new:N \l__ufrgscca_colors_class_bool
+
+\keys_define:nn { ufrgscca / curr graph}
+ {
+ deltaX .usage:n = general,
+ deltaX .fp_set:N = \l__ufrgscca_graph_deltaX_fp,
+ deltaX .value_required:n = true,
+ deltaX .initial:n = {4.2},
+
+ deltaY .usage:n = general,
+ deltaY .fp_set:N = \l__ufrgscca_graph_deltaY_fp,
+ deltaY .value_required:n = true,
+ deltaY .initial:n = {2.1},
+
+ clipminX .usage:n = general,
+ clipminX .fp_set:N = \l__ufrgscca_graph_clip_minX_fp,
+ clipminX .value_required:n = true,
+ clipminX .initial:n = {0},
+
+ maxX .usage:n = general,
+ maxX .fp_set:N = \l__ufrgscca_graph_maxX_fp,
+ maxX .value_required:n = true,
+ maxX .initial:n = {11.5},
+
+ clipminY .usage:n = general,
+ clipminY .fp_set:N = \l__ufrgscca_graph_clip_minY_fp,
+ clipminY .value_required:n = true,
+ clipminY .initial:n = {0},
+
+ maxY .usage:n = general,
+ maxY .fp_set:N = \l__ufrgscca_graph_maxY_fp,
+ maxY .value_required:n = true,
+ maxY .initial:n = {-18.5},
+
+ graph~ title .usage:n = general,
+ graph~ title .tl_set:N = \l__ufrgscca_graph_title_tl,
+ graph~ title .value_required:n = true,
+ graph~ title .initial:n = {Graph Title},
+
+ default~ color .usage:n = general,
+ default~ color .tl_set:N = \l__ufrgscca_graph_default_color_tl,
+ default~ color .value_required:n = true,
+ default~ color .initial:n = {black},
+
+ colors .usage:n = general,
+ colors .choice: ,
+ colors / none .code:n = {
+ \bool_set_false:N \l__ufrgscca_colors_topic_bool
+ \bool_set_false:N \l__ufrgscca_colors_class_bool
+ } ,
+ colors / topic .code:n = {
+ \bool_set_true:N \l__ufrgscca_colors_topic_bool
+ \bool_set_false:N \l__ufrgscca_colors_class_bool
+ } ,
+ colors / class .code:n = {
+ \bool_set_false:N \l__ufrgscca_colors_topic_bool
+ \bool_set_true:N \l__ufrgscca_colors_class_bool
+ } ,
+ colors / both .code:n = {
+ \bool_set_true:N \l__ufrgscca_colors_topic_bool
+ \bool_set_true:N \l__ufrgscca_colors_class_bool
+ } ,
+ colors / unknown .code:n = {
+ \bool_set_false:N \l__ufrgscca_colors_topic_bool
+ \bool_set_false:N \l__ufrgscca_colors_class_bool
+ } ,
+ }
+
+\keys_define:nn { ufrgscca / graph angles}
+ {
+ }
+
+\NewDocumentEnvironment{tikzGraphSem}{O{}}{%
+ \bool_set_false:N \l__ufrgscca_colors_topic_bool
+ \bool_set_false:N \l__ufrgscca_colors_class_bool
+
+ \keys_set:nn {ufrgscca / curr graph}{#1}
+ \fp_set:Nn \l__ufrgscca_graph_clip_maxX_fp {\l__ufrgscca_graph_maxX_fp * \l__ufrgscca_graph_deltaX_fp }
+ \fp_set:Nn \l__ufrgscca_graph_clip_maxY_fp {\l__ufrgscca_graph_maxY_fp * \l__ufrgscca_graph_deltaY_fp }
+ \begin{tikzpicture}[%
+ disc/.style={%
+ ellipse~ split, double, draw, line~ width=2pt,%
+ every~ text~ node part/.style={font=\small\bfseries},%
+ every~ lower~ node part/.style={font=\large\bfseries,color=blue}},%
+ dep/.style={->,dotted,line~ width=3pt}]%
+ \begin{scope}
+ \clip ( \fp_use:N \l__ufrgscca_graph_clip_minX_fp , \fp_use:N \l__ufrgscca_graph_clip_minY_fp )
+ -- ( \fp_use:N \l__ufrgscca_graph_clip_minX_fp , \fp_use:N \l__ufrgscca_graph_clip_maxY_fp )
+ -- ( \fp_use:N \l__ufrgscca_graph_clip_maxX_fp , \fp_use:N \l__ufrgscca_graph_clip_maxY_fp )
+ -- ( \fp_use:N \l__ufrgscca_graph_clip_maxX_fp , \fp_use:N \l__ufrgscca_graph_clip_minY_fp );
+ \filldraw[color=red]
+ ( \fp_eval:n {0.5*\l__ufrgscca_graph_clip_maxX_fp} , \fp_eval:n {-0.25*\l__ufrgscca_graph_deltaY_fp} ) node{\Huge\textbf{\l__ufrgscca_graph_title_tl}};%
+}{%
+ \end{scope}%
+ \end{tikzpicture}%
}
+
+
+\fp_new:N \l__ufrgscca_tmp_posX_fp
+\bool_new:N \l__ufrgscca_tmp_starred_bool
+\tl_new:N \l__ufrgscca_tmp_prereq_name_tl
+\tl_new:N \l__ufrgscca_graph_color_tl
+
+\NewDocumentCommand{\GraphEtp}{m}
+ {
+ \starray_set_iter_from_hash:nn {curricula.sem}{#1}
+ \starray_get_prop:nnN {curricula.sem}{pos} \l__ufrgscca_tmp_pos_tl
+ \starray_get_prop:nnN {curricula.sem}{name} \l__ufrgscca_tmp_name_tl
+ \fp_set:Nn \l__ufrgscca_tmp_posX_fp {\l__ufrgscca_tmp_pos_tl * \l__ufrgscca_graph_deltaX_fp - 0.5*\l__ufrgscca_graph_deltaX_fp}
+ \draw
+ ( \fp_use:N \l__ufrgscca_tmp_posX_fp , \fp_eval:n {-\l__ufrgscca_graph_deltaY_fp} )
+ node[disc](#1) {\l__ufrgscca_tmp_name_tl };
+ \starray_iterate_over:nn {curricula.sem.class}
+ {
+ \starray_get_prop:nnN {curricula.sem.class}{pos} \l__ufrgscca_tmp_pos_tl
+ \starray_get_prop:nnN {curricula.sem.class}{name} \l__ufrgscca_tmp_name_tl
+ \starray_set_iter_from_hash:ne {classes}{\l__ufrgscca_tmp_name_tl}
+ \starray_get_prop:nnN {classes}{cred} \l__ufrgscca_tmp_cred_tl
+ \starray_get_prop:nnN {classes}{topic} \l__ufrgscca_tmp_topic_tl
+ \tl_set:Ne \l__ufrgscca_graph_color_tl {\l__ufrgscca_graph_default_color_tl}
+ \bool_if:NT \l__ufrgscca_colors_topic_bool
+ {
+ \starray_set_iter_from_hash:ne {topics}{\l__ufrgscca_tmp_topic_tl}
+ \starray_get_prop:nnN {topics}{color} \l__ufrgscca_tmp_color_tl
+ \tl_if_empty:NF \l__ufrgscca_tmp_color_tl
+ {
+ \tl_set:Ne \l__ufrgscca_graph_color_tl {\l__ufrgscca_tmp_color_tl}
+ }
+ }
+ \bool_if:NT \l__ufrgscca_colors_class_bool
+ {
+ \starray_get_prop:nnN {curricula.sem.class}{color} \l__ufrgscca_tmp_color_tl
+ \tl_if_empty:NF \l__ufrgscca_tmp_color_tl
+ {
+ \tl_set:Ne \l__ufrgscca_graph_color_tl {\l__ufrgscca_tmp_color_tl}
+ }
+ }
+
+ \draw
+ ( \fp_use:N \l__ufrgscca_tmp_posX_fp , \fp_eval:n {\l__ufrgscca_tmp_pos_tl * \l__ufrgscca_graph_deltaY_fp - 1.25 * \l__ufrgscca_graph_deltaY_fp} )
+ node[disc,\l__ufrgscca_graph_color_tl](\l__ufrgscca_tmp_name_tl) {\l__ufrgscca_tmp_name_tl \nodepart{lower} \l__ufrgscca_tmp_cred_tl ~\ ~créd.};%
+ \starray_iterate_over:nn {curricula.sem.class.prereqset}
+ {
+ \starray_iterate_over:nn {curricula.sem.class.prereqset.prereq}
+ {
+ \starray_get_prop:nnN {curricula.sem.class.prereqset.prereq}{starred} \l__ufrgscca_tmp_starred_bool
+ \bool_if:NF \l__ufrgscca_tmp_starred_bool
+ {
+ \starray_get_prop:nnN {curricula.sem.class.prereqset.prereq}{name} \l__ufrgscca_tmp_prereq_name_tl
+ \starray_get_prop:nnN {curricula.sem.class.prereqset.prereq}{ang} \l__ufrgscca_tmp_ang_tl
+ \StrCut{\l__ufrgscca_tmp_ang_tl}{:}{\l__ufrgscca_partA_tl}{\l__ufrgscca_partB_tl}
+ \tl_if_empty:NTF \l__ufrgscca_partB_tl
+ {
+ \str_case:NnF \l__ufrgscca_partA_tl
+ {
+ {A} { \tl_set:Nn \l__ufrgscca_angOUT_tl {30}
+ \tl_set:Nn \l__ufrgscca_angIN_tl {180-30} }
+ {B} { \tl_set:Nn \l__ufrgscca_angOUT_tl {60}
+ \tl_set:Nn \l__ufrgscca_angIN_tl {180-60} }
+ {C} { \tl_set:Nn \l__ufrgscca_angOUT_tl {80}
+ \tl_set:Nn \l__ufrgscca_angIN_tl {180-80} }
+ {-A} { \tl_set:Nn \l__ufrgscca_angOUT_tl {-30}
+ \tl_set:Nn \l__ufrgscca_angIN_tl {180+30} }
+ {-B} { \tl_set:Nn \l__ufrgscca_angOUT_tl {-60}
+ \tl_set:Nn \l__ufrgscca_angIN_tl {180+60} }
+ {-C} { \tl_set:Nn \l__ufrgscca_angOUT_tl {-80}
+ \tl_set:Nn \l__ufrgscca_angIN_tl {180+80} }
+ {A*} { \tl_set:Nn \l__ufrgscca_angOUT_tl {30}
+ \tl_set:Nn \l__ufrgscca_angIN_tl {180+30} }
+ {B*} { \tl_set:Nn \l__ufrgscca_angOUT_tl {60}
+ \tl_set:Nn \l__ufrgscca_angIN_tl {180+60} }
+ {C*} { \tl_set:Nn \l__ufrgscca_angOUT_tl {80}
+ \tl_set:Nn \l__ufrgscca_angIN_tl {180+80} }
+ {-A*} { \tl_set:Nn \l__ufrgscca_angOUT_tl {-30}
+ \tl_set:Nn \l__ufrgscca_angIN_tl {180-30} }
+ {-B*} { \tl_set:Nn \l__ufrgscca_angOUT_tl {60}
+ \tl_set:Nn \l__ufrgscca_angIN_tl {180-60} }
+ {-C*} { \tl_set:Nn \l__ufrgscca_angOUT_tl {80}
+ \tl_set:Nn \l__ufrgscca_angIN_tl {180-80} }
+ }
+ {
+ \tl_set:Nn \l__ufrgscca_angOUT_tl {0}
+ \tl_set:Nn \l__ufrgscca_angIN_tl {180}
+ }%didn't match
+ }
+ {
+ \tl_set:Nn \l__ufrgscca_angOUT_tl {\l__ufrgscca_partA_tl}
+ \tl_set:Nn \l__ufrgscca_angIN_tl {180-\l__ufrgscca_partB_tl}
+ }
+ \path[dep,\l__ufrgscca_graph_color_tl] (\l__ufrgscca_tmp_prereq_name_tl)edge[out=\l__ufrgscca_angOUT_tl,in=\l__ufrgscca_angIN_tl] (\l__ufrgscca_tmp_name_tl);
+ }
+ }
+ }
+
+ }
+
+ }
+
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-en-coord.def b/macros/latex/contrib/ufrgscca/latex/ufrgscca-en-coord.def
deleted file mode 100644
index 65d0ef9352..0000000000
--- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-en-coord.def
+++ /dev/null
@@ -1,101 +0,0 @@
-%%%==============================================================================
-%% Copyright 2022-23 by Alceu Frigeri
-%%
-%% This work may be distributed and/or modified under the conditions of
-%%
-%% * The [LaTeX Project Public License](http://www.latex-project.org/lppl.txt),
-%% version 1.3c (or later), and/or
-%% * The [GNU Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.html),
-%% version 3 (or later)
-%%
-%% This work has the LPPL maintenance status *maintained*.
-%%
-%% The Current Maintainer of this work is Alceu Frigeri
-%%
-%% This is version 1.12 (2023/09/23)
-%%
-%% The list of files that compose this work can be found in the README.md file at
-%% https://ctan.org/pkg/ufrgscca
-%%
-%%%==============================================================================
-%% UFRGS stands for "Federal University of Rio Grande do Sul" in south Brazil
-%% EE stands for "Engineering School"
-%% CCA stands for "Control and Automation Engineering Course" (Portuguese acronym)
-%%%==============================================================================
-\makeatletter
-\def\tc@tmp@packname{ufrgscca-en-coord}
-\def\tc@tmp@altpackname{ufrgsccaencoord}
-\def\tc@tmp@packdesc{UFRGS/CCA English coord defs}
-\def\tc@tmp@packdate{2023/09/23}
-\def\tc@tmp@packversion{1.12}
-\let\@exp\expandafter
-\@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion}
-
-
-\calendartitle{Calendário – \tcdef@coord@TCCperiod}
-
-\tcccalendarhead{Data/Período}{Semana Letiva}{Evento}
-\tcccalendarevent{01}{Apresentação da disciplina. Informações gerais. Reunião presencial com início às 18:30h, no Salão de Eventos do DELET.\newline {\bf Presença obrigatória.}}
-\tcccalendarevent{02}{Requerimento de matrícula. O(A) aluno(a) deve preencher o \emph{Formulário de Requerimento de Matrícula}, já com o resumo do trabalho, e encaminhá-lo ao setor de protocolos da UFRGS para abertura de processo. Posteriormente, o número do processo deve ser encaminhado por e-mail para \tccore@@ref{TCCcoord}{article} coordenador\tccore@@ref{TCCcoord}{narticle} da atividade. \newline{\bf Obs.~1}}
-%\tcccalendarevent{03}{Entrega do \emph{Formulário de Inscrição}, juntamente com o resumo do trabalho, no \tcdef@cover@secdivisionacronym .}
-\tcccalendarevent{09}{Encontro presencial: Como redigir um TCC, melhores práticas. Início às 18:30h, no Salão de Eventos do DELET.}% \newline {\bf Presença obrigatória.}}
-\tcccalendarevent{09}{Entrega VIA MOODLE do \emph{Relatório Parcial}, juntamente com o \emph{Formulário de Aprovação do Relatório Parcial e Banca Examinadora} assinado pelo orientador. \newline{\bf Obs.~2}}
-\tcccalendarevent{15}{Entrega de uma cópia impressa (ou eletrônica) do Trabalho de Conclusão a cada membro da banca, juntamente com os \emph{Formulários de Avaliação} e \emph{Formulários de correções} do trabalho. Entrega VIA MOODLE de uma cópia eletrônica do trabalho juntamente com o \emph{Formulário de Aprovação para Apresentação} e os recibos de recebimento assinados e datados pelos membros das bancas.}
-\tcccalendarevent{16}{Encontro presencial: Como apresentar um TCC, melhores técnicas. Início às 18:30h, no Salão de Eventos do DELET.}% \newline {\bf Presença obrigatória.}}
-\tcccalendarevent{17}{Apresentações dos Trabalhos de Conclusão de Curso. \newline{\bf Obs.~3}}
-\tcccalendarevent{17}{Entrega VIA MOODLE dos \emph{Formulários de correções} dos membros da banca.}
-\tcccalendarevent{18}{Entrega VIA MOODLE da versão final corrigida do trabalho e o \emph{Formulário de Aprovação das Correções}. Entrega do formulário de autorização para publicação (biblioteca) assinado na secretaria do DELAE. \newline{\bf Obs.~4}}
-\tcccalendarevent{19}{Para os TCCs em RECUPERAÇÃO, entrega VIA MOODLE da versão final corrigida do trabalho e o \emph{Formulário de Aprovação das Correções}. Entrega do formulário de autorização para publicação (biblioteca) assinado na secretaria do DELAE. \newline{\bf Obs.~5}}
-
-
-\tcccalendardesc{\begin{description}
-\item[Obs. 1]: Caso o aluno(a) já tenha um processo aberto de TCC, reusar o mesmo apenas anexando o novo requerimento de matrícula, caso necessário.
-\item[Obs. 2]: O relatório deve conter as declarações de concordância em participar da banca da parte dos professores convidados.
-\item[Obs. 3]: As bancas serão marcadas após a entrega do relatório parcial, de acordo com a disponibilidade dos professores convidados.
-\item[Obs. 4]: O \emph{Formulário de Aprovação das Correções} deve estar assinado pelo(a) orientador(a). Para relatórios em que o campo “Revisarei o trabalho depois de corrigido” tiver sido assinalado por algum membro da banca, a assinatura do(a) mesmo(a) também deverá constar no \emph{Formulário de Aprovação das Correções}.
-\item[Obs. 5]: Trabalho em RECUPERAÇÃO é aquele cuja nota final quando da defesa é insuficiente para aprovação OU aquele em que o campo “Reescrever tudo” do formulário de correções foi marcado por algum membro da banca. Neste caso, o \emph{Formulário de Aprovação das Correções} deve estar assinado tanto pelo(a) orientador(a) como pelo(s) membro(s) da banca designado(s) para reavaliar o trabalho, incluindo obrigatoriamente aqueles que tiverem marcado o campo “Revisarei o trabalho depois de corrigido”.\\\hrule
-\item[IMPORTANTE]: O(A) aluno(a) estará {\bf REPROVADO(A)} \emph{se falhar na entrega de qualquer um dos documentos aqui citados dentro dos prazos estipulados}.
-\end{description}}
-
-
-\studentlistformtitle{Lista de presença, \tcdef@coord@studentlistactivity, dia \tcdef@coord@studentlistdate}
-\studentlistactivity{apresentação da atividade de TCC}
-\studentlistdate{\number\day/\number\month}
-
-\tccreporttitle{Relatório parcial/final}
-\tccreportopening{Para registro}
-\tccreportdesc{Relatório parcial/final referente aos alunos matriculados na atividade de ensino de \tcdef@forms@formstitle\ semestre \tcdef@coord@TCCperiod .}
-
-\tccreportabsents{Desistentes com conceito (segundo semestre)}
-\tccreportdismiss{Desistentes sem conceito (primeiro semestre)}
-\tccreferralopening{Ao\\ \tcdef@cover@secretaryacronym\ da \tcdef@cover@universitydivision}
-
-\referralfailed{{REPROVAD\tccore@@ref{student}{Article}}}
-\referralapproved{{APROVAD\tccore@@ref{student}{Article}}}
-
-\referralexamapprovedtext{\tccore@@ref{student}{Article} alun\tccore@@ref{student}{article} \emph{\tccore@@ref{student}{}}\ apresentou o trabalho intitulado \emph{\tccore@@ref{student}{title}}\ no dia \tccore@@ref{student}{date}, n\~{a}o tendo sido considerad\tccore@@ref{student}{article} apt\tccore@@ref{student}{article} pela banca listada abaixo. Posto em exame, \tccore@@ref{student}{article} mesm\tccore@@ref{student}{article} foi \tcdef@coord@referralapproved\ com conceito final \tc@TCCgradeC .}
-
-\referralexamfailtext{\tccore@@ref{student}{Article} alun\tccore@@ref{student}{article} \emph{\tccore@@ref{student}{}}\ apresentou o trabalho intitulado \emph{\tccore@@ref{student}{title}}\ no dia \tccore@@ref{student}{date}, n\~{a}o tendo sido considerad\tccore@@ref{student}{article} apt\tccore@@ref{student}{article} pela banca listada abaixo. Posto em exame, \tccore@@ref{student}{article} mesm\tccore@@ref{student}{article} foi \tcdef@coord@referralfailed\ com conceito final \tc@TCCgradeD .}
-
-\referralfatetext{\tccore@@ref{student}{Article} alun\tccore@@ref{student}{article} \emph{\tccore@@ref{student}{}}\ apresentou o trabalho intitulado \emph{\tccore@@ref{student}{title}}\ no dia \tccore@@ref{student}{date}, tendo sido \tccoord@referralfate{\tccore@@ref{student}{Temp}} com conceito final \textbf{\tccoord@@fate{\Alph{tc@studentcount}}}, conforme quadro de notas abaixo. }
-
-\referralfailFF{\tccore@@ref{student}{Article} alun\tccore@@ref{student}{article} \emph{\tccore@@ref{student}{}}\ n\~{a}o concluiu o trabalho de conclus\~{a}o de Curso tendo sido \tcdef@coord@referralfailed\ com conceito final \textbf{FF}.}
-
-\boardlabel{Banca Examinadora}
-\boardstitle{Apresentações TCC em \tcdef@cover@course\ \tcdef@coord@TCCperiod\ \tcdef@coord@boardstitleB\ }
-\boardsworklabel{Título}
-\TCCgradesNlabel{Nota}
-\TCCgradesClabel{Conceito}
-\TCCgrades{A}{B}{C}{D}{FF}
-\TCCgradesN{9}{7.5}{6}
-
-\cocertificatetitle{CERTIFICADO}
-\cocertificateopenning{\`{A} quem interessar possa,\\ certificamos que}
-\cocertificatetext{atuou como co-orientador\tccore@@ref{coadvisor}{narticle} d\tccore@@ref{student}{article} alun\tccore@@ref{student}{article}\ \emph{\tccore@@ref{student}{}}\ no trabalho de conclus\~{a}o de curso intitulado \emph{\tccore@@ref{student}{title}}\ no semestre \tcdef@coord@TCCperiod.}
-
-\TCCcoordtitle{Coordenador\tccore@@ref{TCCcoord}{narticle} da atividade de ensino de\\ \tcdef@forms@formstitle\ }
-
-
-
-\advisornamegen{Orientador(a)}
-\advisornameplural{Orientadores}
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-en-core.def b/macros/latex/contrib/ufrgscca/latex/ufrgscca-en-core.def
deleted file mode 100644
index 5ad00626f5..0000000000
--- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-en-core.def
+++ /dev/null
@@ -1,68 +0,0 @@
-%%%==============================================================================
-%% Copyright 2022-23 by Alceu Frigeri
-%%
-%% This work may be distributed and/or modified under the conditions of
-%%
-%% * The [LaTeX Project Public License](http://www.latex-project.org/lppl.txt),
-%% version 1.3c (or later), and/or
-%% * The [GNU Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.html),
-%% version 3 (or later)
-%%
-%% This work has the LPPL maintenance status *maintained*.
-%%
-%% The Current Maintainer of this work is Alceu Frigeri
-%%
-%% This is version 1.12 (2023/09/23)
-%%
-%% The list of files that compose this work can be found in the README.md file at
-%% https://ctan.org/pkg/ufrgscca
-%%
-%%%==============================================================================
-%% UFRGS stands for "Federal University of Rio Grande do Sul" in south Brazil
-%% EE stands for "Engineering School"
-%% CCA stands for "Control and Automation Engineering Course" (Portuguese acronym)
-%%%==============================================================================
-\makeatletter
-\def\tc@tmp@packname{ufrgscca-en-core}
-\def\tc@tmp@altpackname{ufrgsccaencore}
-\def\tc@tmp@packdesc{UFRGS/CCA English core defs}
-\def\tc@tmp@packdate{2023/09/23}
-\def\tc@tmp@packversion{1.12}
-\let\@exp\expandafter
-\@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion}
-
-
-\location{Porto~Alegre}{RS}
-
-\university{Federal University of Rio Grande do Sul}
-\universityacronym{UFRGS}
-\universitydivision{Engineering School}
-\divisiongradcouncil{\tcdef@cover@universitydivision Undergraduate Council}
-
-\secretaryacronym{SACAD}
-\secdivisionacronym{\tcdef@cover@secretaryacronym/EE}
-\graduationtitle{Control and Automation Engineering}
-\course{Control and Automation Engineering}
-\courseacronym{CCA}
-\coursecoord{current course coordinator}
-\coursecoordtitle{Course Coordinator}
-\advisorname{Advisor}%
-\coadvisorname{Coadvisor}%
-\examinername{Exam Committee}%
-
-\reportspecificinfo{%
- Graduation Project presented to COMGRAD-\tcdef@cover@courseacronym\ of \tcdef@cover@university\
- in partial fulfillment of the requirements for the
- degree of \emph{\tcdef@cover@graduationtitle }.
-}%
-
-\approvalspecificinfo{%
- This Project was considered adequate for obtaining the
- credits of the course TCC (Diplom Project) of \emph{\tcdef@cover@course }
- and approved in its final form by the Advisor and the Examination Committee.
-}%
-
-\profname{Professor}
-\coprofname{Professor}
-
-
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-en-forms.def b/macros/latex/contrib/ufrgscca/latex/ufrgscca-en-forms.def
deleted file mode 100644
index 65d5bcd3b3..0000000000
--- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-en-forms.def
+++ /dev/null
@@ -1,183 +0,0 @@
-%%%==============================================================================
-%% Copyright 2022-23 by Alceu Frigeri
-%%
-%% This work may be distributed and/or modified under the conditions of
-%%
-%% * The [LaTeX Project Public License](http://www.latex-project.org/lppl.txt),
-%% version 1.3c (or later), and/or
-%% * The [GNU Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.html),
-%% version 3 (or later)
-%%
-%% This work has the LPPL maintenance status *maintained*.
-%%
-%% The Current Maintainer of this work is Alceu Frigeri
-%%
-%% This is version 1.12 (2023/09/23)
-%%
-%% The list of files that compose this work can be found in the README.md file at
-%% https://ctan.org/pkg/ufrgscca
-%%
-%%%==============================================================================
-%% UFRGS stands for "Federal University of Rio Grande do Sul" in south Brazil
-%% EE stands for "Engineering School"
-%% CCA stands for "Control and Automation Engineering Course" (Portuguese acronym)
-%%%==============================================================================
-\makeatletter
-\def\tc@tmp@packname{ufrgscca-en-forms}
-\def\tc@tmp@altpackname{ufrgsccaenforms}
-\def\tc@tmp@packdesc{UFRGS/CCA English forms defs}
-\def\tc@tmp@packdate{2023/09/23}
-\def\tc@tmp@packversion{1.12}
-\let\@exp\expandafter
-\@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion}
-
-
-%%%%%%
-%%%%%%
-%%%%%% forms
-%%%%%%
-%%%%%%
-%%%%%%
-
-\formlocal{\tc@city,\hspace{4mm} de \hspace{1.2cm} de 20\hspace{4mm}.}
-
-\formssignaturelabel{Assinatura}
-\examinersignature{Assinatura\ \ d\tccore@@ref{examiner}{article}\ \ Avaliador\tccore@@ref{examiner}{narticle}}
-\boardsignature{Assinatura\ \ do\ \ Membro\ \ da\ \ Banca}
-\advisorsignature{Assinatura\ \ d\tccore@@ref{advisor}{article}\ \ Orientador\tccore@@ref{advisor}{narticle}}
-\coadvisorsignature{Assinatura\ \ d\tccore@@ref{coadvisor}{article}\ \ Co-orientador\tccore@@ref{coadvisor}{narticle}}
-\studentsignature{Assinatura\ \ d\tccore@@ref{student}{article}\ \ Alun\tccore@@ref{student}{article}}
-\studentsignaturegen{Assinatura\ \ do(a)\ \ Aluno(a)}
-\formsstudentlabel{Alun\tccore@@ref{student}{article}}
-\formsstudentlabelgen{Aluno(a)}
-\formproflabel{Professor(a)}
-\profname{Professor\tccore@@ref{advisor}{narticle}}
-\coprofname{Professor\tccore@@ref{coadvisor}{narticle}}
-\formsboardlabel{Membro da Banca}
-\formsadvisorlabel{Orientador\tccore@@ref{advisor}{narticle}}
-\formsadvisorlabelgen{Orientador(a)}
-\formscoadvisorlabel{Co-orientador\tccore@@ref{advisor}{narticle}}
-\formsexaminerlabel{Avaliador\tccore@@ref{examiner}{narticle}}
-\formsaltexaminerlabel{Suplente}
-\formstimelabel{Horário}
-
-
-%\formstopicAlabel{Conteúdo}
-%\formstopicBlabel{Trabalho Escrito}
-%\formstopicClabel{Apresentação}
-\formsworktitlelabel{Título do Trabalho}
-\formstemptitlelabel{Título Provisório}
-\formsstudentIDlabel{Cartão}
-\formsemaillabel{e-mail}
-\formsphonelabel{ramal}
-\agreelabel{De Acordo}
-
-\continuelabel{Continua...}
-
-\formsdatelabel{Data}
-\formstitle{Trabalho de Conclusão de Curso em \tcdef@cover@course}
-\formsfootnote{Entregar a cada membro da banca juntamente com a cópia do trabalho.}
-
-
-
-\renewreqformtitle{Formulário de Renovação da Inscrição na Atividade de Ensino Trabalho de Conclusão em \tcdef@cover@course}
-
-\renewreqformnotes{O resumo deve ser curto, i.e., não deve exceder este espaço. O texto deve ser escrito em parágrafo único, e por se tratar de proposta, poderá utilizar tempo futuro e não necessita ter motivação ou justificativa.\\
-Deve conter:
-\begin{enumerate*}[alpha)]
-\item O QUE será feito - descrição e objetivos.
-\item COMO será feito - metodologia.
-\item Resultados esperados.
-\end{enumerate*}
-}
-
-\reqformtitle{Formul\'{a}rio de Requerimento de Matr\'{i}cula}
-\reqformopening{Ilm\tccore@@ref{coursecoord}{article}. Sr\tccore@@ref{coursecoord}{narticle}.\par
-Coordenador\tccore@@ref{coursecoord}{narticle} da Comissão de Graduação do Curso em \tcdef@cover@course {da \tcdef@cover@universityacronym\ }}
-%\reqformopening{algo}
-
-\reqformdesc{\tccore@@ref{student}{Article} alun\tccore@@ref{student}{article} \tc@studentA , REGULARMENTE MATRICULAD\tccore@@ref{student}{Article} neste período letivo no curso \emph{\tcdef@cover@course\ }, desta universidade, portador\tccore@@ref{student}{narticle} do cartão de identificação n$^o$ \tc@studentAID\ vem por meio desta solicitar matrícula na atividade de ensino de \tcdef@forms@formstitle}
-
-\coadvisorformtitle{Requerimento de Autorização de Co-Orientação}
-\coadvisorformdesc{\tccore@@ref{student}{Article} alun\tccore@@ref{student}{article} \tc@studentA , REGULARMENTE MATRICULAD\tccore@@ref{student}{Article} na atividade de TCC neste período letivo, vem por meio desta solicitar autorização para registro de co-orientador de TCC, conforme justificativa abaixo.}
-
-\formsbrieflabel{Resumo}
-
-\formsstudentemaillabel{Email d\tccore@@ref{student}{article} Alun\tccore@@ref{student}{article}}
-
-\formsadvisoremaillabel{Email d\tccore@@ref{advisor}{article} Orientador\tccore@@ref{advisor}{narticle}}
-
-\formsreasonlabel{Justificativa}
-
-
-\examformtitle{Formul\'{a}rio de Avalia\c{c}\~{a}o}
-
-\examformdesc{A nota (variando de zero a dez) atribuída por cada membro da banca examinadora será dada considerando o desempenho d\tccore@@ref{student}{article} alun\tccore@@ref{student}{article} nos 3 pontos apresentados na tabela abaixo.}
-
-\examformnoteslabel{Observações}
-
-\examformnotes{\ \\Posteriormente, \tccore@@ref{TCCcoord}{article} professor\tccore@@ref{TCCcoord}{narticle} coordenador\tccore@@ref{TCCcoord}{narticle} calculará a nota final atribuída por cada membro da banca examinadora, de acordo com a seguinte ponderação:\\[2mm] {\bf Nota Final Banca = \tc@TCCpointAweight\ x \tc@TCCpointAlabel\ + \tc@TCCpointBweight\ x \tc@TCCpointBlabel\ + \tc@TCCpointCweight\ x \tc@TCCpointClabel\ } \\[2mm] A média final da atividade será dada pela média das notas finais (calculadas com a expressão acima) atribuidas por cada um dos membros da banca examinadora.}
-
-\examboardformtitle{Formulário de Aprovação do Relatório Parcial e Banca Examinadora}
-
-\examboardformdesc{Aprovo o Relatório Parcial e nominata da Banca Examinadora acima relacionada.}
-
-\formsboardtitle{Banca Examinadora}
-
-\advisorapprovalformtitle{Formulário de Aprovação para Apresentação}
-
-\advisorapprovalformdesc{{\bf Parecer d\tccore@@ref{advisor}{article} Orientador\tccore@@ref{advisor}{narticle}}\footnote{Preenchimento Obrigatório}}
-
-\advisorapprovalformdescB{Aprovo a versão final do trabalho submetido pel\tccore@@ref{student}{article} alun\tccore@@ref{student}{article} e considero \tccore@@ref{student}{article} mesm\tccore@@ref{student}{article} apt\tccore@@ref{student}{article} para apresentação.}
-
-\rectifyapprovalformtitle{Formulário de Aprovação das Correções}
-
-\rectifyapprovalformdesc{\begin{description}
-\item[Observação 1:] A nota final será a já atribuída pela Banca Examinadora no momento da Defesa. Caso a versão final corrigida do trabalho mais este formulário não sejam entregues até a data estipulada, o conceito do aluno passará a ser {\bf D}.
-\item[Observação 2:] A assinatura d\tccore@@ref{advisor}{article} orientador\tccore@@ref{advisor}{narticle} é obrigatória, entretanto a assinatura dos membros da banca só é necessária caso o(a) mesmo(a) tenha marcado a opção "$\Box$ Revisarei o trabalho depois de corrigido" no \emph{Formulário de Correções}.
-\end{description}}
-
-\receiptformtitle{Recibo de entrega de cópia da versão final do Trabalho de Conclusão}
-
-\receiptformfootnote{Entregar a cada membro da banca juntamente com a cópia do trabalho final e após encaminhar ao \tcdef@cover@secretaryacronym .}
-
-\receiptformdesc{Declaro que encontra-se em minha posse cópia da versão final do Trabalho de Conclusão de Curso em \tcdef@cover@course\ d\tccore@@ref{student}{article} alun\tccore@@ref{student}{article} }
-
-
-\reviewformtitle{Formulário de Correções}
-\reviewformdesc{Correções: \parbox[t]{.8\textwidth}{
-\begin{description}[tcc,noitemsep]
-\item[$\Box$] Nenhuma
-\item[$\Box$] Ortográfica
-\item[$\Box$] Regras de Escrita
-\item[$\Box$] Equações
-\item[$\Box$] Resumo
-\item[$\Box$] Abstract
-\item[$\Box$] Índice
-\item[$\Box$] Introdução
-\item[$\Box$] Conclusões
-\item[$\Box$] Corpo do Trabalho
-\item[$\Box$] Resultados
-\item[$\Box$] Adicionar mais exemplos
-\item[$\Box$] Figuras
-\item[$\Box$] Tabelas
-\item[$\Box$] {\bf Reescrever tudo}\footnotemark[2]
-\item[$\Box$] Outras: \\
-\begin{tabular}{p{0.7\textwidth}}
-~\\\hline
-~\\\hline
-~\\\hline
-~\\\hline
-\end{tabular}\\[-1mm]
-\item[$\Box$] {\bf Revisarei o trabalho depois de corrigido}%\footnotemark[2]
-\end{description}}
-}
-
-\reviewformfootnoteB{Neste caso \tccore@@ref{student}{article} alun\tccore@@ref{student}{article} estará em EXAME e receberá conceito final C ou D, conforme revisão final do texto.}
-
-\reviewformfootnote{\tcdef@forms@formsfootnote\ Após a apresentação, retornar este à coordenação do TCC.}
-
-\formsrectifyOKdesc{Correções satisfatórias: \hspace*{1cm}$\Box$\ sim\hspace*{2cm}$\Box$\ não}
-
-\TCCpointsweight{0.35}{0.35}{0.3}
-\TCCpointslabel{Conteúdo}{Trab. Escrito}{Apresentação}
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.sty
index 8ccebc5f24..c5f3afe8e9 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 1.12 (2023/09/23)
+%% This is version {2.0} {2023/11/23}
%%
%% The list of files that compose this work can be found in the README.md file at
%% https://ctan.org/pkg/ufrgscca
@@ -23,716 +23,225 @@
%% CCA stands for "Control and Automation Engineering Course" (Portuguese acronym)
%%%==============================================================================
\NeedsTeXFormat{LaTeX2e}[2022/06/01]
-\def\tc@tmp@packname{ufrgscca-forms}
-\def\tc@tmp@altpackname{ufrgsccaforms}
-\def\tc@tmp@packdesc{UFRGS/CCA forms commands}
-\def\tc@tmp@packdate{2023/09/23}
-\def\tc@tmp@packversion{1.12}
-\let\@exp\expandafter
-\@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion}
-\@exp\@exp\@exp\ProvidesPackage\@exp\@exp\@exp{\@exp\tc@tmp@packname\@exp}\@exp[\tc@tmp@packdate\space v\tc@tmp@packversion\space\tc@tmp@packdesc]
-\RequirePackage{amsfonts}
-
-
-%% local for tc@formsigdate {ufrgscca-forms}
-
-\cmdfactory<forms>{formssignaturelabel,examinersignature,boardsignature,advisorsignature,coadvisorsignature}
-\cmdfactory<forms>{studentsignature,studentsignaturegen}%
-\cmdfactory<forms>{formsstudentlabel,formsstudentlabelgen,formproflabel}%
-\cmdfactory<forms>{formsboardlabel,formsadvisorlabel,formsadvisorlabelgen}%
-\cmdfactory<forms>{formscoadvisorlabel,formsexaminerlabel,formsaltexaminerlabel}
-\cmdfactory<forms>{formstimelabel,formsworktitlelabel,formstemptitlelabel}
-\cmdfactory<forms>{formsstudentIDlabel,formsemaillabel,formsphonelabel}
-\cmdfactory<forms>{agreelabel,continuelabel}
-\cmdfactory<forms>{formsdatelabel,formstitle,formstitleTR,formsfootnote}
-\cmdfactory<forms>{renewreqformtitle,renewreqformnotes,reqformtitle,reqformopening,reqformdesc}%
-\cmdfactory<forms>{reqformdescTR}%
-\cmdfactory<forms>{coadvisorformtitle,coadvisorformdesc}
-\cmdfactory<forms>{formsbrieflabel,formsstudentemaillabel,formsadvisoremaillabel,formscoadvisoremaillabel}
-\cmdfactory<forms>{formsreasonlabel}
-\cmdfactory<forms>{examformtitle,examformdesc,examformnoteslabel}
-\cmdfactory<forms>{examformnotes,examboardformtitle,examboardformdesc}%
-\cmdfactory<forms>{examboardformtitleTMP,examboardformdescTMP}%
-\cmdfactory<forms>{formsboardtitle,advisorapprovalformtitle,advisorapprovalformdesc,advisorapprovalformdescB}
-\cmdfactory<forms>{rectifyapprovalformtitle,rectifyapprovalformdesc}%
-\cmdfactory<forms>{rectifyapprovalTRformdesc}%
-\cmdfactory<forms>{receiptformtitle,receiptformfootnote,receiptformdesc}%
-\cmdfactory<forms>{reviewformtitle,reviewformdesc,reviewformfootnoteB,reviewformfootnote}
-\cmdfactory<forms>{formsTRtitle,TRformfootnote}
-\cmdfactory<forms>{TRboardformtitle,TRformfootnote}
-\cmdfactory<forms>{reqArgument}
-
-\cmdfactory<forms>{formsrectifyOKdesc}
-
-\cmdfactory<forms>{reqformdescgen}
-\cmdfactory<forms>{formsinternshiptitle,reqforminternshipdesc,internshipreqformnotes}
-\cmdfactory<forms>{formstutorlabel,formstutoremaillabel}
-\cmdfactory<forms>{formssupervisorlabel,formssupervisoremaillabel}
-\cmdfactory<forms>{formsinternshipstartlabel,formsinternshipendlabel,formsinternshiplengthlabel,formsinternshipregisterlabel}
-\cmdfactory<forms>{reqforminternshipinfo}
-\cmdfactory<forms>{supervisorsignature,tutorsignature,internshipcoordsignature}
-\cmdfactory<forms>{formssupervisorlabel}
-\cmdfactory<forms>{supervisorformtitle}
-\cmdfactory<forms>{tutorformtitle}
-\cmdfactory<forms>{internshipstudentinfo,internshipsupervisorinfo,internshiptutorinfo,internshipcompanyinfo,internshipperiod}
-\cmdfactory<forms>{internshipcoordinfo}
-
-\cmdfactory<forms>{internsupervisorgradesform,internsupervisornote,internsupervisorcomments}
-\cmdfactory<forms>{internshiptutorcomments,internshipcoordcomments}
-\cmdfactory<forms>{interntutorgrade,interncoordgrade}
-
-\NewDocumentCommand{\TCCpointsweight}{mmm}{%
- \gdef\tc@TCCpointAweight{#1}%
- \gdef\tc@TCCpointBweight{#2}%
- \gdef\tc@TCCpointCweight{#3}%
-}%
-
-\NewDocumentCommand{\TCCpointslabel}{mmm}{%
- \gdef\tc@TCCpointAlabel{#1}%
- \gdef\tc@TCCpointBlabel{#2}%
- \gdef\tc@TCCpointClabel{#3}%
-}%
-%
-\NewDocumentCommand{\TCCIpointsweight}{mmmm}{%
- \gdef\tc@TCCIpointAweight{#1}%
- \gdef\tc@TCCIpointBweight{#2}%
- \gdef\tc@TCCIpointCweight{#3}%
- \gdef\tc@TCCIpointDweight{#4}%
-%% \gdef\tc@TCCIpointscale{#5}%
-}%
-
-\NewDocumentCommand{\TCCIpointslabel}{mmmm}{%
- \gdef\tc@TCCIpointAlabel{#1}%
- \gdef\tc@TCCIpointBlabel{#2}%
- \gdef\tc@TCCIpointClabel{#3}%
- \gdef\tc@TCCIpointDlabel{#4}%
-}%
-
-
-
-
-\iftcif@english%
-\input{ufrgscca-en-forms.def}%
-\else%
-\input{ufrgscca-ptBR-forms.def}%
-\fi%
-
-\input{ufrgscca-formsTR.sty}
-\input{ufrgscca-formsintern.sty}
-
-
-
-
-
-
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-%% Examiners forms%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tcforms@examinersForms}{}{%
- \tccore@examiners{examinerA}%
- \tcforms@examinersform{examinerA}%
- \tcforms@reviewform{examinerA}%
- \tccore@examiners{examinerB}%
- \tcforms@examinersform{examinerB}%
- \tcforms@reviewform{examinerB}%
- \tccore@examiners{examinerC}%
- \tcforms@examinersform{examinerC}%
- \tcforms@reviewform{examinerC}%
- \tccore@examiners{altexaminerA}%
- \tcforms@examinersform{altexaminerA}%
- \tcforms@reviewform{altexaminerA}%
-}%
-%
-\NewDocumentCommand{\tcforms@examinerforms}{m}{%
- \tcforms@examinersform{#1}%
- \tcforms@reviewform{#1}%
-}%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% Board receipt forms%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tcforms@receiptforms}{}{%
- \tcforms@receiptform{examinerA}%
- \tcforms@receiptform{examinerB}%
- \tcforms@receiptform{examinerC}%
- \tcforms@receiptform{altexaminerA}%
-}%
-%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% Aux commands%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tcforms@formsigdate}{m}{%%
- \begin{flushright} \tcdef@core@formlocal %
- ~\vspace*{6mm}\\%
-%
- $\overline{#1}$%%
- \end{flushright}%
-}%
-%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% examiners description (for Board approval forms)%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tcforms@examinerdesc}{O{\tcdef@forms@formsexaminerlabel}mm}{%%
- \tccore@examiners{#3}%
- \@ifundefined{tc@#2@#3}{--}{#1: {\bf \csname tc@#2@#3\endcsname}%
-
- \hfill \tcdef@forms@formsemaillabel: {\bf \csname tc@#2@#3email\endcsname} ~\tcdef@forms@formsphonelabel: {\bf \csname tc@#2@#3phone\endcsname} ~\tcdef@forms@agreelabel: \rule{\tc@agreerule}{.1pt}\\}%
-}%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% TCC description (for many forms)%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%\NewDocumentCommand{\tcforms@tccdesc}{}{%%
-% \noindent\tcdef@forms@formsstudentlabel : {\bf \tc@studentA} \hfill \tcdef@forms@formsstudentIDlabel : {\bf \tc@studentAID}%
-%
-% \noindent\tcdef@forms@formsworktitlelabel : {\bf \@title}\\[-4mm]%
-%
-% \noindent\tcdef@forms@formsadvisorlabel : {\bf \tc@studentA@advisor}\\%
-%}%
-%
-\NewDocumentCommand{\tcforms@tccdesc}{}{%%
- \tcforms@studentIDheader
-
- \tcforms@advisorIDheader
-}%
+\ProvidesExplPackage
+ {ufrgscca-forms}
+ {2023/11/23}
+ {2.0}
+ {UFRGS/CCA forms commands}
+
+
+%%%%%%%
+%%%
+%%% Just an attempt of having my packages info in a regular way
+%%% Idea being: { <pck-name> / pkg info } for each and all.
+%%%
+%%%%%%%
+\keys_define:nn { ufrgscca-forms / pkg info}
+ {
+ name .code:n = {ufrgscca-forms} ,
+ prefix .code:n = {ufrgscca} ,
+ date .code:n = {2023/11/23},
+ version .code:n = {2.0} ,
+ description .code:n = {UFRGS/CCA~ forms~commands}
+ }
+\cs_if_exist:NF \__codedesc_pkg_info:nn
+ {
+ \cs_new_protected:Npn \__codedesc_pkg_info:nn #1#2
+ { \keys_set:nn {#1 / pkg info}{#2} }
+ }
+\cs_if_exist:NF \PkgInfo
+ { \NewDocumentCommand \PkgInfo {mm} { \keys_set:nn {#1 / pkg info}{#2} } }
+\cs_if_exist:NF \PkgDescription
+ {
+ \NewDocumentCommand \PkgDescription {m}
+ {
+ \noindent Package~ \textbf{\PkgInfo{#1}{name}}~Version:~\PkgInfo{#1}{version}~ -~ \PkgInfo{#1}{date}\par \emph{\PkgInfo{#1}{description}}~\par
+ }
+ }
+%%%%%%%
+%%% End of cut-n-paste
+%%%%%%%
+
+
+
+
+\RequirePackage{starray}
+\RequirePackage{amsfonts}
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% TCC (new) generic form %
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% parameters:
-% #1 : footnote for 'form title'
-% #2 : form 'heading title' (TCC I, for instance)
-% #3 : 'form title'
-% #4 : form oppening
-% #5 : form body
-% #6 : form closing
-%
-\NewDocumentCommand{\tcforms@genform}{O{}mmmmm}{%
- \tc@formtopbox[tcdef@forms@formsfootnote]{\tcdef@forms@formstitle}{\tcdef@forms@examformtitle}%
-%
- \vfill%
- #4
- \vfill%
- #5
- \vfill%
- #6
- \pagebreak
-}
+\cs_generate_variant:Nn \tl_gset:Nn {Ne}
-\NewDocumentCommand{\tcforms@studentIDheader}{}{
- \noindent\tcdef@forms@formsstudentlabel : {\bf \csname tc@student\Alph{tc@studentcount}\endcsname}\hfill \tcdef@forms@formsstudentIDlabel : {\bf \tc@studentAID}\\%
- \noindent\tcdef@forms@formsworktitlelabel : \@ifundefined{tc@student\Alph{tc@studentcount}title}{\textsl{\@title}}{\textsl{\csname tc@student\Alph{tc@studentcount}title\endcsname}}\\
+\DeclareKeys[forms]{
+ internreqform.usage = general,
+ internreqform.code = {
+ \MakeForm{internshiprequest}
+ },
+ internsupervisorform.usage = general,
+ internsupervisorform.code = {
+ \MakeForm{internshipsupervisorform}
+ },
+ interntutorform.usage = general,
+ interntutorform.code = {
+ \MakeForm{internshiptutorform}
+ },
+ reqform-I.usage = general,
+ reqform-I.code = {
+ \MakeForm{request-I}
+ },
+ reqform-II.usage = general,
+ reqform-II.code = {
+ \MakeForm{request-II}
+ },
+ coadvisor-I.usage = general,
+ coadvisor-I.code = {
+ \MakeForm{coadvisor-I}
+ },
+ coadvisor-II.usage = general,
+ coadvisor-II.code = {
+ \MakeForm{coadvisor-II}
+ },
+ boardapproval-I.usage = general,
+ boardapproval-I.code = {
+ \MakeForm{boardapproval-I}
+ },
+ boardapproval-II.usage = general,
+ boardapproval-II.code = {
+ \MakeForm{boardapproval-II}
+ },
+ advisorsapproval-I.usage = general,
+ advisorsapproval-I.code = {
+ \MakeForm{advisorsapproval-I}
+ },
+ advisorsapproval-II.usage = general,
+ advisorsapproval-II.code = {
+ \MakeForm{advisorsapproval-II}
+ },
+ receipts-I.usage = general,
+ receipts-I.code = {
+ \MakeForm{receipts-II}
+ },
+ receipts-II.usage = general,
+ receipts-II.code = {
+ \MakeForm{receipts-II}
+ },
+ examinersforms-I.usage = general,
+ examinersforms-I.code = {
+ \SetReviewer{2}
+ \MakeForm{examinersform-I}
+ \SetReviewer{3}
+ \MakeForm{examinersform-I}
+ },
+ examinersforms-II.usage = general,
+ examinersforms-II.code = {
+ \SetReviewer{1}
+ \MakeForm{receipts-II}
+ \MakeForm{examinersform-II}
+ \MakeForm{correctionsform-II}
+ \SetReviewer{2}
+ \MakeForm{receipts-II}
+ \MakeForm{examinersform-II}
+ \MakeForm{correctionsform-II}
+ \SetReviewer{3}
+ \MakeForm{receipts-II}
+ \MakeForm{examinersform-II}
+ \MakeForm{correctionsform-II}
+ },
+ rectifyapproval-I.usage = general,
+ rectifyapproval-I.code = {
+ \MakeForm{rectifyapproval-I}
+ },
+ rectifyapproval-II.usage = general,
+ rectifyapproval-II.code = {
+ \MakeForm{rectifyapproval-II}
+ },
}
-\NewDocumentCommand{\tcforms@examinerIDheader}{m}{
- %\tccore@examiners{#1}
- \noindent\tcdef@forms@formsexaminerlabel : \textbf{\csname tc@student\Alph{tc@studentcount}@#1\endcsname}%
-}
-\NewDocumentCommand{\tcforms@advisorIDheader}{}{
- \noindent\tcdef@forms@formsadvisorlabel : \textbf{\csname tc@student\Alph{tc@studentcount}@advisor\endcsname}%
+\NewDocumentCommand{\tcforms}{m}{%
+ \SetKeys[forms]{#1}%
}
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% TCC examiner form (grades)%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tcforms@examinersform}{m}{%
- \tc@formtopbox[tcdef@forms@formsfootnote]{\tcdef@forms@formstitle}{\tcdef@forms@examformtitle}%
-%
- \vfill%
-% \tcdef@forms@formsstudentlabel : {\bf \csname tc@student\Alph{tc@studentcount}\endcsname}\\%
-% \tcdef@forms@formsexaminerlabel : \csname tc@student\Alph{tc@studentcount}@#1\endcsname%
- \tcforms@studentIDheader
-
- \tcforms@examinerIDheader{#1}
- \vfill%
- \tcdef@forms@examformdesc%
- \vfill%
-
- \begin{center}
- \begin{tabular}{|c|c|c|}%
- \hline%
- \tc@TCCpointAlabel & \tc@TCCpointBlabel & \tc@TCCpointClabel \\\hline%
- & & \\\hline
- \end{tabular}%
- \end{center}%
-
- \vfill%
-
- \tcforms@formsigdate{\tcdef@forms@examinersignature}%
- \vfill%
- \begin{description}
- \item[\tcdef@forms@examformnoteslabel:] \tcdef@forms@examformnotes
- \end{description}%
-
- \vfill%
- \pagebreak%
-}%
-%
-%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% TCC examiners reviewer form (corrections)%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tcforms@reviewform}{m}{%
- \tc@formtopbox[tcdef@forms@reviewformfootnote]{\tcdef@forms@formstitle}{\tcdef@forms@reviewformtitle}%
-
- \vfill%
-% \tcdef@forms@formsstudentlabel : {\bf \expandafter\csname tc@student\Alph{tc@studentcount}\endcsname}\\%
-% \tcdef@forms@formsexaminerlabel : \expandafter\csname tc@student\Alph{tc@studentcount}@#1\endcsname%
- \tcforms@studentIDheader
-
- \tcforms@examinerIDheader{#1}
- \vfill%
- \resizebox{0.9\textwidth}{!}{%%
- \tcdef@forms@reviewformdesc%
- }%
- \footnotetext[2]{\tcdef@forms@reviewformfootnoteB}%
- \vfill%
-
- \tcforms@formsigdate{\tcdef@forms@examinersignature}%
- \vfill%
- \pagebreak%
-}%
-%
-
-
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% TCC requirement form (TCC register)%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tcforms@reqform}{}{%
- \tc@formtopbox{\tcdef@forms@formstitle}{\tcdef@forms@reqformtitle}%
-
- \vfill%
-
- \tcdef@forms@reqformopening%
- \vfill%
-
- \tcdef@forms@reqformdesc%
- \vfill%
-
- \tcdef@forms@formstemptitlelabel : \@title %
-
- \tcdef@forms@formsstudentemaillabel : {\bf \tc@studentAemail} %
-
- \tcdef@forms@formsadvisorlabel : \tc@studentA@advisor%
-
- \tcdef@forms@formsadvisoremaillabel : {\bf \tc@studentA@advisoremail}%
- \hfill \tcdef@forms@formsphonelabel : {\bf \tc@studentA@advisorphone}%
-
-
- \@ifundefined{tc@studentA@coadvisor}{%
- \tcdef@forms@formscoadvisorlabel : \rule{\tc@namerule}{.1pt}%
-
- \tcdef@forms@formscoadvisoremaillabel : {\bf \rule{\tc@emailrule}{.1pt}}%
- \hfill \tcdef@forms@formsphonelabel : {\bf \rule{\tc@phonerule}{.1pt}}%
- }
+\NewDocumentCommand{\tcemptyforms}{m}
{
- \tcdef@forms@formscoadvisorlabel : \tc@studentA@coadvisor%
-
- \tcdef@forms@formscoadvisoremaillabel : {\bf \tc@studentA@coadvisoremail}%
- \hfill \tcdef@forms@formsphonelabel : {\bf \tc@studentA@coadvisorphone}%
- }%
-
- %{\bf \tcdef@forms@formsbrieflabel}:\footnote[1]{\tcdef@forms@renewreqformnotes}%
-
- \vfill%
- \tcdef@forms@reqArgument
-
-
- \tcdef@core@tccArgument%
-
- \vfill
- \parbox[t]{.45\textwidth}{\tcforms@formsigdate{\tcdef@forms@studentsignature}}\hfill%
- \parbox[t]{.45\textwidth}{\tcforms@formsigdate{\tcdef@forms@advisorsignature}}%
- \pagebreak%
-}%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% TCC co-advisor requirement form (TCC register)%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tcforms@coadvisorform}{}{%
- \@ifundefined{tc@studentA@coadvisor}{%
- \coadvisor{\rule{\tc@namerule}{.1pt}}{}%
- \coadvisorinfo{}{\rule{\tc@titlerule}{.1pt}}{\rule{\tc@emailrule}{.1pt}}{\rule{\tc@phonerule}{.1pt}}%
- }{}%
- \tc@formtopbox{\tcdef@forms@formstitle}{\tcdef@forms@coadvisorformtitle}%
-
- \vfill%
-
- \tcdef@forms@reqformopening%
- \vfill%
-
- \tcdef@forms@coadvisorformdesc%
- \vfill%
-
- \tcdef@forms@formstemptitlelabel : \@title %
-
- \tcdef@forms@formsadvisorlabel: \tc@studentA@advisor
-
- \tcdef@forms@formscoadvisorlabel: \tc@studentA@coadvisor%
-
- \tcdef@forms@formscoadvisoremaillabel : {\bf \tc@studentA@coadvisoremail}%
- \hfill \tcdef@forms@formsphonelabel : {\bf \tc@studentA@coadvisorphone}%
-
-
- \vfill%
- {\bf \tcdef@forms@formsreasonlabel}:%
-
- \tcdef@core@tcccoadvisorbrief% !!!! What a Hell ?!?!?!
-
- \tcforms@formsigdate{\tcdef@forms@studentsignature}%
-
- \parbox[t]{.45\textwidth}{\tcforms@formsigdate{\tcdef@forms@advisorsignature}}\hfill%
- \parbox[t]{.45\textwidth}{\tcforms@formsigdate{\tcdef@forms@coadvisorsignature}}%
- \pagebreak%
-}%
-%
-%
-%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% TCC renew requirement form (TCC register)%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tcforms@renewreqform}{}{%
- \tc@formtopbox{\tcdef@forms@formstitle}{\tcdef@forms@renewreqformtitle}%
-
- \vfill%
- \tcforms@tccdesc%
-
- \tcdef@forms@formsstudentemaillabel : {\bf \tc@studentAemail} %
-
- \hfill \tcdef@forms@formsadvisoremaillabel : {\bf \tc@studentA@advisoremail}%
-
- \hfill \tcdef@forms@formsphonelabel : {\bf \tc@studentA@advisorphone}%
- \vfill%
- {\bf \tcdef@forms@formsbrieflabel}:\footnote[1]{\tcdef@forms@renewreqformnotes}%
-
- \tcdef@core@tccbrief%
- \vfill%
- \tcforms@formsigdate{\tcdef@forms@studentsignature}%
- \vfill%
-
- \tcforms@formsigdate{\tcdef@forms@advisorsignature}%
- \vfill%
- \pagebreak%
-}%
-%
-%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% TCC Board approval form%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tcforms@examboardform}{}{%
- \tc@formtopbox{\tcdef@forms@formstitle}{\tcdef@forms@examboardformtitle}%
-
- \vfill%
-
- \tcforms@tccdesc%
-
- \vfill%
- \begin{center}
- \tcdef@forms@formsboardtitle
- \end{center}%
-
- \tcforms@examinerdesc{studentA}{examinerA}%
-
- \tcforms@examinerdesc{studentA}{examinerB}%
-
- \tcforms@examinerdesc{studentA}{examinerC}%
-
- \tcforms@examinerdesc[\tcdef@forms@formsaltexaminerlabel]{studentA}{altexaminerA}%
-
- \vfill%
+ \__ufrgscca_emptyfields:
+ \SetKeys[forms]{#1}%
+ }
- \tcdef@forms@examboardformdesc%
- \vfill%
- \tcforms@formsigdate{\tcdef@forms@advisorsignature}%
- \vfill%
- \pagebreak%
-}%
-%
-%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% TCC Board approval form%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tcforms@examboardformTMP}{}{%
- \tc@formtopbox{\tcdef@forms@formstitle}{\tcdef@forms@examboardformtitleTMP}%
+\int_new:N \l__ufrgscca_a_int
+\int_new:N \l__ufrgscca_b_int
+\NewDocumentCommand{\BlankLines}{m}{
+ \int_zero:N \l__ufrgscca_a_int
+ \int_set:Nn \l__ufrgscca_b_int {#1}
+ \int_do_until:nNnn {\l__ufrgscca_a_int} {=} {\l__ufrgscca_b_int}
+ {
+ \int_incr:N \l__ufrgscca_a_int
+ \hrulefill\\\par%
- \vfill%
+ }
+}
- \tcforms@tccdesc%
+\NewDocumentCommand{\SetForm}{mm+m}{
+ \prop_put:Nnn \l__ufrgscca_forms_prop {#1.#2}{#3}
+}
- \vfill%
+\NewDocumentCommand{\MakeForm}{m} {
\begin{center}
- \tcdef@forms@formsboardtitle
- \end{center}%
-
- \tcforms@examinerdesc{studentA}{examinerA}%
-
- \tcforms@examinerdesc{studentA}{examinerB}%
-
- \tcforms@examinerdesc{studentA}{examinerC}%
-
- \tcforms@examinerdesc[\tcdef@forms@formsaltexaminerlabel]{studentA}{altexaminerA}%
-
- \vfill%
-
- \tcdef@forms@examboardformdescTMP%
- \vfill%
-
- \tcforms@formsigdate{\tcdef@forms@advisorsignature}%
- \vfill%
-
- \pagebreak%
-}%
-%
-%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% TCC Board receipts form%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tcforms@receiptform}{m}{%
- \tc@formtopbox[tcdef@forms@receiptformfootnote]{\tcdef@forms@formstitle}{\tcdef@forms@receiptformtitle}%
-
- \vfill%
-
- \tcforms@tccdesc\\%
-
- \noindent\tcdef@forms@formsboardlabel : {\bf \csname tc@student\Alph{tc@studentcount}@#1\endcsname }%
-
- \vfill%
- \tcdef@forms@receiptformdesc {\bf \tc@studentA},\ \ \ \tcdef@forms@formsstudentIDlabel : {\bf \tc@studentAID}.%
-
- \vfill%
-
- \tcforms@formsigdate{\tcdef@forms@boardsignature}%
- \vfill%
- \pagebreak%
-}%
-%
-%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% examiners approval/not signature (for rectify approval form)%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tcforms@approvalsigdate}{mm}{%%
- \tcdef@forms@formsrectifyOKdesc%
- \hfill\tcdef@forms@formsdatelabel:\rule{\tc@daterule}{.1pt}\\[3mm]%
- #1: #2 \hfill \tcdef@forms@formssignaturelabel:\rule{\tc@namerule}{.1pt}%
-}%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% TCC Board rectify approval form%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tcforms@rectifyexaminersig}{O{\tcdef@forms@formsexaminerlabel}m}{\@ifundefined{#2}{}{\tcforms@approvalsigdate{#1}{\csname #2\endcsname}}\\[3mm]}%
-%
-\NewDocumentCommand{\tcforms@rectifyapprovalform}{}{%
- \tc@formtopbox{\tcdef@forms@formstitle}{\tcdef@forms@rectifyapprovalformtitle}%
-
- \vfill%
-
- \tcforms@tccdesc%
-
- \vfill%
- \tcdef@forms@rectifyapprovalformdesc%
-
- \vfill%
-
- \tcforms@rectifyexaminersig[\tcdef@forms@formsadvisorlabel]{tc@studentA@advisor}%
-
- \vfill%
-
- \@ifundefined{tc@nBoard}{}{%
- \tcforms@rectifyexaminersig{tc@studentA@examinerA}%
- }%
-
- \tcforms@rectifyexaminersig{tc@studentA@examinerB}%
-
- \tcforms@rectifyexaminersig{tc@studentA@examinerC}%
-
- \tcforms@rectifyexaminersig{tc@studentA@altexaminerA}%
- \vfill%
- \pagebreak%
-}%
-%
+ \noindent
+ \parbox[t]{\textwidth}
+ {
+ \centering
+ {
+ \UseTerm{cover.topbase}\\
+ {\sc \prop_item:Nn \l__ufrgscca_forms_prop {#1.heading}}
+ }
+ }\\[7mm]
+ {\bf \prop_item:Nn \l__ufrgscca_forms_prop {#1.title}}
+ \prop_if_in:NnTF \l__ufrgscca_forms_prop {#1.footnote}
+ {\footnote[1]{\prop_item:Nn \l__ufrgscca_forms_prop {#1.footnote}}}
+ {}\\
+ \end{center}
%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% TCC Advisor approval form%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tcforms@advisorapprovalform}{}{%
- \tc@formtopbox{\tcdef@forms@formstitle}{\tcdef@forms@advisorapprovalformtitle}%
-
- \vfill%
-
- \tcforms@tccdesc%
-
- \vfill%
- \tcdef@forms@advisorapprovalformdesc%
-
- \vfill%
-
- \tcdef@core@tccadvisorsreview%
-
- \vfill%
- \tcdef@forms@advisorapprovalformdescB%
-
- \tcforms@formsigdate{\tcdef@forms@advisorsignature}%
- \vfill%
-
- \tcforms@formsigdate{\tcdef@forms@studentsignature}%
- \vfill%
- \pagebreak%
-}%
-%
-%
-%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%
-%
-
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% set of blank lines%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\cmdfactory<core>{formsblanklines,formsblanklinesB}
-\formsblanklines{\hrulefill\\%
-
-\hrulefill\\%
-
-\hrulefill\\%
-
-\hrulefill\\%
-
-\hrulefill\\%
-
-\hrulefill\\%
-
-\hrulefill%
-}%
-%
-\formsblanklinesB{\hrulefill\\%
-
- \hrulefill\\%
-
- \hrulefill\\%
+ \vfill
+ \prop_item:Nn \l__ufrgscca_forms_prop {#1.opening}
+ \vfill
+ \prop_item:Nn \l__ufrgscca_forms_prop {#1.body}
+ \vfill
+ \prop_item:Nn \l__ufrgscca_forms_prop {#1.closing}
+ \pagebreak
+ }
- \hrulefill\\%
- \hrulefill\\%
-}%
+\NewDocumentCommand{\SignatureDate}{m}{
+ \begin{flushright} \UseTerm{localdate}%
+ ~\vspace*{6mm}\\
%
+ $\overline{\text{\emph{#1}}}$
+ \end{flushright}
+}
-
-\DeclareKeys[forms]{
- internreqform.usage = general,
- internreqform.code = {\tcforms@internreqform},
- internsupervisorform.usage = general,
- internsupervisorform.code = {\tcforms@internsupervisorform},
- interntutorform.usage = general,
- interntutorform.code = {\tcforms@interntutorform},
- reqform.usage = general,
- reqform.code = {\tcforms@reqform},
- reqform-II.usage = general,
- reqform-II.code = {\tcforms@reqform},
- coadvisor.usage = general,
- coadvisor.code = {\tcforms@coadvisorform},
- coadvisor-II.usage = general,
- coadvisor-II.code = {\tcforms@coadvisorform},
- boardapproval.usage = general,
- boardapproval.code = {\tcforms@examboardform},
- boardapproval-II.usage = general,
- boardapproval-II.code = {\tcforms@examboardform},
- boardapproval-IIb.usage = general,
- boardapproval-IIb.code = {\tcforms@examboardformTMP},
- advisorsapproval.usage = general,
- advisorsapproval.code = {\tcforms@advisorapprovalform},
- advisorsapproval-II.usage = general,
- advisorsapproval-II.code = {\tcforms@advisorapprovalform},
- receipts.usage = general,
- receipts.code = {\tcforms@receiptforms},
- receipts-II.usage = general,
- receipts-II.code = {\tcforms@receiptforms},
- examinersforms.usage = general,
- examinersforms.code = {\tcforms@examinersForms},
- examinersforms-II.usage = general,
- examinersforms-II.code = {\tcforms@examinersForms},
- rectifyapproval.usage = general,
- rectifyapproval.code = {\tcforms@rectifyapprovalform},
- rectifyapproval-II.usage = general,
- rectifyapproval-II.code = {\tcforms@rectifyapprovalform},
- reqform-I.usage = general,
- reqform-I.code = {\tcforms@reqTRform},
- coadvisor-I.usage = general,
- coadvisor-I.code = {\tcforms@coadvisorTRform},
- examinersforms-I.usage = general,
- examinersforms-I.code = {\tcforms@examinersTRforms},
- advisorsapproval-I.usage = general,
- advisorsapproval-I.code = {\tcforms@advisorTRapprovalform},
- boardapproval-I.usage = general,
- boardapproval-I.code = {\tcforms@advisorTRboardform},
- rectifyapproval-I.usage = general,
- rectifyapproval-I.code = {\tcforms@rectifyTRapprovalform},
- }
+\NewDocumentCommand{\BoardDescSignature}{mm}{
+ #1:~ \textbf{\DataFields{#2}{name}}\vspace{-2ex}
+ \begin{flushright}%~ \hfill
+ \UseLabel{email}:~ \textbf{\DataFields{#2}{email}}~
+ \UseLabel{phone}:~ \textbf{\DataFields{#2}{phone}}~
+ \UseLabel{agree}:~ \rule{\l__ufrgscca_agree_rule_dim}{.1pt}
+ \end{flushright}
+}
-\NewDocumentCommand{\tcforms}{m}{%
- \SetKeys[forms]{#1}%
-}
+%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%
+%%%
+%%% loading defaults
+%%%
+%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%
+\ExplSyntaxOff
+ \input{ufrgscca-forms.tex}
+\ExplSyntaxOn
-\NewDocumentCommand{\tcemptyforms}{m}{%
- \tccore@resetfields%
- \title{\rule{\tc@namerule}{.1pt}}%
- \tccore@emptyfields%
- \SetKeys[forms]{#1}%
-}
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.tex b/macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.tex
new file mode 100644
index 0000000000..9f822247c9
--- /dev/null
+++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.tex
@@ -0,0 +1,1277 @@
+%%%==============================================================================
+%% Copyright 2022-23 by Alceu Frigeri
+%%
+%% This work may be distributed and/or modified under the conditions of
+%%
+%% * The [LaTeX Project Public License](http://www.latex-project.org/lppl.txt),
+%% version 1.3c (or later), and/or
+%% * The [GNU Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.html),
+%% version 3 (or later)
+%%
+%% This work has the LPPL maintenance status *maintained*.
+%%
+%% The Current Maintainer of this work is Alceu Frigeri
+%%
+%% This is version {2.0} {2023/11/23}
+%%
+%% The list of files that compose this work can be found in the README.md file at
+%% https://ctan.org/pkg/ufrgscca
+%%
+%%%==============================================================================
+%% UFRGS stands for "Federal University of Rio Grande do Sul" in south Brazil
+%% EE stands for "Engineering School"
+%% CCA stands for "Control and Automation Engineering Course" (Portuguese acronym)
+%%%==============================================================================
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%
+%%% Internship
+%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%
+%% req form - Internship
+%%%%%%%%%%%%%%%
+\SetForm{internshiprequest}{heading}{\UseTerm{title.internship}}
+\SetForm{internshiprequest}{title}{\UseTerm{title.requestform}}
+
+%%%
+\SetForm{internshiprequest}{opening}{
+
+ \UseTerm{opening.requestform}}
+
+%%%
+\SetForm{internshiprequest}{body}{
+ \UseTerm{desc.requestform} \Activity[internship]{name}.
+ \vfill%
+ \UseLabel{student.email}: {\bf \DataFields{student}{email}} %
+\vspace{2mm}
+
+\UseLabel{tutor}: \textbf{\DataFields{student.tutor}{name}}%
+
+\UseLabel{tutor.email}: {\bf \DataFields{student.tutor}{email}}%
+\hfill \UseLabel{phone}: {\bf \DataFields{student.tutor}{phone}}%
+\vspace{2mm}
+
+
+Empresa: {\bf \DataFields{student.internship}{company}}%
+
+Área de Atividade: {\bf \DataFields{student.internship}{field}}%
+\vspace{2mm}
+
+\UseTerm{desc.supervisor}
+
+Cargo: {\bf \DataFields{student.supervisor}{office}}\hfill Email: {\bf \DataFields{student.supervisor}{email}} \hfill Fone: {\bf \DataFields{student.supervisor}{phone}} %
+\vspace{2mm}
+
+Data de Início: {\bf \DataFields{student.internship}{start}}\hfill Previsão de Término: {\bf \DataFields{student.internship}{end}}\hfill Duração: {\bf \DataFields{student.internship}{length}}
+
+}
+
+%%%
+\SetForm{internshiprequest}{closing}{
+ \parbox[t]{.45\textwidth}{\SignatureDate{\UseLabel{signature.supervisor}}}\hfill%
+ \parbox[t]{.45\textwidth}{\SignatureDate{\UseLabel{signature.tutor}}}%
+
+ \hfill%
+ \parbox[t]{.45\textwidth}{\SignatureDate{\UseLabel{signature.student}}}
+}
+
+
+%%%%%%%%%%%%%%%
+%% supervisor`s form - Internship
+%%%%%%%%%%%%%%%
+\SetForm{internshipsupervisorform}{heading}{\UseTerm{title.internship}}
+\SetForm{internshipsupervisorform}{title}{\UseTerm{title.internsupervisorform}}
+\SetForm{internshipsupervisorform}{footnote}{\UseTerm{footnote.supervisorsform}}
+
+%%%
+\SetForm{internshipsupervisorform}{opening}{
+ \UseTerm{desc.student}\\%
+ \noindent\UseTerm{desc.supervisor}\\%
+ \UseTerm{desc.internshipperiod}
+}
+
+%%%
+\SetForm{internshipsupervisorform}{body}{
+\begin{itemize}[tcc,nosep]
+ \item Grupo I - Aspectos Profissionais
+ \begin{enumerate}[tcc,nosep]
+ \item \textbf{Qualidade do Trabalho}:\emptybox\\ {\footnotesize considerar a qualidade do trabalho tendo em vista o que seria desejável}
+ \item \textbf{Engenhosidade}:\emptybox\\ {\footnotesize capacidade de sugerir, projetar ou executar modificações ou inovações.}
+ \item \textbf{Conhecimentos}:\emptybox\\ {\footnotesize conhecimento demonstrado no desenvolvimento das atividades programadas.}
+ \item \textbf{Cumprimentos das Tarefas}:\emptybox\\ {\footnotesize considerar o volume de atividades cumpridas dentro de um padrão razoável.}
+ \item \textbf{Iniciativa}:\emptybox\\ {\footnotesize iniciativa para desenvolver suas atividades sem dependências de outros.}
+ \end{enumerate}
+ \item Grupo II - Aspectos Humanos
+ \begin{enumerate}[tcc,nosep]
+ \item \textbf{Assiduidade}:\emptybox\\ {\footnotesize cumprimento do horário do estágio e ausência de falhas}
+\item \textbf{Disciplina}:\emptybox\\ {\footnotesize observância das normas e regulamentos internos da empresa.}
+\item \textbf{Sociabilidade}:\emptybox\\ {\footnotesize facilidade de se integrar com colegas e ambiente de trabalho.}
+\item \textbf{Cooperação}:\emptybox\\ {\footnotesize disposição para cooperar com colegas e para atender a atividades..}
+\item \textbf{Senso de Responsabilidade}:\emptybox\\ {\footnotesize zelo pelo material, equipamentos e bens da empresa.}
+ \end{enumerate}
+\end{itemize}
+
+ \vfill%
+
+ Considerações Complementares: \BlankLines{5}
+}
+
+%%%
+\SetForm{internshipsupervisorform}{closing}{
+\hfill\parbox[t]{.45\textwidth}{\SignatureDate{\UseLabel{signature.supervisor}}}
+}
+
+%%%%%%%%%%%%%%%
+%% tutor`s form - Internship
+%%%%%%%%%%%%%%%
+\SetForm{internshiptutorform}{heading}{\UseTerm{title.internship}}
+\SetForm{internshiptutorform}{title}{\UseTerm{title.interntutorform}}
+
+%%%
+\SetForm{internshiptutorform}{opening}{
+ \UseTerm{desc.student}\\%
+ \UseLabel{tutor}: \textbf{\DataFields{student.tutor}{name}}\\%
+ \UseTerm{desc.internshipperiod}
+}
+
+%%%
+\SetForm{internshiptutorform}{body}{
+ Avaliação d\DataFields{student.tutor}{article} Prof\DataFields{student.tutor}{narticle}. Tutor\DataFields{student.tutor}{narticle}:\emptybox
+
+ \vfill%
+
+ Considerações d\DataFields{student.tutor}{article} Prof\DataFields{student.tutor}{narticle}. Tutor\DataFields{student.tutor}{narticle} sobre o Estágio:
+
+ \BlankLines{5}%
+
+ \vfill%
+
+ \hfill\parbox[t]{.45\textwidth}{\SignatureDate{\UseLabel{signature.tutor}}}
+
+ % \hline
+ \vfill%
+
+ Avaliação d\ActivityCoord[internship]{article} Prof\ActivityCoord[internship]{narticle}. Coordenador\ActivityCoord[internship]{narticle}:\emptybox%
+ \vfill
+
+ Considerações d\ActivityCoord[internship]{article} Prof\ActivityCoord[internship]{narticle}. Coordenador\ActivityCoord[internship]{narticle} sobre o Estágio:
+
+ \BlankLines{5}%
+ \vfill%
+
+ \hfill\parbox[t]{.45\textwidth}{\SignatureDate{\UseLabel{signature.internshipcoord}}}
+}
+
+%%%
+\SetForm{internshiptutorform}{closing}{}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%
+%%% TCCs - Calendar - EVENTS
+%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%\SetActivityNewEvent{}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%
+%%% TCCs - Calendar
+%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\SetForm{calendar-I}{heading}{\UseTerm{title.tccI}}
+\SetForm{calendar-I}{title}{\UseTerm{title.calendar}}
+\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
+ { \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:nF {activity.calendar}{\bool_set_false:N \l__ufrgscca_tmp_bool}
+ }
+ \end{tabular}}%
+%
+ \end{center}%
+ \scriptsize \UseTerm{notes.calendarI}
+ }%
+}
+ \ExplSyntaxOff
+
+%%%
+\SetForm{calendar-I}{closing}{\vfill}%
+%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%
+
+\SetForm{calendar-II}{heading}{\UseTerm{title.tccII}}
+\SetForm{calendar-II}{title}{\UseTerm{title.calendar}}
+\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
+ { \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}
+ }
+ \end{tabular}}%
+%
+ \end{center}%
+ \scriptsize \UseTerm{notes.calendarII}
+ }%
+}
+ \ExplSyntaxOff
+
+%%%
+\SetForm{calendar-II}{closing}{\vfill}%
+%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%
+%%% TCC - I
+%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%
+%% req form - I
+%%%%%%%%%%%%%%%
+\SetForm{request-I}{heading}{\UseTerm{title.tccI}}
+\SetForm{request-I}{title}{\UseTerm{title.requestform}}
+\SetForm{request-I}{opening}{\UseTerm{opening.requestform}}
+
+%%%
+\SetForm{request-I}{body}{%
+ \UseTerm{desc.requestform} \Activity[tccI]{name}.
+ \vfill%
+
+ \UseLabel{worktitle.temp}: \DataFields{student}{worktitle}%\@title %
+
+ \UseLabel{student.email}: {\bf \DataFields{student}{email}} %
+
+ \UseLabel{advisor}: \DataFields{student.advisor}{name}%
+
+ \UseLabel{advisor.email}: {\bf \DataFields{student.advisor}{email}}%
+ \hfill \UseLabel{phone}: {\bf \DataFields{student.advisor}{phone}}%
+
+ {\bf Resumo}:\footnote[1]{\UseTerm{footnote.requestform}}%
+
+ \vfill%
+
+ \DataFields{student}{brief}
+}
+
+%%%
+\SetForm{request-I}{closing}{%
+ \parbox[t]{.45\textwidth}{\SignatureDate{\UseLabel{signature.student}}}\hfill%
+ \parbox[t]{.45\textwidth}{\SignatureDate{\UseLabel{signature.advisor}}}%
+}%
+%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%
+%% coadvisor - I
+%%%%%%%%%%%%%%%
+\SetForm{coadvisor-I}{heading}{\UseTerm{title.tccI}}
+\SetForm{coadvisor-I}{title}{\UseTerm{title.coadvisorform}}
+\SetForm{coadvisor-I}{opening}{%
+
+ \UseTerm{opening.requestform}
+ \coadvisoremptyifnone
+}
+
+%%%
+\SetForm{coadvisor-I}{body}{%
+ \UseTerm{desc.coadvisorform}
+ \vfill%
+
+ \UseLabel{worktitle.temp}: \DataFields{student}{worktitle}%\@title %
+
+ \UseLabel{advisor}: \DataFields{student.advisor}{name}
+
+ \UseLabel{coadvisor}: \DataFields{student.coadvisor}{name}%
+
+ \UseLabel{coadvisor.email}: {\bf \DataFields{student.coadvisor}{email}}%
+ \hfill \UseLabel{phone}: {\bf \DataFields{student.coadvisor}{phone}}\\%
+
+ {\bf Justificativa}:%
+ \vfill
+
+ \DataFields{student.coadvisor}{reason}
+
+}
+
+%%%
+\SetForm{coadvisor-I}{closing}{%
+
+ \SignatureDate{\UseLabel{signature.student}}
+
+ \parbox[t]{.45\textwidth}{\SignatureDate{\UseLabel{signature.advisor}}}\hfill%
+ \parbox[t]{.45\textwidth}{\SignatureDate{\UseLabel{signature.coadvisor}}}%
+}%
+%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%
+%% board approval - I
+%%%%%%%%%%%%%%%
+\SetForm{boardapproval-I}{heading}{\UseTerm{title.tccI}}
+\SetForm{boardapproval-I}{title}{\UseTerm{title.boardapproval}}
+\SetForm{boardapproval-I}{opening}{\UseTerm{desc.studentwork.full}}
+
+%%%
+\SetForm{boardapproval-I}{body}{ \begin{center}
+ \UseLabel{board}
+ \end{center}%
+
+%%% TODO: That's do be done... convert it to starray!!!
+
+ \BoardDescSignature{Avaliador\DataFields{student.reviewer[2]}{narticle}}{student.reviewer[2]}
+
+ \BoardDescSignature{Avaliador\DataFields{student.reviewer[3]}{narticle}}{student.reviewer[3]}
+
+ \vfill%
+
+ Indicamos a nominata da Banca Examinadora acima relacionada.%
+}
+
+%%%
+\SetForm{boardapproval-I}{closing}{\hfill\parbox[t]{.45\textwidth}{\SignatureDate{\UseLabel{signature.advisor}}}}
+%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%
+%% advisor's approval - I
+%%%%%%%%%%%%%%%
+\SetForm{advisorsapproval-I}{heading}{\UseTerm{title.tccI}}
+\SetForm{advisorsapproval-I}{title}{\UseTerm{title.advisorsapproval-I}}
+\SetForm{advisorsapproval-I}{opening}{\UseTerm{desc.studentwork.full}}
+
+%%%
+\SetForm{advisorsapproval-I}{body}{%
+ {\bf Parecer d\DataFields{student.advisor}{article} Orientador\DataFields{student.advisor}{narticle}}\footnote{Preenchimento Obrigatório}
+
+ \vfill%
+
+
+ \DataFields{student.advisor}{assessment}
+}
+
+%%%
+\SetForm{advisorsapproval-I}{closing}{
+ \SignatureDate{\UseLabel{signature.advisor}}\vfill%
+ \SignatureDate{\UseLabel{signature.student}}%
+
+}%
+%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%
+%% examiner's form - I
+%%%%%%%%%%%%%%%
+\SetForm{examinersform-I}{heading}{\UseTerm{title.tccI}}
+\SetForm{examinersform-I}{title}{\UseTerm{title.reviewersform}}
+\SetForm{examinersform-I}{footnote}{\UseTerm{footnote.reviewersform}}
+\SetForm{examinersform-I}{opening}{%
+ \UseTerm{desc.studentwork}\\[2mm]
+
+ \UseLabel{reviewer}: \textbf{\DataFields{student.reviewer}{name}}\\[-4mm]%
+
+ {\scriptsize {\textsl{(favor retornar este diretamente à coordenação de TCC.)}}}
+ }
+
+%%%
+\SetForm{examinersform-I}{body}{%
+ O trabalho submetido\footnotemark[2]:
+
+ \begin{enumerate}[tcc,nosep]
+ \item \emptybox\ \textbf{Enquadramento do Tema}. {\footnotesize(peso:2)}\\ {\footnotesize Quão bem o mesmo se enquadra no perfil de um formando em Eng. de Controle e Automação.}
+ \item \emptybox\ \textbf{Revisão Bibliográfica}. {\footnotesize(peso:2)}\\ {\footnotesize A revisão apresentada é adequada, suficiente, para o tema do trabalho?}
+ \item \emptybox\ \textbf{Abordagem/Plano de Trabalho Proposto}. {\footnotesize(peso:2)}\\ {\footnotesize Considerar se a abordagem, plano de trabalho proposto, é adequada e factivel.}
+ \item \emptybox\ \textbf{Redação}. {\footnotesize(peso:1)}\\ {\footnotesize Considerar a qualidade do trabalho escrito apresentado.}
+ \item { O Trabalho Submetido}
+ \begin{itemize}[tcc,nosep]
+ \item[$\Box$] Está adequado, dispensando correções do texto.
+ \item[$\Box$] Está adequado, sendo necessário correções, conforme anotações anexas.
+ \item[$\Box$] Necessita ser revisto/re-escrito,\footnotemark[3] e:
+ \begin{itemize}
+ \item[$\Box$] basta a revisão final do texto pelo orientador,
+ \item[$\Box$] revisarei o trabalho depois de corrigido.
+ \end{itemize}
+ \end{itemize}
+ \end{enumerate}
+
+Outras considerações, parecer (se necessário): \BlankLines{6}
+
+ \footnotetext[2]{Use a escala: \begin{enumerate*}\item[0.]Péssimo \item[3.]Deficitário \item[6.]Bom \item[8.]Muito Bom \item[10.]Excelente \end{enumerate*}}%
+ \footnotetext[3]{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{examinersform-I}{closing}{%signature.reviewer
+ \SignatureDate{\UseLabel{signature.reviewer}}%
+}
+%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%
+%% rectify approval - I
+%%%%%%%%%%%%%%%
+\SetForm{rectifyapproval-I}{heading}{\UseTerm{title.tccI}}
+\SetForm{rectifyapproval-I}{title}{\UseTerm{title.rectifyapproval}}
+\SetForm{rectifyapproval-I}{opening}{\UseTerm{desc.studentwork.full}}
+
+%%%
+\SetForm{rectifyapproval-I}{body}{ %
+ \SetTerms{temp.formrefname = {Formulário de Avaliação}}
+ \UseTerm{desc.rectifyapproval}
+
+ \vfill%
+
+ \ApprovalSignature[\UseLabel{advisor}]{\DataFields{student.advisor}{name}}
+
+}
+
+%%%
+\SetForm{rectifyapproval-I}{closing}{
+
+ \SetReviewer{2}
+ \ApprovalSignature{\DataFields{student.reviewer}{name}}\vfill
+
+ \SetReviewer{3}
+ \ApprovalSignature{\DataFields{student.reviewer}{name}}\vfill
+
+ }
+%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%
+%%% TCC - II
+%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%
+%% req form - II
+%%%%%%%%%%%%%%%
+\SetForm{request-II}{heading}{\UseTerm{title.tccII}}
+\SetForm{request-II}{title}{\UseTerm{title.requestform}}
+
+\SetForm{request-II}{opening}{
+
+\UseTerm{opening.requestform}}
+
+%%%
+\SetForm{request-II}{body}{
+ \UseTerm{desc.requestform} \Activity[tccII]{name}.
+ \vfill%
+
+ \UseLabel{worktitle.temp}: \DataFields{student}{worktitle}%\@title %
+
+ \UseLabel{student.email}: {\bf \DataFields{student}{email}} %
+
+ \UseLabel{advisor}: \DataFields{student.advisor}{name}%
+
+ \UseLabel{advisor.email}: {\bf \DataFields{student.advisor}{email}}%
+ \hfill \UseLabel{phone}: {\bf \DataFields{student.advisor}{phone}}%
+
+ \UseLabel{coadvisor}: \DataFields{student.coadvisor}{name}%
+
+ \UseLabel{coadvisor.email}: {\bf \DataFields{student.coadvisor}{email}}%
+ \hfill \UseLabel{phone}: {\bf \DataFields{student.coadvisor}{phone}}%
+
+
+ \vfill%
+ O Tema do Trabalho e Orientador (Coorientador) seguem sendo os mesmos de TCC I ?
+\begin{itemize}[tcc,noitemsep]
+ \item[$\Box$] SIM
+ \item[$\Box$] NÃO, neste caso \textbf{justifique} a mudança no espaço a seguir:
+ \end{itemize}
+
+
+ \DataFields{student}{reason}
+
+}
+
+%%%
+\SetForm{request-II}{closing}{
+ \parbox[t]{.45\textwidth}{\SignatureDate{\UseLabel{signature.student}}}\hfill%
+ \parbox[t]{.45\textwidth}{\SignatureDate{\UseLabel{signature.advisor}}}%
+}
+%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%
+%% coadvisor - II
+%%%%%%%%%%%%%%%
+\SetForm{coadvisor-II}{heading}{\UseTerm{title.tccII}}
+\SetForm{coadvisor-II}{title}{\UseTerm{title.coadvisorform}}
+\SetForm{coadvisor-II}{opening}{%
+
+ \UseTerm{opening.requestform}
+ \coadvisoremptyifnone
+}
+
+%%%
+\SetForm{coadvisor-II}{body}{%
+ \UseTerm{desc.coadvisorform}
+ \vfill%
+
+ \UseLabel{worktitle.temp}: \DataFields{student}{worktitle}%\@title %
+
+ \UseLabel{advisor}: \DataFields{student.advisor}{name}
+
+ \UseLabel{coadvisor}: \DataFields{student.coadvisor}{name}%
+
+ \UseLabel{coadvisor.email}: {\bf \DataFields{student.coadvisor}{email}}%
+ \hfill \UseLabel{phone}: {\bf \DataFields{student.coadvisor}{phone}}\\%
+
+ {\bf Justificativa}:%
+ \vfill
+
+ \DataFields{student.coadvisor}{reason}
+}
+
+%%%
+\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}}}%
+}
+%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%
+
+
+
+
+%%%%%%%%%%%%%%%
+%% board approval - II
+%%%%%%%%%%%%%%%
+\SetForm{boardapproval-II}{heading}{\UseTerm{title.tccII}}
+\SetForm{boardapproval-II}{title}{\UseTerm{title.boardapproval}}
+\SetForm{boardapproval-II}{opening}{\UseTerm{desc.studentwork.full}}
+
+%%%
+\SetForm{boardapproval-II}{body}{%
+ \begin{center}
+ \UseLabel{board}%
+ \end{center}%
+
+ \BoardDescSignature{Avaliador\DataFields{student.reviewer[1]}{narticle}}{student.reviewer[1]}
+
+ \BoardDescSignature{Avaliador\DataFields{student.reviewer[2]}{narticle}}{student.reviewer[2]}
+
+ \BoardDescSignature{Avaliador\DataFields{student.reviewer[3]}{narticle}}{student.reviewer[3]}
+
+ \BoardDescSignature{Suplente}{student.altreviewer[1]}
+
+ \vfill%
+
+ Indicamos a nominata da Banca Examinadora acima relacionada.%
+}
+
+%%%
+\SetForm{boardapproval-II}{closing}{ \SignatureDate{\UseLabel{signature.advisor}}}
+%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%
+
+
+
+
+%%%%%%%%%%%%%%%
+%% advisor's approval - II
+%%%%%%%%%%%%%%%
+\SetForm{advisorsapproval-II}{heading}{\UseTerm{title.tccII}}
+\SetForm{advisorsapproval-II}{title}{\UseTerm{title.advisorsapproval-II}}
+\SetForm{advisorsapproval-II}{opening}{\UseTerm{desc.studentwork.full}}
+
+%%%
+\SetForm{advisorsapproval-II}{body}{%
+ {\bf Parecer d\DataFields{student.advisor}{article} Orientador\DataFields{student.advisor}{narticle}}\footnote{Preenchimento Obrigatório}
+
+ \vfill%
+
+ \DataFields{student.advisor}{assessment}
+}
+
+%%%
+\SetForm{advisorsapproval-II}{closing}{%
+ \SignatureDate{\UseLabel{signature.advisor}}%
+ \vfill%
+
+ \SignatureDate{\UseLabel{signature.student}}%
+ }
+%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%
+%% receipts - II
+%%%%%%%%%%%%%%%
+\SetForm{receipts-II}{heading}{\UseTerm{title.tccII}}
+\SetForm{receipts-II}{title}{\UseTerm{title.receipts}}
+\SetForm{receipts-II}{footnote}{\UseTerm{footnote.receipts}}
+
+%%%
+\SetForm{receipts-II}{opening}{%
+ \UseTerm{desc.studentwork.full}\\%
+
+ \noindent Membro da Banca : {\bf \DataFields{student.reviewer}{name} }%
+}
+
+%%%
+\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}}%
+
+}
+
+%%%
+\SetForm{receipts-II}{closing}{}
+%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%
+%% examiner's form - II
+%%%%%%%%%%%%%%%
+\SetForm{examinersform-II}{heading}{\UseTerm{title.tccII}}
+\SetForm{examinersform-II}{title}{\UseTerm{title.reviewersform}}
+\SetForm{examinersform-II}{footnote}{\UseTerm{footnote.reviewersform}}
+
+%%%
+\SetForm{examinersform-II}{opening}{\UseTerm{desc.studentwork}
+
+ \noindent\UseLabel{reviewer}: \textbf{\DataFields{student.reviewer}{name}}
+}
+
+%%%
+\SetForm{examinersform-II}{body}{
+A nota (variando de zero a dez) atribuída por cada membro da banca examinadora será dada considerando o desempenho d\DataFields{student}{article} alun\DataFields{student}{article} nos 3 pontos apresentados na tabela abaixo.
+
+ \vfill%
+
+ \begin{center}
+ \begin{tabular}{|c|c|c|}%
+ \hline%
+ \UseLabel{TCC-II.pointA} & \UseLabel{TCC-II.pointB} & \UseLabel{TCC-II.pointC} \\\hline%
+ & & \\\hline
+ \end{tabular}%
+ \end{center}%
+}
+
+%%%
+\SetForm{examinersform-II}{closing}{
+
+ \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}%
+}
+%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%
+%% examiner's form - II
+%%%%%%%%%%%%%%%
+\SetForm{correctionsform-II}{heading}{\UseTerm{title.tccII}}
+\SetForm{correctionsform-II}{title}{\UseTerm{title.correctionsform}}
+\SetForm{correctionsform-II}{footnote}{\UseTerm{footnote.correctionsform}}
+
+%%%
+\SetForm{correctionsform-II}{opening}{\UseTerm{desc.studentwork}
+
+ \noindent\UseLabel{reviewer}: \textbf{\DataFields{student.reviewer}{name}}
+
+}
+
+%%%
+\SetForm{correctionsform-II}{body}{ \resizebox{0.9\textwidth}{!}{%%
+O texto submetido:
+ \parbox[t]{.75\textwidth}{
+ \begin{itemize}[tcc,nosep]
+ \item[$\Box$] Está adequado, dispensando correções do texto.
+ \item[$\Box$] Está adequado, sendo necessário correções, conforme a
+ seguir (e anotações anexas).
+ \begin{description}[tcc,noitemsep]
+ \item[$\Box$] Ortográfica
+ \item[$\Box$] Regras de Escrita
+ \item[$\Box$] Equações
+ \item[$\Box$] Resumo
+ \item[$\Box$] Abstract
+ \item[$\Box$] Índice
+ \item[$\Box$] Introdução
+ \item[$\Box$] Conclusões
+ \item[$\Box$] Corpo do Trabalho
+ \item[$\Box$] Resultados
+ \item[$\Box$] Adicionar mais exemplos
+ \item[$\Box$] Figuras
+ \item[$\Box$] Tabelas
+ \end{description}
+ \item[$\Box$] Necessita ser revisto/re-escrito,\footnotemark[2] e:
+ \begin{itemize}
+ \item[$\Box$] basta a revisão final do texto pelo orientador,
+ \item[$\Box$] revisarei o trabalho depois de corrigido.
+ \end{itemize}
+ \item[$\Box$] Outras considerações (se necessário): \\
+ \begin{tabular}{p{0.7\textwidth}}
+ ~\\\hline
+ ~\\\hline
+ ~\\\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.}%
+}
+
+%%%
+\SetForm{correctionsform-II}{closing}{ \SignatureDate{\UseLabel{signature.reviewer}}%
+ }
+%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%
+
+
+
+%%%%%%%%%%%%%%%
+%% rectify approval - II
+%%%%%%%%%%%%%%%
+\SetForm{rectifyapproval-II}{heading}{\UseTerm{title.tccII}}
+\SetForm{rectifyapproval-II}{title}{\UseTerm{title.rectifyapproval}}
+\SetForm{rectifyapproval-II}{opening}{\UseTerm{desc.studentwork.full}}
+
+%%%
+\SetForm{rectifyapproval-II}{body}{ %
+ \SetTerms{temp.formrefname = {Formulário de Correções}}
+ \UseTerm{desc.rectifyapproval}
+
+ \vfill%
+
+ \ApprovalSignature[\UseLabel{advisor}]{\DataFields{student.advisor}{name}}
+}
+
+%%%
+\SetForm{rectifyapproval-II}{closing}{%
+ \studentDistinctBoardCase
+ {
+ \SetReviewer{1}
+ \ApprovalSignature{\DataFields{student.reviewer}{name}}\vfill
+ }
+ {}
+
+ \SetReviewer{2}
+ \ApprovalSignature{\DataFields{student.reviewer}{name}}\vfill
+
+ \SetReviewer{3}
+ \ApprovalSignature{\DataFields{student.reviewer}{name}}\vfill
+
+
+ \ApprovalSignature[\UseLabel{altreviewer.sig}]{\DataFields{student.altreviewer}{name}}
+}
+
+%%%%%%%%%%%%%%%
+%% referall letter- I
+%%%%%%%%%%%%%%%
+\SetForm{referral-I}{heading}{\UseTerm{title.tccI}}
+\SetForm{referral-I}{title}{\UseTerm{semester}}
+\SetForm{referral-I}{opening}{\UseTerm{desc.sacad}}
+
+%%%
+\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}{%
+ \begin{flushright}
+ Porto Alegre, \UseConst{publ.day} de \UseConst{publ.month} de \UseConst{publ.year}.\\[2em]
+
+ \ActivitySelect{tccI}
+ \DataFields{activity.coord}{name}
+
+ \DataFields{activity.coord}{title}
+ \end{flushright}
+ \vfill
+}
+
+
+\NewDocumentCommand{\studentCoadvLabelCase}{}{%%
+ \studentCoadvCase{\UseLabel{advisors} : \DataFields{student.advisor}{name} / \DataFields{student.coadvisor}{name}}{\UseLabel{advisor} : \DataFields{student.advisor}{name}}%%
+}
+
+\NewDocumentCommand{\studentBoardI}{}{
+ {%%
+ \footnotesize%
+ \begin{center}%
+ \begin{tabular}{p{\UseConst{report.tabA*}}@{\ }p{\UseConst{report.tabB*}}@{\ }c}%\hline%
+ & \UseLabel{board} \\\hline%
+ \multirow{2}={\DataFields{student}{name}} %
+ &\DataFields{student.reviewer[2]}{name}\\%
+ &\DataFields{student.reviewer[3]}{name}\\%
+ \multicolumn{2}{l}{\ \ \studentCoadvLabelCase} \\\hline%
+ \end{tabular}%
+ \end{center}%
+ }%
+}
+
+\NewDocumentCommand{\studentBoardGradedI}{}{
+ {\footnotesize%
+ \begin{center}%
+ \resizebox{\textwidth}{!}{%
+ \begin{tabular}{p{\UseConst{report.tabA}}@{\ }p{\UseConst{report.tabB}}@{\ }c@{\ }c@{\ }c@{\ }c@{\ }c@{\ }c}%\hline%
+ \HeaderLineI
+ \studentLineI\\*\hline
+ \end{tabular}%
+ }%
+ \end{center}%
+ }%
+}
+
+
+\NewDocumentCommand{\HeaderLineI}{}{%
+ & \UseLabel{board} & \UseLabel{TCC-I.pointA} & \UseLabel{TCC-I.pointB} & \UseLabel{TCC-I.pointC} & \UseLabel{TCC-I.pointD} &%
+ \UseLabel{Ngrade} & \UseLabel{grade}\\\hline%
+}
+\NewDocumentCommand{\studentLineI}{}{%
+ \multirow{2}={\textbf{\DataFields{student}{name}}} %
+ \ReviewerLineI{2}\\*%
+ \ReviewerLineI{3}\\*%
+ \multicolumn{6}{l}{\ \ \ \studentCoadvLabelCase} & \textbf{\DataFields{student}{gradeavrg}} & \textbf{\DataFields{student}{grade}}%\\* \hline%
+}
+
+\NewDocumentCommand{\ReviewerLineI}{m}{%
+ & \hspace{-0.4em}\DataFields{student.reviewer[#1]}{name} & \DataFields{student.reviewer[#1]}{pointA} & \DataFields{student.reviewer[#1]}{pointB} & \DataFields{student.reviewer[#1]}{pointC} & \DataFields{student.reviewer[#1]}{pointD} & \DataFields{student.reviewer[#1]}{grade} &%
+ }
+
+
+\NewDocumentCommand{\studentExtLine}{m}{%
+ \\[-1em]%
+ \multicolumn{#1}{l}{\ \ \ \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
+}
+
+
+
+
+
+%%%%%%%%%%%%%%%
+%% referall letter- II
+%%%%%%%%%%%%%%%
+\SetForm{referral-II}{heading}{\UseTerm{title.tccII}}
+\SetForm{referral-II}{title}{\UseTerm{semester}}
+\SetForm{referral-II}{opening}{\UseTerm{desc.sacad}}
+
+%%%
+\SetForm{referral-II}{body}{ %
+
+\studentCase%
+ {
+ \DataFields{student}{Article} alun\DataFields{student}{article} \emph{\DataFields{student}{name}}\ apresentou o trabalho intitulado \emph{\DataFields{student}{worktitle}}\ no dia \DataFields{student}{board-day}, tendo sido APROVAD\DataFields{student}{Article} com conceito final \textbf{\DataFields{student}{grade}}, conforme quadro de notas abaixo.\\[2em]
+ \studentBoardGradedII
+ }%
+ {
+ \DataFields{student}{Article} alun\DataFields{student}{article} \emph{\DataFields{student}{name}}\ apresentou o trabalho intitulado \emph{\DataFields{student}{worktitle}}\ no dia \DataFields{student}{board-day}, tendo sido REAPROVAD\DataFields{student}{Article} com conceito final \textbf{\DataFields{student}{grade}}, conforme quadro de notas abaixo.\\[2em]
+ \studentBoardGradedII
+ }%
+ {
+ \DataFields{student}{Article} alun\DataFields{student}{article} \emph{\DataFields{student}{name}}\ apresentou o trabalho intitulado \emph{\DataFields{student}{worktitle}}\ no dia \DataFields{student}{board-day}, 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]
+ \studentBoardII
+ }%
+ {
+ \DataFields{student}{Article} alun\DataFields{student}{article} \emph{\DataFields{student}{name}}\ apresentou o trabalho intitulado \emph{\DataFields{student}{worktitle}}\ no dia \DataFields{student}{board-day}, 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]
+ \studentBoardII
+ }%
+ {
+ \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-II}{closing}{%
+ \begin{flushright}
+ Porto Alegre, \UseConst{publ.day} de \UseConst{publ.month} de \UseConst{publ.year}.\\[2em]
+
+ \ActivitySelect{tccII}
+ \DataFields{activity.coord}{name}
+
+ \DataFields{activity.coord}{title}
+ \end{flushright}
+ \vfill
+}
+
+
+
+
+
+\NewDocumentCommand{\studentBoardII}{}{
+ {%%
+ \footnotesize%
+ \begin{center}%
+ \begin{tabular}{p{\UseConst{report.tabA*}}@{\ }p{\UseConst{report.tabB*}}@{\ }c}%\hline%
+ & \UseLabel{board} \\\hline%
+ \multirow{3}={\DataFields{student}{name}} %
+ &\DataFields{student.reviewer[1]}{name}\\%
+ &\DataFields{student.reviewer[2]}{name}\\%
+ &\DataFields{student.reviewer[3]}{name}\\%
+ \multicolumn{2}{l}{\ \ \studentCoadvLabelCase} \\\hline%
+ \end{tabular}%
+ \end{center}%
+ }%
+}
+\NewDocumentCommand{\studentBoardGradedII}{}{
+ {%
+ \footnotesize%
+ \begin{center}%
+ \resizebox{\textwidth}{!}{%
+ \begin{tabular}{p{\UseConst{report.tabA}}@{\ }p{\UseConst{report.tabB}}@{\ }c@{\ }c@{\ }c@{\ }c@{\ }c}%\hline%
+ \HeaderLineII
+ \studentLineII\\*\hline
+ \end{tabular}%
+ }%
+ \end{center}%
+ }%
+}
+
+\NewDocumentCommand{\HeaderLineII}{}{%
+ & \UseLabel{board} & \UseLabel{TCC-II.pointA} & \UseLabel{TCC-II.pointB} & \UseLabel{TCC-II.pointC} &%
+ \UseLabel{Ngrade} & \UseLabel{grade}\\\hline%
+}
+\NewDocumentCommand{\studentLineII}{}{%
+ \multirow{3}={\textbf{\DataFields{student}{name}}} %
+ \ReviewerLineII{1}\\*%
+ \ReviewerLineII{2}\\*%
+ \ReviewerLineII{3}\\*%
+ \multicolumn{5}{l}{\ \ \ \studentCoadvLabelCase} & \textbf{\DataFields{student}{gradeavrg}} & \textbf{\DataFields{student}{grade}}%\\ \hline%
+}
+
+\NewDocumentCommand{\ReviewerLineII}{m}{%
+ & \hspace{-0.4em}\DataFields{student.reviewer[#1]}{name} & \DataFields{student.reviewer[#1]}{pointA} & \DataFields{student.reviewer[#1]}{pointB} & \DataFields{student.reviewer[#1]}{pointC} & \DataFields{student.reviewer[#1]}{grade} &%
+ }
+
+
+
+
+
+
+
+
+%%%%%%%%%%%%%%%
+%% report TCC - I
+%%%%%%%%%%%%%%%
+\SetForm{report-I}{heading}{\UseTerm{title.tccI}}
+\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}
+ {
+ \starray_set_iter_from_hash:nn {student} {#1}
+ \studentLineI\\*\hline
+ \studentExtLine{8}\\\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]
+ \end{longtable}
+ }
+}
+
+%%%
+\SetForm{report-I}{closing}{}
+
+
+\NewDocumentCommand{\reportMissCase}{mmmO{red}}{
+ \seq_if_empty:NF #2
+ {
+ &\\
+ \multicolumn{#1}{l}{\textbf{\color{#4}#3}}\\\hline
+ \seq_map_inline:Nn #2
+ {
+ \studentselect{##1}
+ &\\*
+ \multicolumn{#1}{l}{\textbf{\color{#4}\DataFields{student}{name}}}\\*
+ \studentExtLine{#1}\\*
+ \multicolumn{#1}{l}{\studentCoadvLabelCase}\\ \hline
+ }
+ }
+}
+
+\ExplSyntaxOff
+
+
+
+%%%%%%%%%%%%%%%
+%% report TCC - II
+%%%%%%%%%%%%%%%
+\SetForm{report-II}{heading}{\UseTerm{title.tccII}}
+\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}
+ {
+ \starray_set_iter_from_hash:nn {student} {#1}
+ \studentLineII\\*\hline
+ \studentExtLine{7}\\\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]
+ \end{longtable}
+ }
+}
+
+%%%
+\SetForm{report-II}{closing}{}
+
+
+\NewDocumentCommand{\CheckList}{mmmO{red}}{
+ \seq_if_empty:NF #2
+ {
+ &\\
+ \multicolumn{#1}{l}{\textbf{\color{#4}#3}}\\\hline
+ \seq_map_inline:Nn #2
+ {
+ \studentselect{##1}
+ &\\[-2ex]
+ ~\multicolumn{#1}{l}{\textbf{\color{#4}\DataFields{student}{name}}}\\*
+ \__ufrgscca_checktable_lines:nn {L1,L2,L3,L4}{C1,C2,C3,C4,C5}\hline
+ }
+ }
+
+}
+
+
+%%%%%%%%%%%%%%%
+%% Check List TCC - I
+%%%%%%%%%%%%%%%
+\SetForm{checklist-I}{heading}{\UseTerm{title.tccI}}
+\SetForm{checklist-I}{title}{Check~ List~ TCC~ I~ -~ \UseTerm{semester}}
+\SetForm{checklist-I}{opening}{}
+
+%%%
+\SetForm{checklist-I}{opening}{ %
+ \ActivitySelect{tccI}
+ { \scriptsize
+ \begin{longtable}{lllll}%
+ \CheckList{5}{\l__ufrgscca_baselist_graded_seq}{Alunos~Com~ Conceito}[black]
+ \CheckList{5}{\l__ufrgscca_baselist_ff_seq}{Desistentes~ com~ conceito~ (2o ~ semestre)}[red]
+ \CheckList{5}{\l__ufrgscca_baselist_dismiss_seq}{Desistentes~ sem~ conceito~ (1o ~ semestre)}[magenta]
+ \end{longtable}
+ }
+ ~\vfill
+}
+
+%%%
+\SetForm{checklist-I}{closing}{}
+
+
+%%%%%%%%%%%%%%%
+%% Check List TCC - II
+%%%%%%%%%%%%%%%
+\SetForm{checklist-II}{heading}{\UseTerm{title.tccII}}
+\SetForm{checklist-II}{title}{Check~ List~ TCC~ II~ -~ \UseTerm{semester}}
+\SetForm{checklist-II}{opening}{}
+
+%%%
+\SetForm{checklist-II}{opening}{ %
+ \ActivitySelect{tccII}
+ { \scriptsize
+ \begin{longtable}{lllll}%
+ \CheckList{5}{\l__ufrgscca_baselist_graded_seq}{Alunos~Com~ Conceito}[black]
+ \CheckList{5}{\l__ufrgscca_baselist_ff_seq}{Desistentes~ com~ conceito~ (2o ~ semestre)}[red]
+ \CheckList{5}{\l__ufrgscca_baselist_dismiss_seq}{Desistentes~ sem~ conceito~ (1o ~ semestre)}[magenta]
+ \end{longtable}
+ }
+ ~\vfill
+}
+
+%%%
+\SetForm{checklist-II}{closing}{}
+
+\ExplSyntaxOff
+
+
+
+
+
+
+%%%%%%%%%%%%%%%
+%% Boards TCC - II
+%%%%%%%%%%%%%%%
+\SetForm{boards}{heading}{\UseTerm{title.tccII}}
+\SetForm{boards}{title}{\UseTerm{board.title}}
+\SetForm{boards}{opening}{}
+
+\ExplSyntaxOn
+%%%
+\SetForm{boards}{opening}{ %
+ {\footnotesize
+ \begin{longtable}{p{\UseConst{board.tabA}}p{\UseConst{board.tabB}}p{\UseConst{board.tabC}}p{\UseConst{board.tabD}}}%
+ %\multicolumn{4}{c}{\UseTerm{board.title}}\\\hline
+ \hline
+ \tl_gclear:N \l__ufrgscca_daytmpa_tl
+ \tl_gclear:N \l__ufrgscca_daytmpb_tl
+ \seq_map_inline:cn {l__ufrgscca_baselist_seq}
+ {
+ \starray_set_iter_from_hash:nn {student} {#1}
+ \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 {}}
+ {}
+ \tl_if_eq:NNF \l__ufrgscca_daytmpa_tl \l__ufrgscca_daytmpb_tl
+ {
+ &\multicolumn{3}{r}{\textbf{\l__ufrgscca_daytmpc_tl\ ~- ~ \l__ufrgscca_daytmpb_tl}}\\*
+ \textsc{\UseLabel{student.gen}} & \textsc{\UseLabel{advisor.gen}} & \textsc{\UseLabel{board}} & \textsc{\UseLabel{boardtime.gen}}\\*\hline
+ \tl_gset:Ne \l__ufrgscca_daytmpa_tl \l__ufrgscca_daytmpb_tl
+ }
+ \multirow{4}={\textbf{\DataFields{student}{name}}} & \multirow{4}={\studentCoadvCase{\hspace{-0.6em}\DataFields{student.advisor}{name}\\[1mm]\hspace{-0.6em}\DataFields{student.coadvisor}{name}}{\hspace{-0.6em}\DataFields{student.advisor}{name}}} & \DataFields{student.reviewer[1]}{name} & \multirow{4}={\DataFields{student}{board-time}\\[1mm]\DataFields{student}{board-local}}\\*
+ && \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
+ }
+ \end{longtable}
+
+ {\scriptsize\UseTerm{board.obs}}
+ }
+}
+\ExplSyntaxOff
+
+%%%
+\SetForm{boards}{body}{~}
+\SetForm{boards}{closing}{~}
+
+
+%%%%%%%%%%%%%%%
+%% cocertificate
+%%%%%%%%%%%%%%%
+\SetForm{cocertificate}{heading}{\UseTerm{title.tcc}}
+\SetForm{cocertificate}{title}{\UseTerm{semester}}
+\SetForm{cocertificate}{opening}{À quem interessar possa,\\ certificamos que}
+\SetForm{cocertificate}{body}{%
+ \begin{center}
+ \textsc{\DataFields{student.coadvisor}{name}}
+ \end{center}
+ \vfill
+ atuou como coorientador\DataFields{student.coadvisor}{narticle} d\DataFields{student}{article} alun\DataFields{student}{article}\ \emph{\DataFields{student}{name}}\ no Trabalho de Conclusão de Curso intitulado \emph{\DataFields{student}{worktitle}}\ no semestre \UseTerm{semester}.
+}
+
+\SetForm{cocertificate}{closing}{%
+ \begin{flushright}
+ Porto Alegre, \UseConst{publ.day} de \UseConst{publ.month} de \UseConst{publ.year}.\\[2em]
+
+ \ActivitySelect{tccII}
+ \DataFields{activity.coord}{name}
+
+ \DataFields{activity.coord}{title}
+ \end{flushright}
+ \vfill
+}
+
+
+
+
+%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%
+%%
+%%%%%%%%%%%%%%%
+% examiners approval (or not) signature (for rectify approval form)%
+%%%%%%%%%%%%%%%
+\ExplSyntaxOn
+\NewDocumentCommand{\ApprovalSignature}{O{\UseLabel{reviewer}}m}{%%
+ \UseTerm{corrections.ok} \hfill Data:\rule{\l__ufrgscca_date_rule_dim}{.1pt}\\[3mm]%
+ #1: #2 \hfill \UseLabel{signature.gen}:\rule{\l__ufrgscca_name_rule_dim}{.1pt}%
+}%
+\ExplSyntaxOff
+
+
+
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-formsTR.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-formsTR.sty
deleted file mode 100644
index 12596a69fe..0000000000
--- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-formsTR.sty
+++ /dev/null
@@ -1,313 +0,0 @@
-%%%==============================================================================
-%% Copyright 2022-23 by Alceu Frigeri
-%%
-%% This work may be distributed and/or modified under the conditions of
-%%
-%% * The [LaTeX Project Public License](http://www.latex-project.org/lppl.txt),
-%% version 1.3c (or later), and/or
-%% * The [GNU Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.html),
-%% version 3 (or later)
-%%
-%% This work has the LPPL maintenance status *maintained*.
-%%
-%% The Current Maintainer of this work is Alceu Frigeri
-%%
-%% This is version 1.12 (2023/09/23)
-%%
-%% The list of files that compose this work can be found in the README.md file at
-%% https://ctan.org/pkg/ufrgscca
-%%
-%%%==============================================================================
-%% UFRGS stands for "Federal University of Rio Grande do Sul" in south Brazil
-%% EE stands for "Engineering School"
-%% CCA stands for "Control and Automation Engineering Course" (Portuguese acronym)
-%%%==============================================================================
-
-%
-\NewDocumentCommand{\tcforms@examinersTRforms}{}{%
- \tccore@examiners{examinerB}%
- \tcforms@reviewTRform{examinerB}%
- \tccore@examiners{examinerC}%
- \tcforms@reviewTRform{examinerC}%
-}%
-%
-
-
-
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% TCC examiner form (grades)%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tcforms@examinersTRform}{m}{%
- \tc@formtopbox[tcdef@forms@formsfootnote]{\tcdef@forms@formstitleTR}{\tcdef@forms@examformtitle}%
-%
- \vfill%
- \tcdef@forms@formsstudentlabel : {\bf \csname tc@student\Alph{tc@studentcount}\endcsname}\\%
- \tcdef@forms@formsexaminerlabel : \csname tc@student\Alph{tc@studentcount}@#1\endcsname%
- \vfill%
- \tcdef@forms@examformdesc%
-
- \vfill%
-
- \begin{center}
- \begin{tabular}{|c|c|c|}%
- \hline%
- \tc@TCCpointAlabel & \tc@TCCpointBlabel & \tc@TCCpointClabel \\\hline%
- & & \\\hline
- \end{tabular}%
- \end{center}%
-
- \vfill%
-
- \tcforms@formsigdate{\tcdef@forms@examinersignature}%
- \vfill%
- \begin{description}
- \item[\tcdef@forms@examformnoteslabel:] \tcdef@forms@examformnotes
- \end{description}%
-
- \vfill%
- \pagebreak%
-}%
-%
-
-%\def\emptybox{\framebox[3em]{\color{white}W}}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% TCC I reviewer form (corrections)%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tcforms@reviewTRform}{m}{%
- \tc@formtopbox[tcdef@forms@TRformfootnote]{\tcdef@forms@formstitleTR}{\tcdef@forms@formsTRtitle}%
-
- \vfill%
- \tcdef@forms@formsstudentlabel : {\bf \expandafter\csname tc@student\Alph{tc@studentcount}\endcsname}\\[-4mm]%
-
- \tcdef@forms@formsworktitlelabel : {\bf \@title}\\%
-
- \tcdef@forms@formsexaminerlabel : \expandafter\csname tc@student\Alph{tc@studentcount}@#1\endcsname\\[-4mm]%
-
- {\scriptsize {\textsl{(favor retornar este diretamente à coordenação de TCC.)}}}
- \vfill%
-% \resizebox{0.9\textwidth}{!}{%%
- O trabalho submetido\footnotemark[2]:
-
- \begin{enumerate}[tcc,nosep]
- \item \emptybox\ \textbf{Enquadramento do Tema}. {\footnotesize(peso:2)}\\ {\footnotesize Quão bem o mesmo se enquadra no perfil de um formando em Eng. de Controle e Automação.}
- \item \emptybox\ \textbf{Revisão Bibliográfica}. {\footnotesize(peso:2)}\\ {\footnotesize A revisão apresentada é adequada, suficiente, para o tema do trabalho?}
- \item \emptybox\ \textbf{Abordagem/Plano de Trabalho Proposto}. {\footnotesize(peso:2)}\\ {\footnotesize Considerar se a abordagem, plano de trabalho proposto, é adequada e factivel.}
- \item \emptybox\ \textbf{Redação}. {\footnotesize(peso:1)}\\ {\footnotesize Considerar a qualidade do trabalho escrito apresentado.}
- \item { O Trabalho Submetido}
- \begin{itemize}[tcc,nosep]
- \item[$\Box$] Está adequado, dispensando correções do texto.
- \item[$\Box$] Está adequado, sendo necessário correções, conforme anotações anexas.
- \item[$\Box$] Necessita ser revisto/re-escrito,\footnotemark[3] e:
- \begin{itemize}
- \item[$\Box$] basta a revisão final do texto pelo orientador,
- \item[$\Box$] revisarei o trabalho depois de corrigido.
- \end{itemize}
- \end{itemize}
- \end{enumerate}
-
-Outras considerações, parecer (se necessário): \\
-
- \begin{tabular}{p{0.9\textwidth}}
- ~\\\hline
- ~\\\hline
- ~\\\hline
- ~\\\hline
- ~\\\hline
- ~\\\hline
- \end{tabular}\\[-1mm]
- % }%
- \footnotetext[2]{Use a escala 0-10: \begin{enumerate*}\item[0.] Péssimo \item[3.] Deficitário \item[6.] Bom \item[8.] Muito Bom \item[10.] Excelente \end{enumerate*}}
- \footnotetext[3]{\tcdef@forms@reviewformfootnoteB}%
- \vfill%
-
- \tcforms@formsigdate{\tcdef@forms@examinersignature}%
- \vfill%
- \pagebreak%
-}%
-%
-% TODO: THIS ONE, as the reference for 'work submission a board approaval'
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% TCC Board approval form%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% TCC Advisor approval form%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tcforms@advisorTRapprovalform}{}{%
- \tc@formtopbox{\tcdef@forms@formstitleTR}{Formulário de Aprovação para Avaliação}%
-
- \vfill%
-
- \tcforms@tccdesc%
-
- \vfill%
- \tcdef@forms@advisorapprovalformdesc%
-
- \vfill%
-
- \tcdef@core@tccadvisorsreview%
-
- \vfill%
- %Aprovo a versão final do trabalho submetido pel\tccore@@ref{student}{article} alun\tccore@@ref{student}{article} e
- %considero \tccore@@ref{student}{article} mesm\tccore@@ref{student}{article} apt\tccore@@ref{student}{article} para avaliação pela Banca Examinadora.%
-
- \tcforms@formsigdate{\tcdef@forms@advisorsignature}%
- \vfill%
-
- \tcforms@formsigdate{\tcdef@forms@studentsignature}%
- \vfill%
- \pagebreak%
-}%
-%
-\NewDocumentCommand{\tcforms@advisorTRboardform}{}{%
- \tc@formtopbox{\tcdef@forms@formstitleTR}{Formulário de Aprovação de Banca Examinadora}%
-
- \vfill%
-
- \tcforms@tccdesc%
-
- \vfill%
- \begin{center}
- \tcdef@forms@formsboardtitle
- \end{center}%
-
- \tcforms@examinerdesc{studentA}{examinerB}%
-
- \tcforms@examinerdesc{studentA}{examinerC}%
-
-
- \vfill%
-
- Aprovo a Banca Examinadora acima relacionada.%
- \vfill%
-
- \tcforms@formsigdate{\tcdef@forms@advisorsignature}%
- \vfill%
-
- \pagebreak%
-}%
-%
-
-
-
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% TCC requirement form (TCC register)%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tcforms@reqTRform}{}{%
- \tc@formtopbox{\tcdef@forms@formstitleTR}{\tcdef@forms@reqformtitle}%
-
- \vfill%
-
- \tcdef@forms@reqformopening%
- \vfill%
-
- \tcdef@forms@reqformdescTR%
- \vfill%
-
- \tcdef@forms@formstemptitlelabel : \@title %
-
- \tcdef@forms@formsstudentemaillabel : {\bf \tc@studentAemail} %
-
- \tcdef@forms@formsadvisorlabel : \tc@studentA@advisor%
-
- \tcdef@forms@formsadvisoremaillabel : {\bf \tc@studentA@advisoremail}%
- \hfill \tcdef@forms@formsphonelabel : {\bf \tc@studentA@advisorphone}%
-
-
- {\bf \tcdef@forms@formsbrieflabel}:\footnote[1]{\tcdef@forms@renewreqformnotes}%
-
- \vfill%
- \tcdef@core@tccbrief%
-
- \parbox[t]{.45\textwidth}{\tcforms@formsigdate{\tcdef@forms@studentsignature}}\hfill%
- \parbox[t]{.45\textwidth}{\tcforms@formsigdate{\tcdef@forms@advisorsignature}}%
- \pagebreak%
-}%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% TCC co-advisor requirement form (TCC register)%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tcforms@coadvisorTRform}{}{%
- \@ifundefined{tc@studentA@coadvisor}{%
- \coadvisor{\rule{\tc@namerule}{.1pt}}{}%
- \coadvisorinfo{}{\rule{\tc@titlerule}{.1pt}}{\rule{\tc@emailrule}{.1pt}}{\rule{\tc@phonerule}{.1pt}}%
- }{}%
- \tc@formtopbox{\tcdef@forms@formstitleTR}{\tcdef@forms@coadvisorformtitle}%
-
- \vfill%
-
- \tcdef@forms@reqformopening%
- \vfill%
-
- \tcdef@forms@coadvisorformdesc%
- \vfill%
-
- \tcdef@forms@formstemptitlelabel : \@title %
-
- \tcdef@forms@formsadvisorlabel: \tc@studentA@advisor
-
- \tcdef@forms@formscoadvisorlabel: \tc@studentA@coadvisor%
-
- \tcdef@forms@formscoadvisoremaillabel : {\bf \tc@studentA@coadvisoremail}%
- \hfill \tcdef@forms@formsphonelabel : {\bf \tc@studentA@coadvisorphone}%
-
-
- \vfill%
- {\bf \tcdef@forms@formsreasonlabel}:%
-
- \tcdef@core@tcccoadvisorbrief% !!!! What a Hell ?!?!?!
-
- \tcforms@formsigdate{\tcdef@forms@studentsignature}%
-
- \parbox[t]{.45\textwidth}{\tcforms@formsigdate{\tcdef@forms@advisorsignature}}\hfill%
- \parbox[t]{.45\textwidth}{\tcforms@formsigdate{\tcdef@forms@coadvisorsignature}}%
- \pagebreak%
-}%
-%
-%
-
-
-\NewDocumentCommand{\tcforms@rectifyTRapprovalform}{}{%
- \tc@formtopbox{\tcdef@forms@formstitleTR}{\tcdef@forms@rectifyapprovalformtitle}%
-
- \vfill%
-
- \tcforms@tccdesc%
-
- \vfill%
- \tcdef@forms@rectifyapprovalTRformdesc%
-
- \vfill%
-
- \tcforms@rectifyexaminersig[\tcdef@forms@formsadvisorlabel]{tc@studentA@advisor}%
-
- \vfill%
-
- \@ifundefined{tc@nBoard}{}{%
- \tcforms@rectifyexaminersig{tc@studentA@examinerA}%
- }%
-
- \tcforms@rectifyexaminersig{tc@studentA@examinerB}%
-
- \tcforms@rectifyexaminersig{tc@studentA@examinerC}%
- \vfill%
- \pagebreak%
-}%
-%
-%
-%
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-formsintern.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-formsintern.sty
deleted file mode 100644
index 9565156eda..0000000000
--- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-formsintern.sty
+++ /dev/null
@@ -1,148 +0,0 @@
-%%%==============================================================================
-%% Copyright 2022-23 by Alceu Frigeri
-%%
-%% This work may be distributed and/or modified under the conditions of
-%%
-%% * The [LaTeX Project Public License](http://www.latex-project.org/lppl.txt),
-%% version 1.3c (or later), and/or
-%% * The [GNU Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.html),
-%% version 3 (or later)
-%%
-%% This work has the LPPL maintenance status *maintained*.
-%%
-%% The Current Maintainer of this work is Alceu Frigeri
-%%
-%% This is version 1.12 (2023/09/23)
-%%
-%% The list of files that compose this work can be found in the README.md file at
-%% https://ctan.org/pkg/ufrgscca
-%%
-%%%==============================================================================
-%% UFRGS stands for "Federal University of Rio Grande do Sul" in south Brazil
-%% EE stands for "Engineering School"
-%% CCA stands for "Control and Automation Engineering Course" (Portuguese acronym)
-%%%==============================================================================
-
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% Internship requirement form%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tcforms@internreqform}{}{%
- \tc@formtopbox[tcdef@forms@internshipreqformnotes]{\tcdef@forms@formsinternshiptitle}{\tcdef@forms@reqformtitle}%
-
- \vfill%
-
- \tcdef@forms@reqformopening%
- \vfill%
-
- \tcdef@forms@reqforminternshipdesc%
- \vfill%
-
- \tcdef@forms@reqforminternshipinfo%
-
-
- % {\bf \tcdef@forms@formsbrieflabel}:%\footnote[1]{\tcdef@forms@renewreqformnotes}%
-
- \vfill%
-% \tcdef@core@tccbrief%
-
- \parbox[t]{.45\textwidth}{\tcforms@formsigdate{\tcdef@forms@supervisorsignature}}\hfill%
- \parbox[t]{.45\textwidth}{\tcforms@formsigdate{\tcdef@forms@tutorsignature}}%
-
- \hfill%
- \parbox[t]{.45\textwidth}{\tcforms@formsigdate{\tcdef@forms@studentsignature}}%
- \pagebreak%
-}%
-%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% Internship Supervisor's form (grades)%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tcforms@internsupervisorform}{}{%
- \tc@formtopbox[tcdef@forms@internsupervisornote]{\tcdef@forms@formsinternshiptitle}{\tcdef@forms@supervisorformtitle}%
- %
- \vfill%
- \tcdef@forms@internshipstudentinfo\\%
- \tcdef@forms@internshipsupervisorinfo\\%
- \tcdef@forms@internshipperiod
- \vfill%
- \tcdef@forms@internsupervisorgradesform%
-
- \vfill%
-
- \tcdef@forms@internsupervisorcomments \tcdef@core@formsblanklinesB
-
- \vfill%
-
- \tcforms@formsigdate{\tcdef@forms@supervisorsignature}%
-
- \pagebreak%
-}%
-%
-%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% Internship tutor's form (grades)%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NewDocumentCommand{\tcforms@interntutorform}{}{%
- \tc@formtopbox{\tcdef@forms@formsinternshiptitle}{\tcdef@forms@tutorformtitle}%
- %
- \vfill%
- \tcdef@forms@internshipstudentinfo\\%
- \tcdef@forms@internshiptutorinfo\\%
- \tcdef@forms@internshipperiod
- \vfill%
- \tcdef@forms@interntutorgrade%
-
- \vfill%
-
- \tcdef@forms@internshiptutorcomments \tcdef@core@formsblanklinesB
-
- \vfill%
-
- \tcforms@formsigdate{\tcdef@forms@tutorsignature}%
- % \hline
- \vfill%
-
- \tcdef@forms@interncoordgrade%
- \vfill
-
- \tcdef@forms@internshipcoordcomments \tcdef@core@formsblanklinesB
- \vfill%
-
- \tcforms@formsigdate{\tcdef@forms@internshipcoordsignature}%
-
- \pagebreak%
-}%
-%
-%
-%
-\newcounter{tc@supervisorgradecount}[tc@studentcount]%
-\NewDocumentCommand{\internshipsupervisorgrades}{mmmmm}{%%
- \stepcounter{tc@supervisorgradecount}%
- \expandafter\def\csname tc@student\Alph{tc@studentcount}@supervisorpoint\Alph{tc@supervisorgradecount}A\endcsname{#1}%%
- \expandafter\def\csname tc@student\Alph{tc@studentcount}@supervisorpoint\Alph{tc@supervisorgradecount}B\endcsname{#2}%%
- \expandafter\def\csname tc@student\Alph{tc@studentcount}@supervisorpoint\Alph{tc@supervisorgradecount}C\endcsname{#3}%%
- \expandafter\def\csname tc@student\Alph{tc@studentcount}@supervisorpoint\Alph{tc@supervisorgradecount}D\endcsname{#4}%%
- \expandafter\def\csname tc@student\Alph{tc@studentcount}@supervisorpoint\Alph{tc@supervisorgradecount}E\endcsname{#5}%%
- \ifthenelse{\equal{#1}{}}{%%
- \expandafter\def\csname tc@student\Alph{tc@studentcount}@supervisorgrade\Alph{tc@supervisorgradecount}\endcsname{0}%
- }{%%
- \expandafter\edef\csname tc@student\Alph{tc@studentcount}@supervisorgrade\Alph{tc@supervisorgradecount}\endcsname{\fpeval{ #1 + #2 + #3 + #4 + #5} }%
- }%
-}%
-
-\NewDocumentCommand{\internshiptutorgrades}{m}{%%
- \expandafter\def\csname tc@student\Alph{tc@studentcount}@tutorgrade\endcsname{#1}%%
-}%
-\NewDocumentCommand{\internshipcoordgrades}{m}{%%
- \expandafter\def\csname tc@student\Alph{tc@studentcount}@internshipcoordgrade\endcsname{#1}%%
-}%
-
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-gen.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-gen.sty
deleted file mode 100644
index c350601403..0000000000
--- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-gen.sty
+++ /dev/null
@@ -1,120 +0,0 @@
-%%%==============================================================================
-%% Copyright 2022-23 by Alceu Frigeri
-%%
-%% This work may be distributed and/or modified under the conditions of
-%%
-%% * The [LaTeX Project Public License](http://www.latex-project.org/lppl.txt),
-%% version 1.3c (or later), and/or
-%% * The [GNU Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.html),
-%% version 3 (or later)
-%%
-%% This work has the LPPL maintenance status *maintained*.
-%%
-%% The Current Maintainer of this work is Alceu Frigeri
-%%
-%% This is version 1.12 (2023/09/23)
-%%
-%% The list of files that compose this work can be found in the README.md file at
-%% https://ctan.org/pkg/ufrgscca
-%%
-%%%==============================================================================
-%% UFRGS stands for "Federal University of Rio Grande do Sul" in south Brazil
-%% EE stands for "Engineering School"
-%% CCA stands for "Control and Automation Engineering Course" (Portuguese acronym)
-%%%==============================================================================
-\NeedsTeXFormat{LaTeX2e}[2022/06/01]
-\def\tc@tmp@packname{ufrgscca-gen}
-\def\tc@tmp@altpackname{ufrgsccagen}
-\def\tc@tmp@packdesc{UFRGS/CCA generic/miscellany commands}
-\def\tc@tmp@packdate{2023/09/23}
-\def\tc@tmp@packversion{1.12}
-\let\@exp\expandafter
-\@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion}
-\@exp\@exp\@exp\ProvidesPackage\@exp\@exp\@exp{\@exp\tc@tmp@packname\@exp}\@exp[\tc@tmp@packdate\space v\tc@tmp@packversion\space\tc@tmp@packdesc]
-
-\def\tcgen@fam{tcdef}
-\def\tcgen@factgrp{gen}%
-%
-
-\DeclareKeys[ufrgscca-gen]{
- family.usage = load,
- family.store = \tcgen@fam,
-
- group.usage = load,
- group.store = \tcgen@factgrp,
-}
-\ProcessKeyOptions[ufrgscca-gen]\relax
-
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-% \tcgen@cdef[fam]{#1}{#2} => \gdef\<fam>@#1{#2}%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-\NewDocumentCommand{\tcgen@cdef}{O{\tcgen@fam}D<>{\tcgen@factgrp} m +m}{%
- \expandafter\gdef\csname #1@#2@#3\endcsname{#4}%
-}%
-%
-\NewDocumentCommand{\factory}{O{\tcgen@fam}D<>{\tcgen@factgrp}m}{%
- \expandafter\long\expandafter\xdef\csname #3\endcsname##1{\noexpand\tcgen@cdef[#1]<#2>{#3}{##1}}%
- %\csname #3\endcsname{-default-}
- \expandafter\def\csname #3.fam\endcsname{#1}%
- \@ifundefined{#3undef}{}{\expandafter\gdef\csname tc@factdup@#3\endcsname{}}
- \expandafter\def\csname #3undef\endcsname{\expandafter\let\csname #1@#2@#3\endcsname\undefined}%
-}%
-\NewDocumentCommand{\cmdfactory}{O{\tcgen@fam}D<>{\tcgen@factgrp}m}{%
- \forcsvlist{\factory[#1]<#2>}{#3}%
- \ifcsundef{tc@factgrplist@#2}{%
- \ifcsundef{tc@factgrplist}{\csgdef{tc@factgrplist}{#2}}{\csgappto{tc@factgrplist}{,#2}}%
- \csgdef{tc@factgrplist@#2}{#3}%
- }{\csgappto{tc@factgrplist@#2}{,#3}}%
-}%
-%
-%
-% 'debug' auxiliary commands (mainly to find out dups, defined/undefined ones)
-%
-%
-\NewDocumentCommand{\tcgen@factcmd@prt}{m}{\@ifundefined{tc@factdup@#1}{#1}{#1 (dup)}
-\expandafter\@ifundefined\expandafter{\csname #1.fam\endcsname @#1}{\textbf{ NOT Defined} \\}{ {\csname\csname #1.fam\endcsname @#1\endcsname} \\}}
-\NewDocumentCommand{\tcgen@factcmd@def}{m}{\csname #1.fam\endcsname @\@ifundefined{tc@factdup@#1}{#1}{#1 (dup)} %
- \expandafter\@ifundefined\expandafter{\csname #1.fam\endcsname @#1}{\textbf{ NOT Defined} \\}{ {\slshape Defined} \\} }
-%\NewDocumentCommand{\tcgen@factcmd@prt}{m}{{#1} \\}
-%\NewDocumentCommand{\tcgen@factcmd@def}{m}{{#1} :: \@ifundefined{tc@#1}{-- \textbf{NOT Defined} --\\}{Defined \\} }
-\NewDocumentCommand{\tcgen@factgrp@prt}{m}{\tightul{#1} \\%
- \expandafter\expandafter\expandafter\forcsvlist\expandafter\expandafter\expandafter\tcgen@do\expandafter\expandafter\expandafter{\csname tc@factgrplist@#1\endcsname}%
-}
-\NewDocumentCommand{\listfactorycmds}{sO{}}{%
- \IfBooleanTF{#1}{\def\tcgen@do##1{\tcgen@factcmd@def{##1}}}{\def\tcgen@do##1{\tcgen@factcmd@prt{##1}}}
- \ifblank{#2}{%
- \ifcsundef{tc@factgrplist}{Factories Groups: \textbf{empty list}\\ }{%
- Factories: \\ %
- \expandafter\expandafter\expandafter\forcsvlist\expandafter\expandafter\expandafter\tcgen@factgrp@prt\expandafter\expandafter\expandafter{\csname tc@factgrplist\endcsname}%
- %
- }
- }{%
- }%
-}
-
-
-%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%
-%
-% \mkswitch creates a switch (somewhat 'like' a programming switch)
-% a 'default case' is associated with the switch when creating it
-% one can add many 'cases' later on.
-% one can have any code associated with a 'switch/case'
-%
-%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%
-
-
-\NewDocumentCommand\mkswitch{O{}m}{%
- \NewDocumentCommand{#2}{m}{%
- \ifcsname\string#2@case@##1\endcsname\csname\string#2@case@##1\endcsname\else#1\fi%
- }%
-}%
-\NewDocumentCommand{\addcase}{mmm}{\expandafter\def\csname\string#1@case@#2\endcsname{#3}}%
-\let\addswitchcase\addcase
-
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-lists.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-lists.sty
index d8ac23595f..3d34c7c927 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 1.12 (2023/09/23)
+%% This is version {2.0} {2023/11/23}
%%
%% The list of files that compose this work can be found in the README.md file at
%% https://ctan.org/pkg/ufrgscca
@@ -23,64 +23,105 @@
%% CCA stands for "Control and Automation Engineering Course" (Portuguese acronym)
%%%==============================================================================
\NeedsTeXFormat{LaTeX2e}[2022/06/01]
-\def\tc@tmp@packname{ufrgscca-lists}
-\def\tc@tmp@altpackname{ufrgsccalists}
-\def\tc@tmp@packdesc{UFRGS/CCA auxiliary lists commands}
-\def\tc@tmp@packdate{2023/09/23}
-\def\tc@tmp@packversion{1.12}
-\let\@exp\expandafter
-\@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion}
-\@exp\@exp\@exp\ProvidesPackage\@exp\@exp\@exp{\@exp\tc@tmp@packname\@exp}\@exp[\tc@tmp@packdate\space v\tc@tmp@packversion\space\tc@tmp@packdesc]
-
-
-\DeclareKeys[ufrgscca-lst]{
- relnum.usage = load,
- relnum.if = tcif@relnum,
-}
-\ProcessKeyOptions[ufrgscca-lst]\relax
+
+
+\ProvidesExplPackage
+ {ufrgscca-lists}
+ {2023/11/23}
+ {2.0}
+ {UFRGS/CCA auxiliary lists commands}
+
+
+%%%%%%%
+%%%
+%%% Just an attempt of having my packages info in a regular way
+%%% Idea being: { <pck-name> / pkg info } for each and all.
+%%%
+%%%%%%%
+\keys_define:nn { ufrgscca-lists / pkg info}
+ {
+ name .code:n = {ufrgscca-lists} ,
+ prefix .code:n = {ufrgscca} ,
+ date .code:n = {2023/11/23} ,
+ version .code:n = {2.0} ,
+ description .code:n = {UFRGS/CCA~Auxiliary~ lists~ commands}
+ }
+\cs_if_exist:NF \__codedesc_pkg_info:nn
+ {
+ \cs_new_protected:Npn \__codedesc_pkg_info:nn #1#2
+ { \keys_set:nn {#1 / pkg info}{#2} }
+ }
+\cs_if_exist:NF \PkgInfo
+ { \NewDocumentCommand \PkgInfo {mm} { \keys_set:nn {#1 / pkg info}{#2} } }
+\cs_if_exist:NF \PkgDescription
+ {
+ \NewDocumentCommand \PkgDescription {m}
+ {
+ \noindent Package~ \textbf{\PkgInfo{#1}{name}}~Version:~\PkgInfo{#1}{version}~ -~ \PkgInfo{#1}{date}\par \emph{\PkgInfo{#1}{description}}~\par
+ }
+ }
+%%%%%%%
+%%% End of cut-n-paste
+%%%%%%%
+
+
+
+%==============================================================================
+% Declaração de opções
+%==============================================================================
+\keys_define:nn { ufrgscca / lists}
+ {
+ relnum .usage:n = load ,
+ relnum .bool_set:N = \l__ufrgscca_relnum_bool ,
+ }
+
+\ProcessKeyOptions[ufrgscca / lists]\relax
+
%%%%%%%%%%%%%%%%%%%%%
%%% Packages Loading
%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{newfloat}
-\RequirePackage{listings}%
-\RequirePackage{xcolor}%
+\RequirePackage{listings}
+\RequirePackage{xcolor}
%%%
%%% command to declare a new 'list of ...' things {package newfloat}
%%%
-\NewDocumentCommand{\DeclareNewFloat}{mmmm}{%
- \DeclareFloatingEnvironment[%
- fileext={#2},%
- listname={#4},%
- name={#3},%
- placement=htb,%
- chapterlistsgaps=off]{#1} %
- \iftcif@relnum\SetupFloatingEnvironment{#1}{within=chapter}%
- \else\SetupFloatingEnvironment{#1}{within=none}%
- \fi %
-}%
+\NewDocumentCommand{\DeclareNewFloat}{mmmm}{
+ \DeclareFloatingEnvironment[
+ fileext={#2},
+ listname={#4},
+ name={#3},
+ placement=htb,
+ chapterlistsgaps=off]{#1}
+ \bool_if:NTF \l__ufrgscca_relnum_bool
+ { \SetupFloatingEnvironment{#1}{within=chapter} }
+ { \SetupFloatingEnvironment{#1}{within=none} }
+}
%
%%%%\def\listoflistings{\lstlistoflistings}%
-\definecolor{lstgray}{rgb}{0.965,0.965,0.965}%
-\lstset{basicstyle=\ttfamily\small,%
- columns=fullflexible,%
- keepspaces=true,%
- frame=tb,%
- inputencoding=latin1,%
-% inputencoding=utf8,%
- extendedchars=true,%
- backgroundcolor=\color{lstgray},%
- breaklines=true,%
-% xleftmargin=7pt,%
-% xrightmargin=7pt%
-}%
-%
-\def\listingname{Listing}%
-\def\listlistingname{List of Listings}%
-\DeclareNewFloat{codelist}{lox}{\listingname}{\listlistingname}%%
+\definecolor{lstgray}{rgb}{0.965,0.965,0.965}
+\lstset{basicstyle=\ttfamily\small,
+ columns=fullflexible,
+ keepspaces=true,
+ frame=tb,
+ inputencoding=latin1,
+% inputencoding=utf8,
+ extendedchars=true,
+ backgroundcolor=\color{lstgray},
+ breaklines=true,
+% xleftmargin=7pt,
+% xrightmargin=7pt
+}
+
+
+\def\listingname{Listing}
+\def\listlistingname{List~ of~ Listings}
+\DeclareNewFloat{codelist}{lox}{\listingname}{\listlistingname}
+
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-ppc.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-ppc.sty
index fe05fe23f3..34939ff17e 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 1.12 (2023/09/23)
+%% This is version {2.0} {2023/11/23}
%%
%% The list of files that compose this work can be found in the README.md file at
%% https://ctan.org/pkg/ufrgscca
@@ -23,34 +23,67 @@
%% CCA stands for "Control and Automation Engineering Course" (Portuguese acronym)
%%%==============================================================================
\NeedsTeXFormat{LaTeX2e}[2022/06/01]
-\def\tc@tmp@packname{ufrgscca-ppc}
-\def\tc@tmp@altpackname{ufrgsccappc}
-\def\tc@tmp@packdesc{UFRGS/CCA PPC commands}
-\def\tc@tmp@packdate{2023/09/23}
-\def\tc@tmp@packversion{1.12}
-\let\@exp\expandafter
-\@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion}
-\@exp\@exp\@exp\ProvidesPackage\@exp\@exp\@exp{\@exp\tc@tmp@packname\@exp}\@exp[\tc@tmp@packdate\space v\tc@tmp@packversion\space\tc@tmp@packdesc]
-
-
-\DeclareKeys[ufrgscca-ppc]{
- showind.usage = load,
- showind.if = @showindicators,
-
- indlong.usage = load,
- indlong.if = @indlongtext,
- nocomments.usage = load,
- nocomments.if = @indnocomments,
-}
-\ProcessKeyOptions[ufrgscca-ppc]\relax
+
+
+\ProvidesExplPackage
+ {ufrgscca-ppc}
+ {2023/11/23}
+ {2.0}
+ {UFRGS/CCA PPC commands}
+
+%%%%%%%
+%%%
+%%% Just an attempt of having my packages info in a regular way
+%%% Idea being: { <pck-name> / pkg info } for each and all.
+%%%
+%%%%%%%
+\keys_define:nn { ufrgscca-ppc / pkg info}
+ {
+ name .code:n = {ufrgscca-ppc} ,
+ prefix .code:n = {ufrgscca} ,
+ date .code:n = {2023/11/23},
+ version .code:n = {2.0} ,
+ description .code:n = {UFRGS/CCA~ auxiliary~ PPC-related~ (indicators)~ commands}
+ }
+\cs_if_exist:NF \__codedesc_pkg_info:nn
+ {
+ \cs_new_protected:Npn \__codedesc_pkg_info:nn #1#2
+ { \keys_set:nn {#1 / pkg info}{#2} }
+ }
+\cs_if_exist:NF \PkgInfo
+ { \NewDocumentCommand \PkgInfo {mm} { \keys_set:nn {#1 / pkg info}{#2} } }
+\cs_if_exist:NF \PkgDescription
+ {
+ \NewDocumentCommand \PkgDescription {m}
+ {
+ \noindent Package~ \textbf{\PkgInfo{#1}{name}}~Version:~\PkgInfo{#1}{version}~ -~ \PkgInfo{#1}{date}\par \emph{\PkgInfo{#1}{description}}~\par
+ }
+ }
+%%%%%%%
+%%% End of cut-n-paste
+%%%%%%%
+
+
+
+\keys_define:nn { ufrgscca / ppc}
+ {
+ showind .usage:n = load,
+ showind .bool_set:N = \l__ufrgscca_showind_bool,
+ indlong .usage:n = load,
+ indlong .bool_set:N = \l__ufrgscca_indlong_bool,
+ nocomments .usage:n = load,
+ nocomments .bool_set:N = \l__ufrgscca_nocomments_bool,
+ }
+\ProcessKeyOptions[ufrgscca / ppc]\relax
+
\RequirePackage{longtable}
\RequirePackage{pdfcomment}
-\WarningFilter{latex}{name}%
-\RequirePackage[tikz]{mdframed}%
+\WarningFilter{latex}{name}
+\RequirePackage[tikz]{mdframed}
\RequirePackage{ufrgscca-abnt}
-%\RequirePackage{ufrgscca-curr}
-\RequirePackage{ufrgscca-curr-tab}
+\RequirePackage{ufrgscca-curr}
+\RequirePackage{codedescribe}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
@@ -69,363 +102,579 @@
% * (undefined, copy text)
%%
%%%%%%%%%%%%%%%%%%%
-%\iftc@ppc
- \RenewDocumentCommand{\maketitle}{}{\tcppc@PPCcoverpages}%
-%\fi
-%
-\NewDocumentCommand{\tcppc@PPCcoverpages}{}{
- \begin{titlepage}%
- \noindent\tc@covertopbox%
- \vfill%
- \centerline{\tc@city}%
- \centerline{\tc@publyear}%
- \end{titlepage}%%
- \if@openright\cleardoublepage\else\clearpage\fi%%
-}%
- \RenewDocumentCommand\tc@winbox{}{%%
- \parbox[b]{\tc@coverwinwidth}{%%
- \centering\vbox to \tc@coverwinheight{%%
- \vspace*{\fill}%
- {\large\MakeUppercase{\textbf{\@title}}\par}%
- \vfill%
- }%%
- }%%
-}%
-%
-%
-\NewDocumentCommand{\set@statuscolor}{m}{%%
- \@ifundefined{#1@txtcolor}{%
- \gdef\ind@txtcolor{\csname default@txtcolor\endcsname}%%
- \gdef\ind@bgcolor{\csname default@bgcolor\endcsname}%%
- }{%
- \gdef\ind@txtcolor{\csname #1@txtcolor\endcsname}%%
- \gdef\ind@bgcolor{\csname #1@bgcolor\endcsname}%%
- }%
-}%
-%
-%
-\newcounter{@indcounter}%
-%
-\NewDocumentCommand{\declareindicator}{st+O{noref}mmm}{%
-%#3: status #4:org #5:mark #6:short text #7:long text #8:extra text #9:'clarification text'(for inep/mec)
- \stepcounter{@indcounter}%
- \IfBooleanTF{#1}{\expandafter\gdef\csname @indicator#4#5star\endcsname{#1}\ifcsundef{@indicator#4lst}{\csgdef{@indicator#4lst}{#5}}{\csgappto{@indicator#4lst}{,#5}}}{}
- \IfBooleanTF{#2}{\ifcsundef{@indicator#4lst}{\csgdef{@indicator#4lst}{#5}}{\csgappto{@indicator#4lst}{,#5}}}{}
- \expandafter\gdef\csname @indicator#4#5status\endcsname{#3}%
- \expandafter\gdef\csname @indicator#4#5short\endcsname{#6}%
- \expandafter\gdef\csname @indicator#4#5long\endcsname{}%
- \expandafter\gdef\csname @indicator#4#5extra\endcsname{}%
- \expandafter\gdef\csname @indicator#4#5text\endcsname{}%
- \expandafter\gdef\csname @indrefA\arabic{@indcounter}\endcsname{#4}%
- \expandafter\gdef\csname @indrefB\arabic{@indcounter}\endcsname{#5}%
- \newcounter{@indcount#4#5}%
- \@ifundefined{iftcppc@indset#4view}{\expandafter\newif\csname iftcppc@indset#4view\endcsname\csname tcppc@indset#4viewtrue\endcsname}{}
- \gdef\tcppc@indindex{#4#5}
-}%
-\NewDocumentCommand{\indicatorDesc}{+m+m}{%
- \expandafter\gdef\csname @indicator\tcppc@indindex long\endcsname{#1}
- \expandafter\gdef\csname @indicator\tcppc@indindex extra\endcsname{#2}
-}
-\NewDocumentCommand{\indicatorText}{+m}{%
- \expandafter\gdef\csname @indicator\tcppc@indindex text\endcsname{#1}
-}
-\NewDocumentCommand{\lstind}{O{\section}O{\subsection}m}{%
- \def\doit##1{\ifcsundef{@indicator#3##1star}{#2{\csname @indicator#3##1short\endcsname}}{#1{\csname @indicator#3##1short\endcsname}} \csname @indicator#3##1text\endcsname\par}%
-\expandafter\expandafter\expandafter\forcsvlist\expandafter\expandafter\expandafter\doit\expandafter\expandafter\expandafter{\csname @indicator#3lst\endcsname}
-}
+\starray_new:n {indicator}
+\starray_def_from_keyval:nn {indicator}
+ {
+ self = ,
+ view = \c_true_bool ,
+ has_lst = \c_false_bool ,
+ seqlst = , %this is going to be a sequence of 'ind'
+ ind.struct =
+ {
+ self = ,
+ short = ,
+ long = ,
+ extra = , %some extra long text, monstly unused
+ desc = , %expanded text for 'MEC' (inep questionaire)
+ status = ,
+ is_section = \c_false_bool ,
+ is_subsection = \c_false_bool ,
+ cnt = 0 , %auxiliar 'counter' (num of references)
+ seqlst = , %auxiliar list (references' list)
+ labelref = , %this will contain the 'hyperref label' (at doc's end) to be used.
+ ref.struct =
+ {
+ reflabel = , %this will contain the 'hyperref label' (in doc) to be used.
+ } ,
+ } ,
+ }
-%
-%\newcommand{\indsetstatus}[3][attention]{\expandafter\gdef\csname @indicator#2#3status\endcsname{#1}}
-\NewDocumentCommand{\indsetstatus}{O{attention}mm}{%
- \gdef\tcppc@indsetstatus##1{\expandafter\gdef\csname @indicator#2##1status\endcsname{#1}}%
- \expandafter\forcsvlist\expandafter\tcppc@indsetstatus\expandafter{#3}%
+\starray_new:n {status}
+\starray_def_from_keyval:nn {status}
+ {
+ bgcolor = ,
+ txtcolor = ,
+ self = ,
+ text = ,
+ view = \c_false_bool ,
+ refcnt = 0 , % 'counter'
+ }
+
+\starray_new:n {acrolist}
+\starray_def_from_keyval:nn {acrolist}
+ {
+ acronym = ,
+ long = ,
+ }
+
+
+\NewDocumentCommand{\declareindicator}{st+O{noref}mmm}
+ {
+ %#3: status #4:org #5:mark #6:short text
+ \starray_set_iter_from_hash:nnF {indicator}{#4}
+ {
+ \starray_new_term:nn {indicator}{#4}
+ \seq_clear:N \l_tmpa_seq
+ \starray_set_prop:nnV {indicator}{seqlst}{\l_tmpa_seq}
+ %\seq_new:c {l__ufrgscca_ind_ #4 _seq}
+ \starray_set_prop:nnn {indicator}{self}{#4}
+ }
+ \starray_new_term:nn {indicator.ind}{@#5}
+ \starray_set_from_keyval:nn {indicator.ind}
+ {
+ short = {#6} ,
+ status = {#3} ,
+ self = {#5} ,
+ labelref = {@ufrgscca@ #4 @ #5} , %% to be issued when "printing the indicators' list"
+ %seqlst = {l__ufrgscca_ind_ #4 _ #5 _seq} ,
+ %cnt = {l__ufrgscca_ind_ #4 _ #5 _cnt_int} ,
+ }
+ \seq_clear:N \l_tmpa_seq
+ \starray_set_prop:nnV {indicator.ind}{seqlst}{\l_tmpa_seq}
+ %\seq_new:c {l__ufrgscca_ind_ #4 _ #5 _seq}
+ %\int_new:c {l__ufrgscca_ind_ #4 _ #5 _cnt_int}
+ \IfBooleanTF{#1}
+ {
+ \starray_get_prop:nnN {indicator}{seqlst}\l_tmpa_seq
+ \seq_put_right:Nn \l_tmpa_seq {@#5}
+ \starray_set_prop:nnV {indicator}{seqlst}\l_tmpa_seq
+ %\seq_put_right:cn {l__ufrgscca_ind_ #4 _seq}{@#5}
+ \starray_set_prop:nnn {indicator.ind}{is_section}{\c_true_bool}
+ \starray_set_prop:nnn {indicator}{has_lst}{\c_true_bool}
+ }
+ {}
+ \IfBooleanTF{#2}
+ {
+ \starray_get_prop:nnN {indicator}{seqlst}\l_tmpa_seq
+ \seq_put_right:Nn \l_tmpa_seq {@#5}
+ \starray_set_prop:nnV {indicator}{seqlst}\l_tmpa_seq
+ %\seq_put_right:cn {l__ufrgscca_ind_ #4 _seq}{@#5}
+ \starray_set_prop:nnn {indicator.ind}{is_subsection}{\c_true_bool}
+ \starray_set_prop:nnn {indicator}{has_lst}{\c_true_bool}
+ }
+ {}
+
+
+ }
+
+
+\NewDocumentCommand{\indicatorDesc}{+m+m}
+ {
+ \starray_set_from_keyval:nn {indicator.ind}
+ {
+ long = {#1} ,
+ extra = {#2} ,
+ }
+ }
+
+\NewDocumentCommand{\indicatorText}{+m}
+ {
+ \starray_set_prop:nnn {indicator.ind}{text}{#1}
+ }
+
+
+\NewDocumentCommand{\lstind}{O{\section}O{\subsection}m}
+ {
+ \starray_set_iter_from_hash:nnT {indicator}{#3}
+ {
+ \starray_get_prop:nnN {indicator}{seqlst}\l_tmpa_seq
+ \seq_map_inline:Nn \l_tmpa_seq
+ {
+ \starray_set_iter_from_hash:nn {indicator.ind}{##1}
+ \starray_term_syntax:n {indicator.ind}
+ \bool_if:nTF {\starray_parsed_get_prop:n{is_section}}
+ { #1 {\starray_parsed_get_prop:n{short}} }
+ { #2 {\starray_parsed_get_prop:n{short}} }
+ \starray_parsed_get_prop:n{text}
+ }
+ }
+ }
+
+
+\NewDocumentCommand{\indsetstatus}{O{attention}mm}
+ {
+ \starray_set_iter_from_hash:nn {indicator}{#2}
+ \seq_set_from_clist:Nn \l_tmpa_seq {#3}
+ \seq_map_inline:Nn \l_tmpa_seq
+ {
+ \starray_set_iter_from_hash:nn {indicator.ind}{@##1}
+ \starray_gset_prop:nnn {indicator.ind}{status}{#1}
+ }
+ }
+
+\NewDocumentCommand{\indsetview}{m}
+ {
+ \starray_set_iter_from_hash:nn {indicator}{#1}
+ \starray_gset_prop:nnn {indicator}{view}{\c_true_bool}
+
+ }
+
+\NewDocumentCommand{\indsethide}{m}
+ {
+ \starray_set_iter_from_hash:nn {indicator}{#1}
+ \starray_gset_prop:nnn {indicator}{view}{\c_false_bool}
+ }
+
+
+
+\NewDocumentEnvironment{listofindicators}{m}
+ {
+ \begin{list}{\textbf{??}}
+ {
+ \settowidth{\labelwidth}{#1}
+ \setlength{\labelsep}{1em}
+ \setlength{\itemindent}{0mm}
+ \setlength{\leftmargin}{\labelwidth}
+ \addtolength{\leftmargin}{\labelsep}
+ \setlength{\rightmargin}{0mm}
+ \setlength{\itemsep}{.1\baselineskip}
+ \renewcommand{\makelabel}[1]{\makebox[\labelwidth][l]{##1}}
+ }
+ }
+ {
+ \end{list}
+ }
+
+
+\NewDocumentCommand{\helpindicators}{}
+ {
+ \bool_if:NT \l__ufrgscca_showind_bool
+ {
+ \begin{itemize}[nosep,label=,leftmargin=0mm]
+ \item \tsmacro{\indsethide}{set} ~-~ Hide~ an~ indicator's~ set
+ \item \tsmacro{\comment}[status]{title,comment} ~-~ Just~ a~ comment
+ \item \tsmacro{\indref}[status]{set,ref,comment} ~-~ Single~ indicator's~ reference
+ \item \tsmacro{\indref*}[status]{set,ref,comment} ~-~ (Short~ text~ only)
+ \item \tsmacro{\indsetstatus}[status]{set,ref's-clist} ~-~ Set~ the~ status~ of~ a~(comma~separated)~ list~ of~ indicators.
+ \end{itemize}
+ where~ status:\newline
+ \starray_iterate_over:nn {status}
+ {
+ \starray_term_syntax:n {status}
+ \makebox[5mm]{} \makebox[17mm][r]{\textbf{\starray_parsed_get_prop:n{self}}}\ \ \starray_parsed_get_prop:n{text}\newline
+ }
+ }
+ }
+
+
+\NewDocumentCommand{\ifshowind}{+m+m}
+ {
+ \bool_if:NTF \l__ufrgscca_showind_bool
+ {#1}
+ {#2}
+ }
+
+
+
+\cs_new:Npn \__ufrgscca_status_refincr:n #1
+ {
+ \int_incr:c {#1}
+ }
+\cs_generate_variant:Nn \__ufrgscca_status_refincr:n {e}
+
+\cs_generate_variant:Nn \starray_get_prop:nnN {enN}
+\bool_new:N \l__ufrgscca_statuslst_bool
+\seq_new:N \l__ufrgscca_statuslst_seq
+
+\cs_new_protected:Npn \__ufrgscca_hypertarget:nn #1#2
+ {
+ \hypertarget{#1}{#2}
+ }
+\cs_generate_variant:Nn \__ufrgscca_hypertarget:nn {ee , en}
+
+\cs_new_protected:Npn \__ufrgscca_hyperlink:nn #1#2
+ {
+ \hyperlink{#1}{#2}
+ }
+\cs_generate_variant:Nn \__ufrgscca_hyperlink:nn {ee , en}
+
+\NewDocumentCommand{\PrintIndicators}{O{}}
+{
+ \bool_if:NT \l__ufrgscca_showind_bool
+ {
+ {
+ \footnotesize
+ \if@openright\cleardoublepage\else\clearpage\fi%%% TO BE CONVERTED Expl3
+
+ \phantomsection
+ \chapter*{Indicadores #1}
+ \begin{listofindicators}{EMPTY LIST . . .}
+ \tl_if_empty:nTF {#1}
+ {
+ \bool_set_false:N \l__ufrgscca_statuslst_bool
+ \__ufrgscca_set_statuscolor:n{attention}
+ }
+ {
+ \bool_set_true:N \l__ufrgscca_statuslst_bool
+ \seq_set_from_clist:Nn \l__ufrgscca_statuslst_seq {#1}
+ \seq_map_inline:Nn \l__ufrgscca_statuslst_seq
+ {
+ \starray_set_prop:nnn {status[##1]}{view}{\c_true_bool}
+ }
+ }
+ \starray_iterate_over:nn {indicator}
+ {
+ \starray_term_syntax:n {indicator}
+ \bool_if:nT {\starray_parsed_get_prop:n {view}}
+ {
+ \starray_iterate_over:nn {indicator.ind}
+ {
+ \starray_term_syntax:n{indicator.ind}
+ \starray_get_prop:enN {status[\starray_parsed_get_prop:n{status}]}{view} \l_tmpb_tl
+ \bool_if:nT {!\l__ufrgscca_statuslst_bool || \l_tmpb_tl}
+ {
+ \starray_term_syntax:n{indicator.ind}
+ \__ufrgscca_set_statuscolor:e{\starray_parsed_get_prop:n{status}}
+
+ \starray_get_prop:nnN {status}{refcnt}\l_tmpa_int
+ \int_set:Nn \l_tmpb_int {\l_tmpa_int + 1}
+ \starray_set_prop:nnV {status}{refcnt}\l_tmpb_int
+
+ \starray_term_syntax:n {indicator.ind}
+ \item[
+ \textbf{
+ \color{\l__ufrgscca_txtcolor_tl}
+ \__ufrgscca_hypertarget:en
+ {\starray_parsed_get_prop:n{labelref}}
+ {\starray_get_prop:nn {indicator}{self}:~\starray_get_prop:nn {indicator.ind}{self}}
+ }]
+ {\color{\l__ufrgscca_txtcolor_tl}\starray_get_prop:nn {indicator.ind}{short} \dotfill \normalsize\starray_get_prop:nn {indicator.ind}{status}}
+
+ \newline \starray_get_prop:nn {indicator.ind}{long} \starray_get_prop:nn {indicator.ind}{extra}
+ \starray_get_prop:nnN {indicator.ind}{seqlst} \l_tmpa_seq
+ \seq_if_empty:NF \l_tmpa_seq
+ {
+ \newline
+ \tl_set:Nn \l_tmpa_tl {} .\dotfill
+ \seq_map_inline:Nn \l_tmpa_seq
+ {
+ \l_tmpa_tl \ref{##1} ~(\pageref{##1})
+ \tl_set:Nn \l_tmpa_tl {,~}
+ }
+ }
+ }
+ }
+
+ }
+ }
+ \starray_iterate_over:nn {status}
+ {
+ \starray_term_syntax:n {status}
+ \item[\textbf{\starray_parsed_get_prop:n{self}}] \starray_parsed_get_prop:n {refcnt}
+ }
+ \end{listofindicators}
+ }
+ }
}
-%
-\NewDocumentCommand{\indsetview}{m}{\csname tcppc@indset#1viewtrue\endcsname}%
-%
-\NewDocumentCommand{\indsethide}{m}{\csname tcppc@indset#1viewfalse\endcsname}%
-%
-\NewDocumentEnvironment{listofindicators}{m}{%
- \begin{list}{\textbf{??}}{%
- \settowidth{\labelwidth}{#1}%
- \setlength{\labelsep}{1em}%
- \setlength{\itemindent}{0mm}%
- \setlength{\leftmargin}{\labelwidth}%
- \addtolength{\leftmargin}{\labelsep}%
- \setlength{\rightmargin}{0mm}%
- \setlength{\itemsep}{.1\baselineskip}%
- \renewcommand{\makelabel}[1]{\makebox[\labelwidth][l]{##1}}%
- }%
-}{%
- \end{list}%
-}%
-%
-\NewDocumentCommand{\tcppc@indrefitem}{O{, }m}{%
- \@ifundefined{r@@indlabel\tcppc@indA\tcppc@indB:#2}{}{#1 \ref{@indlabel\tcppc@indA\tcppc@indB:#2} (\pageref{@indlabel\tcppc@indA\tcppc@indB:#2})}%
-}%
-%
-\newif\iftcppc@itemdisp%
-\NewDocumentCommand{\tcppc@indicatorsitem}{m}{%%
- \@ifundefined{@indrefA#1}{}{%%
- \gdef\tcppc@indA{\csname @indrefA#1\endcsname}%%
- \gdef\tcppc@indB{\csname @indrefB#1\endcsname}%%
- \csname iftcppc@indset\tcppc@indA view\endcsname%
- \gdef\tcppc@status{\csname @indicator\tcppc@indA\tcppc@indB status\endcsname}%%
- \iftcppc@ind@filter\expandafter\tcppc@ind@filtercase\expandafter{\tcppc@status}\else\tcppc@itemdisptrue\fi%
- \iftcppc@itemdisp%
- \set@statuscolor{\tcppc@status}%%
- \@ifundefined{theind@\tcppc@status @count}{\stepcounter{ind@default@count}}{\stepcounter{ind@\tcppc@status @count}}%%
- \item[\textbf{\color{\ind@txtcolor}\hypertarget{@indlabel\tcppc@indA\tcppc@indB\tcppc@ind@filterstatus}{\tcppc@indA: \tcppc@indB}}]%
- {\color{\ind@txtcolor}\emph{\csname @indicator\tcppc@indA\tcppc@indB short\endcsname}} \dotfill %
- {\normalsize\color{\ind@txtcolor}\textbf{\csname @indicator\tcppc@indA\tcppc@indB status\endcsname}} %
- \ifthenelse{\equal{\csname @indicator\tcppc@indA\tcppc@indB long\endcsname}{}}{\break}{\newline\csname @indicator\tcppc@indA\tcppc@indB long\endcsname \csname @indicator\tcppc@indA\tcppc@indB extra\endcsname\hfill\break}%%
- \tcppc@indrefitem[.\dotfill]{1}%%
- \forcsvlist\tcppc@indrefitem{2,3,4,5,6,7,8,9,10,11,12,13}%
- \fi%
- \fi%
- }%%
-}%
-%
-\NewDocumentCommand{\tcppc@indicatorsbatch}{m}{\forcsvlist\tcppc@indicatorsitem{#10,#11,#12,#13,#14,#15,#16,#17,#18,#19}}%
-%
-\NewDocumentCommand{\tcppc@indicatorsBatch}{m}{\forcsvlist\tcppc@indicatorsbatch{#10,#11,#12,#13,#14,#15,#16,#17,#18,#19}}%
-%
-%
-\NewDocumentCommand{\tcppc@helpstatus}{+m}{\makebox[5mm]{}\makebox[17mm][r]{\textbf{#1}}\ \ \csname #1@text\endcsname\newline}%
-%
-\NewDocumentCommand{\tcppc@helpbf}{+m}{\textbf{\color{black}\textbackslash #1}$\,\,$}%
-\NewDocumentCommand{\tcppc@helpO}{+m}{{\color{darkteal}\textbf{[}<status>#1\textbf{]}}$\,\,$}%
-\NewDocumentCommand{\tcppc@helpM}{+m}{{\color{darkblue}\textbf{\{}#1\textbf{\}}}$\,\,$}%
-%
-\NewDocumentCommand{\helpindicators}{}{{\footnotesize%
- \if@showindicators%
- \begin{itemize}[nosep,label=,leftmargin=0mm]%
- \item \tcppc@helpbf{indsethide}\tcppc@helpM{<set>} - Hide an indicator's set%
- \item \tcppc@helpbf{comment}\tcppc@helpO{}\tcppc@helpM{<title>}\tcppc@helpM{<comment>} - Just a comment%
- \item \tcppc@helpbf{indref}\tcppc@helpO{}\tcppc@helpM{<set>}\tcppc@helpM{<ref>}\tcppc@helpM{<comment>} - Single indicator's reference%
- \item \tcppc@helpbf{indref*}\tcppc@helpO{}\tcppc@helpM{<set>}\tcppc@helpM{<ref>}\tcppc@helpM{<comment>} - (Short text only)%
- \item \tcppc@helpbf{indreflst}\tcppc@helpO{}\tcppc@helpM{<set>}\tcppc@helpM{\tcppc@helpO{:}<ref> , \tcppc@helpO{:}<ref> , ...}\tcppc@helpM{<comment>} - Referece list %
- \item \tcppc@helpbf{indreflst*}\tcppc@helpO{}\tcppc@helpM{<set>}\tcppc@helpM{\tcppc@helpO{:}<ref> , \tcppc@helpO{:}<ref> , ...}\tcppc@helpM{<comment>} - (Single box)%
- \item \tcppc@helpbf{indsetstatus}\tcppc@helpO{}\tcppc@helpM{<set>}\tcppc@helpM{<ref> , <ref> , ...} - Set the status of a list of indicators.%
- \end{itemize}%
- where status:\newline%
- \expandafter\forcsvlist\expandafter\tcppc@helpstatus\expandafter{\ind@statuslst}%
- \fi%
-}}%
-%
-\NewDocumentCommand{\tcppc@printcount}{+m}{\item[ ] {\color{\attention@txtcolor}\large\textbf{\makebox[15mm][r]{#1 :} \csname theind@#1@count\endcsname}}%
-}%
-%
-%
-%
-%\NewDocumentCommand{\ifshowindicators}{m}{\if@showindicators#1\fi}
-%\NewDocumentCommand{\ifthenelseshowindicators}{+m+m}{\if@showindicators#1\else#2\fi}
-\NewDocumentCommand{\ifshowind}{+m+m}{\if@showindicators#1\else#2\fi}
-%
-%
-\newif\iftcppc@ind@filter%
-\mkswitch[\tcppc@itemdispfalse]\tcppc@ind@filtercase%
-\NewDocumentCommand{\tcppc@ind@filteraux}{+m}{\addcase\tcppc@ind@filtercase{#1}{\tcppc@itemdisptrue}}%
-\NewDocumentCommand{\PrintIndicators}{O{}}{\footnotesize%
- \if@showindicators%%
- \def\tcppc@ind@filterstatus{#1}%
- \ifthenelse{\equal{#1}{}}{\tcppc@ind@filterfalse}{\tcppc@ind@filtertrue\expandafter\forcsvlist\expandafter\tcppc@ind@filteraux\expandafter{#1}}%
- \if@openright\cleardoublepage\else\clearpage\fi%%%
- \phantomsection%%
- \chapter*{Indicadores #1}%\newpage%%
- \begin{listofindicators}{EMPTY LIST . . .}%%
- \iftcppc@ind@filter\else\item[ ] {\color{\attention@txtcolor}\large\textbf{\the@indcounter}\ Indicadores.}\fi%%
- \tcppc@indicatorsbatch{}%
- \tcppc@indicatorsBatch{}%
- \forcsvlist\tcppc@indicatorsBatch{1,2,3,4,5,6,7,8,9}%
- \iftcppc@ind@filter\else\expandafter\forcsvlist\expandafter\tcppc@printcount\expandafter{\ind@statuslst}\fi%
- \end{listofindicators}%
- \fi%
-}%
-%
-%
-\NewDocumentCommand{\textmark}{O{attention}m}{\set@statuscolor{#1}{\color\ind@txtcolor {\textbf{!! #2 !!}}}}
-
-
-\NewDocumentCommand{\comment}{O{attention}m+m}{%
- \if@showindicators%
- \if@indnocomments\else%
- \set@statuscolor{#1}%
- \ \hfill\parbox{0.9\textwidth}{\small%
- \begin{mdframed}[style=indicatorsTikZ,frametitle=\tikztitle{#2}]%
- {\footnotesize #3\par}%
- \hfill\emph{status: }\textbf{\color{\ind@txtcolor}#1}%
- \end{mdframed}%
- }\\[-2.7mm]%
- \fi%
- \fi%
-}%
+
+
+\NewDocumentCommand{\textmark}{O{attention}m}
+ {
+ \bool_if:NT \l__ufrgscca_showind_bool
+ {
+ {
+ \__ufrgscca_set_statuscolor:n {#1}
+ \color{\l__ufrgscca_txtcolor_tl}
+ \textbf{!!~ #2~ !!}
+ }
+ }
+ }
+
+
+\NewDocumentCommand{\comment}{O{attention}m+m}
+ {
+ \bool_if:NT \l__ufrgscca_showind_bool
+ {
+ \bool_if:NF \l__ufrgscca_nocomments_bool
+ {
+ \__ufrgscca_set_statuscolor:n {#1}
+ \ \hfill\parbox{0.9\textwidth}{\small
+ \begin{mdframed}[style=NEWindicatorsTikZ,frametitle=\__ufrgscca_tikz_title:n{#2}]
+ {\footnotesize #3\par}
+ \hfill\emph{status:~}\textbf{\color{\l__ufrgscca_txtcolor_tl}#1}
+ \end{mdframed}
+ }\\[-2.7mm]
+ }
+ }
+ }
+
+
+
\let\remark\comment
-%
-\NewDocumentCommand{\indtext}{mm}{\csname @indicator#1#2short\endcsname}
-%
-\NewDocumentCommand{\tcppc@indhack}{smm+m}{%
- \csname iftcppc@indset#2view\endcsname%
- \set@statuscolor{\tcppc@status}%
- \ \hfill\parbox{0.9\textwidth}{\small%%
- \begin{mdframed}[style=indicatorsTikZ,frametitle=\tikztitle{\hyperlink{@indlabel#2#3}{#2 : #3}}]%%
- \pdftooltip{\emph{\csname @indicator#2#3short\endcsname}}{\csname @indicator#2#3long\endcsname}\par%%
- \if@indlongtext%%
- \IfBooleanF{#1}{%%
- \ifthenelse{\equal{\csname @indicator#2#3long\endcsname}{}}{}{\enquote{\footnotesize\csname @indicator#2#3long\endcsname}\par}%%
- }%
- \fi%%
- \if@indnocomments\else\ifthenelse{\equal{#4}{}}{}{{\emph{\color{\comments@txtcolor}{#4}}}\par}\fi%%
- \hfill\emph{status: }\textbf{\color{\ind@txtcolor}\tcppc@status}%%
- \end{mdframed}%%
- }\\[-2.7mm]%%
- \fi%
+
+\NewDocumentCommand{\indtext}{mm}
+ {
+ \bool_if:NT \l__ufrgscca_showind_bool
+ {
+ \starray_get_prop:nn {#1}{#2}{short}
+ }
+ }
+
+
+%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%
+%%%
+%%%
+%%%
+%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%
+
+
+\tl_new:N \l__ufrgscca_tmp_indref_tl
+\NewDocumentCommand{\indref}{sO{}mm+m}
+ {
+ \bool_if:NT \l__ufrgscca_showind_bool
+ {
+ \starray_set_iter_from_hash:nn {indicator}{#3}
+ \starray_set_iter_from_hash:nn {indicator.ind}{@#4}
+ \tl_if_empty:nF {#2}
+ {
+ \starray_gset_prop:nnn {indicator.ind}{status}{#2}
+ }
+ \starray_get_prop:nnN {indicator.ind}{seqlst} \l_tmpa_seq
+ \starray_get_prop:nnN {indicator.ind}{cnt} \l_tmpb_tl
+ \int_set:Nn \l_tmpa_int {\l_tmpb_tl + 1}
+ \starray_set_prop:nnV {indicator.ind}{cnt} \l_tmpa_int
+ \tl_set:Ne \l__ufrgscca_tmp_indref_tl {@indlabel@ #3 @ #4 - \int_use:N \l_tmpa_int }
+ \seq_put_right:Ne \l_tmpa_seq{\l__ufrgscca_tmp_indref_tl}
+ \starray_set_prop:nnV {indicator.ind}{seqlst} \l_tmpa_seq
+ \label{\l__ufrgscca_tmp_indref_tl}
+ \starray_term_syntax:n {indicator}
+ \bool_if:nT {\starray_parsed_get_prop:n {view}}
+ {
+ \starray_term_syntax:n {indicator.ind}
+ \__ufrgscca_set_statuscolor:e {\starray_parsed_get_prop:n {status}}
+ \starray_term_syntax:n {indicator.ind}
+ \ \hfill
+ \parbox{0.9\textwidth}
+ {
+ \small
+ \begin{mdframed}[style=NEWindicatorsTikZ,frametitle=\__ufrgscca_tikz_title:n{\__ufrgscca_hyperlink:en{\starray_parsed_get_prop:n {labelref}}{#3 ~:~ #4}}]
+ \pdftooltip{\emph{\starray_parsed_get_prop:n {short}}}{\starray_parsed_get_prop:n {long}}\par
+ \bool_if:NT \l__ufrgscca_indlong_bool
+ {
+ \IfBooleanF{#1}{
+ \ifthenelse{\equal{\starray_parsed_get_prop:n {long}}{}}{}{\enquote{\footnotesize\starray_parsed_get_prop:n {long}}\par}
+ }
+ }
+ \bool_if:NF \l__ufrgscca_nocomments_bool
+ {
+ \ifthenelse{\equal{#5}{}}{}{{\emph{\color{\l__ufrgscca_comment_color_tl}{#5}}}\par}
+ }
+ \hfill\emph{status: }\textbf{\color{\l__ufrgscca_txtcolor_tl}\starray_parsed_get_prop:n {status}}
+ \end{mdframed}
+ }\\[-2.7mm]
+ }
+ }
+ }
+
+\definecolor{grayblack}{rgb}{0.8,0.8,0.8}
+
+
+\tl_new:N \l__ufrgscca_txtcolor_tl
+\tl_new:N \l__ufrgscca_bgcolor_tl
+\tl_new:N \l__ufrgscca_comment_color_tl
+\tl_set:Nn \l__ufrgscca_comment_color_tl {darkblue}
+
+\cs_new_protected:Npn \__ufrgscca_set_statuscolor:n #1
+ {
+ \starray_set_iter_from_hash:nnF {status}{#1}
+ { \starray_set_iter_from_hash:nn {status}{default} }
+ \starray_get_prop:nnN {status}{txtcolor}\l__ufrgscca_txtcolor_tl
+ \starray_get_prop:nnN {status}{bgcolor}\l__ufrgscca_bgcolor_tl
+ }
+
+\cs_generate_variant:Nn \__ufrgscca_set_statuscolor:n {e}
+
+
+\cs_new_protected:Npn \__ufrgscca_set_txtcolor:n #1
+ {
+ \starray_set_iter_from_hash:nnF {status}{#1}
+ {
+ \starray_set_iter_from_hash:nn {status}{default}
+ }
+ \starray_term_syntax:n{status}
+ \color{\starray_parsed_get_prop:n{txtcolor}}
+ }
+
+\NewDocumentCommand{\SetStatusColor}{m}
+ {
+ \__ufrgscca_set_txtcolor:n {#1}
+ }
+
+\cs_new:Npn \__ufrgscca_def_colorpair:n #1
+ {
+ \colorlet{light#1}{white!85!#1}
+ \colorlet{dark#1}{#1!70!black!100}
+ }
+
+\cs_new:Npn \__ufrgscca_def_status:nnn #1#2#3
+ {
+ \starray_new_term:nn {status}{#1}
+ \starray_set_from_keyval:nn {status}
+ {
+ txtcolor = {dark#2} ,
+ bgcolor = {light#2} ,
+ text = {#3~ (#2)} ,
+ self = {#1} ,
+ }
+ \__ufrgscca_def_colorpair:n {#2}
+ }
+
+\__ufrgscca_def_status:nnn{tbd}{gray}{To~ Be~ Done}
+\__ufrgscca_def_status:nnn{done}{green}{Done}
+\__ufrgscca_def_status:nnn{review}{yellow}{to~ be~ reviewed}
+\__ufrgscca_def_status:nnn{attention}{red}{needs~ Attention}
+\__ufrgscca_def_status:nnn{NSA}{brown}{NSA}
+\__ufrgscca_def_status:nnn{noref}{magenta}{no~ references}
+\__ufrgscca_def_status:nnn{EAD}{violet}{EAD}
+\__ufrgscca_def_status:nnn{MDi}{teal}{(courseware)...}
+\__ufrgscca_def_status:nnn{DOCs}{blue}{other~ DOCs}
+\__ufrgscca_def_status:nnn{default}{cyan}{everything~ else}
+\__ufrgscca_def_status:nnn{comment}{blue}{a~ comment}
+
+
+
+\mdfdefinestyle{NEWindicatorsTikZ}{
+ linecolor=grayblack,
+ linewidth=0.4pt,
+% skipabove=0.65\baselineskip,
+% skipbelow=0.5\baselineskip,
+ skipabove=0pt,
+ skipbelow=0pt,
+ leftmargin =-3.5pt,
+ rightmargin=-3.5pt,
+ innerleftmargin=3pt,
+ innerrightmargin=3pt,
+ needspace=3\baselineskip,
+ backgroundcolor=\l__ufrgscca_bgcolor_tl,
+ usetwoside=false,
+% innertopmargin = 3pt,
+% innerbottommargin = 2pt,
+ innertopmargin = 2pt,
+ innerbottommargin = 2pt,
+ roundcorner = 4pt,
+ frametitle={\__ufrgscca_tikz_title:n{TITLE}},
+ frametitleaboveskip=-0.6\baselineskip,
+ frametitlebelowskip=0pt,
+ frametitlealignment = \raggedleft,
+ leftline = true,
+ rightline = true,
+ nobreak = true,
}
-\NewDocumentCommand{\indref}{sO{}mm+m}{%%
- \ifthenelse{\equal{#2}{}}{}{\expandafter\gdef\csname @indicator#3#4status\endcsname{#2}}%%
- \expandafter\gdef\expandafter\tcppc@status{\csname @indicator#3#4status\endcsname}%
- \stepcounter{@indcount#3#4}\label{@indlabel#3#4:\csname the@indcount#3#4\endcsname}%%
- \if@showindicators%%
- \IfBooleanTF{#1}{\tcppc@indhack*{#3}{#4}{#5}}{\tcppc@indhack{#3}{#4}{#5}}
- \fi% %
-}%
-%
-%
-%\newcommand{\tcppc@indreflstitem}[4][]{%
-\NewDocumentCommand{\tcppc@indreflstitem}{O{}mmm}{%
- \ifthenelse{\equal{#1}{}}{}{\expandafter\gdef\csname @indicator#2#3status\endcsname{#1}}%
- \expandafter\gdef\expandafter\tcppc@status{\csname @indicator#2#3status\endcsname}%
- \stepcounter{@indcount#2#3}\label{@indlabel#2#3:\csname the@indcount#2#3\endcsname}%%
- \set@statuscolor{\tcppc@status}%
- \hyperlink{@indlabel#2#3}{\textbf{#3 :}}\pdftooltip{\emph{\csname @indicator#2#3short\endcsname}}{\csname @indicator#2#3long\endcsname}\par%%
- \if@indlongtext%%
- \ifthenelse{\equal{\csname @indicator#2#3long\endcsname}{}}{}{\enquote{\footnotesize\csname @indicator#2#3long\endcsname}\par}%%
- \fi%%
- \hfill\emph{status: }\textbf{\color{\ind@txtcolor}\tcppc@status\break}%%
-}%
-
-\NewDocumentCommand{\indreflst}{sO{}mmm}{%
- \IfBooleanTF{#1}{%
- \gdef\tcppc@indreflst##1{\StrCut{##1}{:}\tcppc@parA\tcppc@parB\IfStrEq{\tcppc@parB}{}{\tcppc@indreflstitem{#3}{\tcppc@parA}{#5}}{\expandafter\tcppc@indreflstitem\expandafter[\tcppc@parA]{#3}{\tcppc@parB}{#5}}}%
- \if@showindicators%
- \csname iftcppc@indset#3view\endcsname%
- \ \hfill\parbox{0.9\textwidth}{\small%
- \begin{mdframed}[style=indicatorsTikZ,frametitle=\tikztitle{#3}]%%
- \expandafter\forcsvlist\expandafter\tcppc@indreflst\expandafter{#4}%
- \if@indnocomments\else\ifthenelse{\equal{#5}{}}{}{{\emph{\color{\comments@txtcolor}{#5}}}\par}\fi%%
- \set@statuscolor{#2}%
- \end{mdframed}%
- }%
- \fi%
- \fi%
- }{%
- \gdef\tcppc@indreflst##1{\StrCut{##1}{:}\tcppc@parA\tcppc@parB\IfStrEq{\tcppc@parB}{}{\indref{#3}{\tcppc@parA}{}}{\indref[\tcppc@parA]{#3}{\tcppc@parB}{}}}%
- \expandafter\forcsvlist\expandafter\tcppc@indreflst\expandafter{#4}%
- \comment[#2]{comment}{#5}%
- }%
-}%
-%
-% other default colors (xcolor pack): lime, olive, orange, pink, purple.
-%
-\def\tcppc@defcolorpair#1{\colorlet{light#1}{white!85!#1}\colorlet{dark#1}{#1!70!black!100}}
-%
-%
-\definecolor{grayblack}{rgb}{0.8,0.8,0.8}%
-%
-%
-\NewDocumentCommand{\ind@defstatus}{mmm}{%
- \newcounter{ind@#1@count}%
- \tcppc@defcolorpair{#2}%
- \expandafter\gdef\csname #1@txtcolor\endcsname{dark#2}%
- \expandafter\gdef\csname #1@bgcolor\endcsname{light#2}%
- \expandafter\gdef\csname #1@text\endcsname{#3 (#2)}%
- \@ifundefined{ind@statuslst}{\gdef\ind@statuslst{#1}}{\edef\ind@statuslst{\ind@statuslst,#1}}%
-}%
-%
-\ind@defstatus{tbd}{gray}{To Be Done}%
-\ind@defstatus{done}{green}{Done}%
-\ind@defstatus{review}{yellow}{to be reviewed}%
-\ind@defstatus{attention}{red}{needs Attention}%
-\ind@defstatus{NSA}{brown}{NSA}%
-\ind@defstatus{noref}{magenta}{no references}%
-\ind@defstatus{EAD}{violet}{EAD}%
-\ind@defstatus{MDi}{teal}{(courseware)...}%
-\ind@defstatus{DOCs}{blue}{other DOCs}%
-\ind@defstatus{default}{cyan}{everything else}%
-%
-\def\comments@txtcolor{darkblue}%
-%
-%
-\def\ind@TikZpos{0.44}%
-\NewDocumentCommand{\tikztitle}{m}{\tikz[baseline=(current bounding box.east),outer sep=0pt,xshift=1cm,thin,color=grayblack] \draw (0,0) (\ind@TikZpos,0) node[anchor=west,rectangle,rounded corners,fill=white,draw] at (\ind@TikZpos,0) {#1} node[anchor=west,rectangle,rounded corners,color=black] at (\ind@TikZpos,0) {#1};}%%
-%
-%
-\mdfdefinestyle{indicatorsTikZ}{%
- linecolor=grayblack,%%
- linewidth=0.4pt,%
-% skipabove=0.65\baselineskip,%
-% skipbelow=0.5\baselineskip,%
- skipabove=0pt,%
- skipbelow=0pt,%
- leftmargin =-3.5pt,%
- rightmargin=-3.5pt,%
- innerleftmargin=3pt,%
- innerrightmargin=3pt,%
- needspace=3\baselineskip,%
- backgroundcolor=\ind@bgcolor,%
- usetwoside=false,%
-% innertopmargin = 3pt,%
-% innerbottommargin = 2pt,%
- innertopmargin = 2pt,%
- innerbottommargin = 2pt,%
- roundcorner = 4pt,%
- frametitle={\tikztitle{TITLE}},%
- frametitleaboveskip=-0.6\baselineskip,%
- frametitlebelowskip=0pt,%
- frametitlealignment = \raggedleft,%
- leftline = true,%
- rightline = true,%
- nobreak = true,%
-}%
-
-\NewDocumentCommand{\fancyquote}{O{-2\topsep-2\parsep-2\partopsep-2\parskip}+mmm}{%
- \vspace{#1}{%
- \ \hfill\begin{minipage}{0.5\textwidth}\noindent\scriptsize\emph{''#2''}%
- {\vspace{-\parsep}\begin{flushright}\footnotesize#3\\\sc #4\end{flushright}} \end{minipage}\\
- }}
+\tl_new:N \l__ufrgscca_TikZ_pos_tl
+\tl_set:Nn \l__ufrgscca_TikZ_pos_tl {0.44}
+\cs_new_protected:Npn \__ufrgscca_tikz_title:n #1
+ {
+ \tikz[baseline=(current~ bounding~ box.east),outer~ sep=0pt,xshift=1cm,thin,color=grayblack]
+ \draw (0,0) (\l__ufrgscca_TikZ_pos_tl,0)
+ node[anchor=west,rectangle,rounded~ corners,fill=white,draw] at (\l__ufrgscca_TikZ_pos_tl,0) {#1}
+ node[anchor=west,rectangle,rounded~ corners,color=black] at (\l__ufrgscca_TikZ_pos_tl,0) {#1};
+ }
+
+
+
+
+\NewDocumentCommand{\fancyquote}{O{-2\topsep-2\parsep-2\partopsep-2\parskip}+mmm}
+ {
+ \vspace{#1}
+ {
+ \ \hfill
+ \begin{minipage}{0.5\textwidth}
+ \noindent\scriptsize\emph{''#2''}
+ { \vspace{-\parsep}
+ \begin{flushright}
+ \footnotesize
+ #3\\
+ \sc #4
+ \end{flushright}
+ }
+ \end{minipage}\\
+ }
+ }
\NewDocumentEnvironment{ppc.quote}{}{\begin{displayquote}\begin{itshape}\smaller}{\end{itshape}\end{displayquote}}
%\preto\displayquote{\begingroup\setlength{\leftmargini}{0mm}}
%\appto\enddisplayquote{\endgroup}
-\RenewDocumentEnvironment{quote}{}{%
- \list{}{\leftmargin20mm\rightmargin0mm}%
- \item\relax%
-}{\endlist}
+\RenewDocumentEnvironment{quote}{}
+ {
+ \list{}{\leftmargin20mm\rightmargin0mm}
+ \item\relax
+ }
+ { \endlist }
%
\NewDocumentCommand{\labelhack}{m}{\def\@currentlabelname{#1}}
-\NewDocumentCommand{\acrolist}{}{}
-\NewDocumentCommand{\acrodef}{mmm}{%
- %\expandafter\DeclareFixedFootnote\expandafter{\csname #1\endcsname}{#3}%
- \expandafter\def\csname #1\endcsname{\footnote{#3}}%
- \expandafter\def\csname acrolsti:#1\endcsname{\item[#2] #3}%
- \appto\acrolist{\item[#2] #3}%
- \expandafter\def\csname acroS:#1\endcsname{#2}%
- \expandafter\def\csname acroL:#1\endcsname{#3}%
+
+
+\NewDocumentCommand{\acrodef}{mmm}
+ {
+ \starray_new_term:nn {acrolist}{#1}
+ \starray_set_from_keyval:nn {acrolist}
+ {
+ short = {#2} ,
+ long = {#3}
+ }
+ }
+
+\NewDocumentCommand{\acro}{m}{\starray_get_prop:nn{acrolist[#1]}{short}}
+\NewDocumentCommand{\acrol}{m}{\starray_get_prop:nn{acrolist[#1]}{long}}
+\NewDocumentCommand{\acrols}{m}{\starray_get_prop:nn{acrolist[#1]}{long}, \starray_get_prop:nn{acrolist[#1]}{short}}
+\NewDocumentCommand{\acrosl}{m}{\starray_get_prop:nn{acrolist[#1]}{short}, \starray_get_prop:nn{acrolist[#1]}{long}}
+\NewDocumentCommand{\acrofoot}{m}{\starray_get_prop:nn{acrolist[#1]}{short}\footnote{\starray_get_prop:nn{acrolist[#1]}{long}}}
+\NewDocumentCommand{\printacrolist}{O{}m}{
+ \begin{listofabbrv}[#1]{#2}
+ \starray_iterate_over:nn {acrolist}
+ { \item[\starray_get_prop:nn{acrolist}{short}] \starray_get_prop:nn{acrolist}{long} }
+ \end{listofabbrv}
}
-\NewDocumentCommand{\acroitem}{m}{\csname acrolsti:#1\endcsname}
-\NewDocumentCommand{\printacrolist}{O{}m}{\begin{listofabbrv}[#1]{#2}\acrolist\end{listofabbrv}}
-\NewDocumentCommand{\acro}{m}{\csname acroS:#1\endcsname}
-\NewDocumentCommand{\acrol}{m}{\csname acroL:#1\endcsname}
-\NewDocumentCommand{\acrols}{m}{\csname acroL:#1\endcsname, \csname acroS:#1\endcsname}
-\NewDocumentCommand{\acrosl}{m}{\csname acroS:#1\endcsname, \csname acroL:#1\endcsname}
-\NewDocumentCommand{\acrofoot}{m}{\csname acroS:#1\endcsname\csname #1\endcsname}
+
\RenewDocumentCommand{\subparagraph}{m}{}
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-coord.def b/macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-coord.def
deleted file mode 100644
index 8265a5e16d..0000000000
--- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-coord.def
+++ /dev/null
@@ -1,167 +0,0 @@
-%%%==============================================================================
-%% Copyright 2022-23 by Alceu Frigeri
-%%
-%% This work may be distributed and/or modified under the conditions of
-%%
-%% * The [LaTeX Project Public License](http://www.latex-project.org/lppl.txt),
-%% version 1.3c (or later), and/or
-%% * The [GNU Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.html),
-%% version 3 (or later)
-%%
-%% This work has the LPPL maintenance status *maintained*.
-%%
-%% The Current Maintainer of this work is Alceu Frigeri
-%%
-%% This is version 1.12 (2023/09/23)
-%%
-%% The list of files that compose this work can be found in the README.md file at
-%% https://ctan.org/pkg/ufrgscca
-%%
-%%%==============================================================================
-%% UFRGS stands for "Federal University of Rio Grande do Sul" in south Brazil
-%% EE stands for "Engineering School"
-%% CCA stands for "Control and Automation Engineering Course" (Portuguese acronym)
-%%%==============================================================================
-\makeatletter
-\def\tc@tmp@packname{ufrgscca-ptBR-coord}
-\def\tc@tmp@altpackname{ufrgsccaptbrcoord}
-\def\tc@tmp@packdesc{UFRGS/CCA Portuguese coord defs}
-\def\tc@tmp@packdate{2023/09/23}
-\def\tc@tmp@packversion{1.12}
-\let\@exp\expandafter
-\@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion}
-
-
-\calendartitle{Calendário – \tcdef@coord@TCCperiod}
-
-\tcccalendarhead{Data/Período}{Semana Letiva}{Evento}
-\tcceventAweek{01}
-\tcccalendarevent{\tcdef@coord@tcceventAweek}{Apresentação da disciplina. Informações gerais. Reunião presencial com início às 18:30h, no Salão de Eventos do DELET.\newline {\bf Presença obrigatória.}}
-\tcceventBweek{02}
-\tcccalendarevent{\tcdef@coord@tcceventBweek}{Requerimento de matrícula. O(A) aluno(a) deve abrir processo/petição de matrícula em TCC no porta TuaUFRGS, adicionando ao mesmo o \emph{Formulário de Requerimento de Matrícula}, já com o resumo do trabalho, a ser encaminhado a\tccore@@ref{TCCcoord}{article} coordenador\tccore@@ref{TCCcoord}{narticle} da atividade. \newline{\bf Obs.~1}}
-%\tcccalendarevent{03}{Entrega do \emph{Formulário de Inscrição}, juntamente com o resumo do trabalho, no \tcdef@cover@secdivisionacronym .}
-\tcceventCweek{07}
-\tcccalendarevent{\tcdef@coord@tcceventCweek}{Encontro presencial: Como redigir um TCC, melhores práticas. Início às 18:30h, no Salão de Eventos do DELET.}% \newline {\bf Presença obrigatória.}}
-\tcceventDweek{09}
-\tcccalendarevent{\tcdef@coord@tcceventDweek}{Entrega VIA MOODLE do \emph{Relatório Parcial}, juntamente com o \emph{Formulário de Aprovação do Relatório Parcial e Banca Examinadora} assinado pelo orientador. \newline{\bf Obs.~2}}
-\tcceventEweek{15}
-\tcccalendarevent{\tcdef@coord@tcceventEweek}{Entrega de uma cópia impressa (ou eletrônica) do Trabalho de Conclusão a cada membro da banca, juntamente com os \emph{Formulários de Avaliação} e \emph{Formulários de correções} do trabalho. Entrega VIA MOODLE de uma cópia eletrônica do trabalho juntamente com o \emph{Formulário de Aprovação para Apresentação} e os recibos de recebimento assinados e datados pelos membros das bancas.}
-\tcceventFweek{16}
-\tcccalendarevent{\tcdef@coord@tcceventFweek}{Encontro presencial: Como apresentar um TCC, melhores técnicas. Início às 18:30h, no Salão de Eventos do DELET.}% \newline {\bf Presença obrigatória.}}
-\tcceventGweek{17}
-\tcccalendarevent{\tcdef@coord@tcceventGweek}{Apresentações dos Trabalhos de Conclusão de Curso. \newline{\bf Obs.~3}}
-\tcceventHweek{17}
-\tcccalendarevent{\tcdef@coord@tcceventHweek}{Entrega VIA MOODLE dos \emph{Formulários de correções} dos membros da banca.}
-\tcceventIweek{18}
-\tcccalendarevent{\tcdef@coord@tcceventIweek}{Entrega VIA MOODLE da versão final corrigida do trabalho e o \emph{Formulário de Aprovação das Correções}. Entrega do formulário de autorização para publicação (biblioteca) assinado na secretaria do DELAE. \newline{\bf Obs.~4}}
-\tcceventJweek{19}
-\tcccalendarevent{\tcdef@coord@tcceventJweek}{Para os TCCs em RECUPERAÇÃO, entrega VIA MOODLE da versão final corrigida do trabalho e o \emph{Formulário de Aprovação das Correções}. Entrega do formulário de autorização para publicação (biblioteca) assinado na secretaria do DELAE. \newline{\bf Obs.~5}}
-
-
-\tcccalendardesc{\begin{description}
-\item[Obs. 1]: Caso o aluno(a) já tenha um processo aberto de TCC, reusar o mesmo apenas anexando o novo requerimento de matrícula, caso necessário.
-\item[Obs. 2]: O relatório deve conter as declarações de concordância em participar da banca da parte dos professores convidados.
-\item[Obs. 3]: As bancas serão marcadas após a entrega do relatório parcial, de acordo com a disponibilidade dos professores convidados.
-\item[Obs. 4]: O \emph{Formulário de Aprovação das Correções} deve estar assinado pelo(a) orientador(a). Para relatórios em que o campo “Revisarei o trabalho depois de corrigido” tiver sido assinalado por algum membro da banca, a assinatura do(a) mesmo(a) também deverá constar no \emph{Formulário de Aprovação das Correções}.
-\item[Obs. 5]: Trabalho em RECUPERAÇÃO é aquele cuja nota final quando da defesa é insuficiente para aprovação OU aquele em que o campo “Reescrever tudo” do formulário de correções foi marcado por algum membro da banca. Neste caso, o \emph{Formulário de Aprovação das Correções} deve estar assinado tanto pelo(a) orientador(a) como pelo(s) membro(s) da banca designado(s) para reavaliar o trabalho, incluindo obrigatoriamente aqueles que tiverem marcado o campo “Revisarei o trabalho depois de corrigido”.\\\hrule
-\item[IMPORTANTE]: O(A) aluno(a) estará {\bf REPROVADO(A)} \emph{se falhar na entrega de qualquer um dos documentos aqui citados dentro dos prazos estipulados}.
-\end{description}}
-
-
-\studentlistformtitle{Lista de presença, \tcdef@coord@studentlistactivity, dia \tcdef@coord@studentlistdate}
-\studentlistactivity{apresentação da atividade de TCC}
-\studentlistdate{\number\day/\number\month}
-
-\tccreporttitle{Relatório parcial/final}
-\tccreportopening{Para registro}
-\tccreportdesc{Relatório parcial/final referente aos alunos matriculados na atividade de ensino de \tcdef@forms@formstitle\ semestre \tcdef@coord@TCCperiod .}
-
-\tccreportabsents{Desistentes com conceito (segundo semestre)}
-\tccreportdismiss{Desistentes sem conceito (primeiro semestre)}
-\tccreferralopening{Ao\\ \tcdef@cover@secretaryacronym\ da \tcdef@cover@universitydivision}
-
-\internshipreferralopening{Ao\\ \tcdef@cover@secretaryacronym\ da \tcdef@cover@universitydivision}
-
-
-\internshipgrades{%
- \noindent\tcdef@forms@internshipsupervisorinfo\\%
- \noindent Avaliação do Supervisor:
- {\small\begin{center} \begin{tabular}{rcrcrc}
- Qualidade do Trabalho: & \textbf{\tccore@@ref{supervisor}{pointAA}} & Engenhosidade: &\textbf{\tccore@@ref{supervisor}{pointAB}} & Conhecimentos: & \textbf{\tccore@@ref{supervisor}{pointAC}} \\
- Cumprimento de Tarefas: & \textbf{\tccore@@ref{supervisor}{pointAD}} &
- Iniciativa: & \textbf{\tccore@@ref{supervisor}{pointAE}} & \textsc{Total I:} & \textbf{\tccore@@ref{supervisor}{gradeA}}\\\hline
- Assiduidade: & \textbf{\tccore@@ref{supervisor}{pointBA}} & Disciplina: & \textbf{\tccore@@ref{supervisor}{pointBB}} & Sociabilidade: & \textbf{\tccore@@ref{supervisor}{pointBC}} \\ Cooperação: & \textbf{\tccore@@ref{supervisor}{pointBD}} & Responsabilidade: & \textbf{\tccore@@ref{supervisor}{pointBE}} & \textsc{Total II:} & \textbf{\tccore@@ref{supervisor}{gradeB}}
- \end{tabular}\end{center}}
- \noindent\tcdef@forms@internshiptutorinfo\\%
- \noindent Avaliação do Tutor: \textbf{\tccore@@ref{tutor}{grade}}\\%
-
- \noindent Coordenador: \textbf{\tcdef@core@internshipcoord}\\%
- \noindent Avaliação do Coordenador: \textbf{\tccore@@ref{internship}{coordgrade}}\\[5mm]%
- \noindent \textsc{Nota Final:} \textbf{\tccore@@ref{student}{Temp}}\\%
- \noindent {\footnotesize $\frac{2 * (Total~I + Total~II) + Tutor + Coord.}{28}$}\\%
-}
-
-\internshipreferralfailFF{\tccore@@ref{student}{Article} alun\tccore@@ref{student}{article} \emph{\tccore@@ref{student}{}}\ n\~{a}o entregou o Relatório de Estágio Supervisionado Obrigatório até a data limite de \tc@internshipcommitBB\ sendo, portanto, considerado \tcdef@coord@referralfailed\ com conceito final \textbf{FF}.}
-
-
-\referralfailed{{REPROVAD\tccore@@ref{student}{Article}}}
-\referralapproved{{APROVAD\tccore@@ref{student}{Article}}}
-
-\referralexamapprovedtext{\tccore@@ref{student}{Article} alun\tccore@@ref{student}{article} \emph{\tccore@@ref{student}{}}\ apresentou o trabalho intitulado \emph{\tccore@@ref{student}{title}}\ no dia \tccore@@ref{student}{date}, n\~{a}o tendo sido considerad\tccore@@ref{student}{article} apt\tccore@@ref{student}{article} pela banca listada abaixo. Posto em exame, \tccore@@ref{student}{article} mesm\tccore@@ref{student}{article} foi \tcdef@coord@referralapproved\ com conceito final \tc@TCCgradeC .}
-
-\referralexamfailtext{\tccore@@ref{student}{Article} alun\tccore@@ref{student}{article} \emph{\tccore@@ref{student}{}}\ apresentou o trabalho intitulado \emph{\tccore@@ref{student}{title}}\ no dia \tccore@@ref{student}{date}, n\~{a}o tendo sido considerad\tccore@@ref{student}{article} apt\tccore@@ref{student}{article} pela banca listada abaixo. Posto em exame, \tccore@@ref{student}{article} mesm\tccore@@ref{student}{article} foi \tcdef@coord@referralfailed\ com conceito final \tc@TCCgradeD .}
-
-\referralfatetext{\tccore@@ref{student}{Article} alun\tccore@@ref{student}{article} \emph{\tccore@@ref{student}{}}\ apresentou o trabalho intitulado \emph{\tccore@@ref{student}{title}}\ no dia \tccore@@ref{student}{date}, tendo sido \tccoord@referralfate{\tccore@@ref{student}{Temp}} com conceito final \textbf{\tccoord@@fate{\Alph{tc@studentcount}}}, conforme quadro de notas abaixo. }
-
-\referralfailFF{\tccore@@ref{student}{Article} alun\tccore@@ref{student}{article} \emph{\tccore@@ref{student}{}}\ n\~{a}o concluiu o trabalho de conclus\~{a}o de Curso tendo sido \tcdef@coord@referralfailed\ com conceito final \textbf{FF}.}
-
-
-%%% for TCC-I
-\referralexamapprovedtextTR{\tccore@@ref{student}{Article} alun\tccore@@ref{student}{article} \emph{\tccore@@ref{student}{}}\ submeteu o trabalho intitulado \emph{\tccore@@ref{student}{title}}, n\~{a}o tendo sido considerad\tccore@@ref{student}{article} apt\tccore@@ref{student}{article} pela banca listada abaixo. Posto em exame, \tccore@@ref{student}{article} mesm\tccore@@ref{student}{article} foi \tcdef@coord@referralapproved\ com conceito final \tc@TCCgradeC .}
-
-\referralexamfailtextTR{\tccore@@ref{student}{Article} alun\tccore@@ref{student}{article} \emph{\tccore@@ref{student}{}}\ submeteu o trabalho intitulado \emph{\tccore@@ref{student}{title}}, n\~{a}o tendo sido considerad\tccore@@ref{student}{article} apt\tccore@@ref{student}{article} pela banca listada abaixo. Posto em exame, \tccore@@ref{student}{article} mesm\tccore@@ref{student}{article} foi \tcdef@coord@referralfailed\ com conceito final \tc@TCCgradeD .}
-
-\referralfatetextTR{\tccore@@ref{student}{Article} alun\tccore@@ref{student}{article} \emph{\tccore@@ref{student}{}}\ submeteu o trabalho intitulado \emph{\tccore@@ref{student}{title}}, tendo sido \tccoord@referralfate{\tccore@@ref{student}{Temp}} com conceito final \textbf{\tccoord@@fate{\Alph{tc@studentcount}}}, conforme quadro de notas abaixo. }
-
-%%\referralfailFF{\tccore@@ref{student}{Article} alun\tccore@@ref{student}{article} \emph{\tccore@@ref{student}{}}\ n\~{a}o concluiu o trabalho de conclus\~{a}o de Curso tendo sido \tcdef@coord@referralfailed\ com conceito final \textbf{FF}.}
-
-
-
-
-
-
-\internshipreferralfatetext{\tccore@@ref{student}{Article} alun\tccore@@ref{student}{article} \tccore@@ref{student}{}, cartão No. \tccore@@ref{student}{ID}, Matriculado na Atividade de Estágio Supervisionado Obrigatório, estagiou na Empresa \tccore@@ref{internship}{company}, no período de \tccore@@ref{internship}{start} até \tccore@@ref{internship}{end}, tendo entregue o Relatório de Estágio Supervisionado Obrigatório em
-\tccore@@ref{student}{date}, tendo sido considerado \tccoord@referralfate{\tccore@@ref{student}{Temp}} com conceito final \textbf{\tccoord@@fate{\Alph{tc@studentcount}}}, conforme notas abaixo.}
-
-
-\internshipreferralexamapprovedtext{\tccore@@ref{student}{Article} alun\tccore@@ref{student}{article} \emph{\tccore@@ref{student}{}}, cartão No. \tccore@@ref{student}{ID}, matriculado na Atividade de Estágio Supervisionado Obrigatório, estagiou na Empresa \tccore@@ref{internship}{company}, no período de \tccore@@ref{internship}{start} até \tccore@@ref{internship}{end}, tendo entregue o relatório de Estágio Supervisionado Obrigatório
-em data posterior a data limite de \tc@internshipcommitAA, estando em Exame. Conforme notas abaixo o mesmo foi considerado \tcdef@coord@referralapproved\ com conceito final \textbf{\tc@TCCgradeC}.}
-
-\internshipreferralexamfailtext{\tccore@@ref{student}{Article} alun\tccore@@ref{student}{article} \emph{\tccore@@ref{student}{}}, cartão No. \tccore@@ref{student}{ID}, matriculado na Atividade de Estágio Supervisionado Obrigatório, estagiou na Empresa \tccore@@ref{internship}{company}, no período de \tccore@@ref{internship}{start} até \tccore@@ref{internship}{end}, tendo entregue o relatório de Estágio Supervisionado Obrigatório em
-em data posterior a data limite de \tc@internshipcommitAA, estando em Exame. Conforme notas abaixo o mesmo foi considerado \tcdef@coord@referralfailed\ com conceito final \textbf{\tc@TCCgradeD}.}
-
-\internshipreferralexamhardapprovedtext{\tccore@@ref{student}{Article} alun\tccore@@ref{student}{article} \emph{\tccore@@ref{student}{}}, cartão No. \tccore@@ref{student}{ID}, matriculado na Atividade de Estágio Supervisionado Obrigatório, estagiou na Empresa \tccore@@ref{internship}{company}, no período de \tccore@@ref{internship}{start} até \tccore@@ref{internship}{end}. O mesmo foi posto em Exame pois o relatório de Estágio Supervisionado Obrigatório
-inicialmente submetido apresentava diversos problemas formais, tendo re-submetido o mesmo em \tccore@@ref{student}{date}. Conforme notas abaixo o mesmo foi considerado \tcdef@coord@referralapproved\ com conceito final \textbf{\tc@TCCgradeC}.}
-
-\internshipreferralexamhardfailtext{\tccore@@ref{student}{Article} alun\tccore@@ref{student}{article} \emph{\tccore@@ref{student}{}}, cartão No. \tccore@@ref{student}{ID}, matriculado na Atividade de Estágio Supervisionado Obrigatório, estagiou na Empresa \tccore@@ref{internship}{company}, no período de \tccore@@ref{internship}{start} até \tccore@@ref{internship}{end}. O mesmo foi posto em Exame pois o relatório de Estágio Supervisionado Obrigatório
-inicialmente submetido apresentava diversos problemas formais, tendo re-submetido o mesmo em \tccore@@ref{student}{date}. Conforme notas abaixo o mesmo foi considerado \tcdef@coord@referralfailed\ com conceito final \textbf{\tc@TCCgradeD}.}
-
-
-\boardlabel{Banca Examinadora}
-\boardstitle{Apresentações TCC em \tcdef@cover@course\ \tcdef@coord@TCCperiod\ \tcdef@coord@boardstitleB\ }
-\boardsworklabel{Título}
-\TCCgradesNlabel{Nota}
-\TCCgradesClabel{Conceito}
-\TCCgrades{A}{B}{C}{D}{FF}
-\TCCgradesN{9}{7.5}{6}
-
-\cocertificatetitle{CERTIFICADO}
-\cocertificateopenning{\`{A} quem interessar possa,\\ certificamos que}
-\cocertificatetext{atuou como co-orientador\tccore@@ref{coadvisor}{narticle} d\tccore@@ref{student}{article} alun\tccore@@ref{student}{article}\ \emph{\tccore@@ref{student}{}}\ no trabalho de conclus\~{a}o de curso intitulado \emph{\tccore@@ref{student}{title}}\ no semestre \tcdef@coord@TCCperiod.}
-
-\TCCcoordtitle{Coordenador\tccore@@ref{TCCcoord}{narticle} da atividade de ensino de\\ \tcdef@forms@formstitle\ }
-\TCCIcoordtitle{Coordenador\tccore@@ref{TCCcoord}{narticle} da atividade de ensino de\\ \tcdef@forms@formstitleTR\ }
-
-
-\advisornamegen{Orientador(a)}
-\advisornameplural{Orientadores}
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-core.def b/macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-core.def
deleted file mode 100644
index ae3ef71077..0000000000
--- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-core.def
+++ /dev/null
@@ -1,95 +0,0 @@
-%%%==============================================================================
-%% Copyright 2022-23 by Alceu Frigeri
-%%
-%% This work may be distributed and/or modified under the conditions of
-%%
-%% * The [LaTeX Project Public License](http://www.latex-project.org/lppl.txt),
-%% version 1.3c (or later), and/or
-%% * The [GNU Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.html),
-%% version 3 (or later)
-%%
-%% This work has the LPPL maintenance status *maintained*.
-%%
-%% The Current Maintainer of this work is Alceu Frigeri
-%%
-%% This is version 1.12 (2023/09/23)
-%%
-%% The list of files that compose this work can be found in the README.md file at
-%% https://ctan.org/pkg/ufrgscca
-%%
-%%%==============================================================================
-%% UFRGS stands for "Federal University of Rio Grande do Sul" in south Brazil
-%% EE stands for "Engineering School"
-%% CCA stands for "Control and Automation Engineering Course" (Portuguese acronym)
-%%%==============================================================================
-\makeatletter
-\def\tc@tmp@packname{ufrgscca-ptBR-core}
-\def\tc@tmp@altpackname{ufrgsccaptbrcore}
-\def\tc@tmp@packdesc{UFRGS/CCA Portuguese core defs}
-\def\tc@tmp@packdate{2023/09/23}
-\def\tc@tmp@packversion{1.12}
-\let\@exp\expandafter
-\@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion}
-
-
-\location{Porto~Alegre}{RS}
-
-\university{Universidade Federal do Rio Grande do Sul}
-\universityacronym{UFRGS}
-\universitydivision{Escola de Engenharia}
-\divisiongradcouncil{Conselho de Graduação da \tcdef@cover@universitydivision}
-
-\secretaryacronym{SACAD}
-\secdivisionacronym{\tcdef@cover@secretaryacronym/EE}
-\graduationtitle{Bacharel em Eng. de Controle e Automa\c{c}\~{a}o}
-\course{Eng. de Controle e Automa\c{c}\~{a}o}
-\courseacronym{CCA}
-\coursecoord{Atual Coordenador(a) do Curso}
-\coursecoordtitle{Coordenador\tccore@@ref{coursecoord}{narticle} de curso}
-\advisorname{Orientador\tccore@@ref{advisor}{narticle}}%
-\coadvisorname{Co-orientador\tccore@@ref{coadvisor}{narticle}}%
-
-\iftcif@nonrequired
- \internshiptitle{Relatório de Estágio Não Obrigatório}
-\else
- \internshiptitle{Relatório de Estágio Supervisionado Obrigatório em \tcdef@cover@course}
-\fi
-
-\internshipcoord{Atual Coordenador(a) de Estágios}
-\internshipcoordtitle{Coord\tccore@@ref{internshipcoord}{narticle}. da Atividade de Estágio Supervisionado Obrigatório}
-
-\iftcif@nonrequired
- \internshipinfo{%
- Este Relatório foi julgado adequado para a \textsl{Atividade de Estágio Não Obrigatório}
- em \emph{\tcdef@cover@course\ } e aprovado em sua forma final pel\tccore@@ref{tutor}{article} Tutor\tccore@@ref{tutor}{narticle} e
- Supervisor\tccore@@ref{supervisor}{narticle}.
-}%
-\else
- \internshipinfo{%
- Este Relatório foi julgado adequado para a obtenção do conceito final na \textsl{Atividade de Estágio Supervisionado Obrigatório}
- em \emph{\tcdef@cover@course\ } e aprovado em sua forma final pel\tccore@@ref{tutor}{article} Tutor\tccore@@ref{tutor}{narticle},
- Supervisor\tccore@@ref{supervisor}{narticle} e Coordenador\tccore@@ref{internshipcoord}{narticle} da Atividade.
- }%
-\fi
-
-
-\examinername{Banca Examinadora}%
-
-\reportspecificinfo{%
- Trabalho de Conclus\~{a}o de Curso (TCC-\tcdef@cover@courseacronym ) apresentado \`{a}
- COMGRAD-\tcdef@cover@courseacronym\ da \tcdef@cover@university\ como parte dos requisitos para a
- obten{\c{c}}{\~a}o do t\'{\i}tulo de \emph{\tcdef@cover@graduationtitle\ }.
-}%
-
-\approvalspecificinfo{%
- Este Trabalho de Conclus\~{a}o de Curso foi julgado adequado para a
- obten\c{c}\~ao dos cr\'editos da Disciplina de TCC do curso \emph{\tcdef@cover@course\ } e aprovado em sua forma final pel\tccore@@ref{advisor}{article}
- Orientador\tccore@@ref{advisor}{narticle} e pela Banca Examinadora.
-}%
-
-\profname{Professor\tccore@@ref{advisor}{narticle}}
-\coprofname{Professor\tccore@@ref{coadvisor}{narticle}}
-\tutorname{Tutor\tccore@@ref{tutor}{narticle}}
-\supervisorname{Supervisor\tccore@@ref{supervisor}{narticle}}
-
-
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-forms.def b/macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-forms.def
deleted file mode 100644
index 9f35ed41e2..0000000000
--- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-forms.def
+++ /dev/null
@@ -1,319 +0,0 @@
-%%%==============================================================================
-%% Copyright 2022-23 by Alceu Frigeri
-%%
-%% This work may be distributed and/or modified under the conditions of
-%%
-%% * The [LaTeX Project Public License](http://www.latex-project.org/lppl.txt),
-%% version 1.3c (or later), and/or
-%% * The [GNU Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.html),
-%% version 3 (or later)
-%%
-%% This work has the LPPL maintenance status *maintained*.
-%%
-%% The Current Maintainer of this work is Alceu Frigeri
-%%
-%% This is version 1.12 (2023/09/23)
-%%
-%% The list of files that compose this work can be found in the README.md file at
-%% https://ctan.org/pkg/ufrgscca
-%%
-%%%==============================================================================
-%% UFRGS stands for "Federal University of Rio Grande do Sul" in south Brazil
-%% EE stands for "Engineering School"
-%% CCA stands for "Control and Automation Engineering Course" (Portuguese acronym)
-%%%==============================================================================
-\makeatletter
-\def\tc@tmp@packname{ufrgscca-ptBR-forms}
-\def\tc@tmp@altpackname{ufrgsccaptbrforms}
-\def\tc@tmp@packdesc{UFRGS/CCA Portuguese forms defs}
-\def\tc@tmp@packdate{2023/09/23}
-\def\tc@tmp@packversion{1.12}
-\let\@exp\expandafter
-\@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion}
-
-
-%%%%%%
-%%%%%%
-%%%%%% forms
-%%%%%%
-%%%%%%
-%%%%%%
-
-\formlocal{\tc@city,\hspace{4mm} de \hspace{1.2cm} de 20\hspace{4mm}.}
-
-\formssignaturelabel{Assinatura}
-\examinersignature{Assinatura\ \ d\tccore@@ref{examiner}{article}\ \ Avaliador\tccore@@ref{examiner}{narticle}}
-\boardsignature{Assinatura\ \ do\ \ Membro\ \ da\ \ Banca}
-\advisorsignature{Assinatura\ \ d\tccore@@ref{advisor}{article}\ \ Orientador\tccore@@ref{advisor}{narticle}}
-\coadvisorsignature{Assinatura\ \ d\tccore@@ref{coadvisor}{article}\ \ Co-orientador\tccore@@ref{coadvisor}{narticle}}
-\studentsignature{Assinatura\ \ d\tccore@@ref{student}{article}\ \ Alun\tccore@@ref{student}{article}}
-\studentsignaturegen{Assinatura\ \ do(a)\ \ Aluno(a)}
-\formsstudentlabel{Alun\tccore@@ref{student}{article}}
-\formsstudentlabelgen{Aluno(a)}
-\formproflabel{Professor(a)}
-\profname{Professor\tccore@@ref{advisor}{narticle}}
-\coprofname{Professor\tccore@@ref{coadvisor}{narticle}}
-\formsboardlabel{Membro da Banca}
-\formsadvisorlabel{Orientador\tccore@@ref{advisor}{narticle}}
-\formsadvisorlabelgen{Orientador(a)}
-\formscoadvisorlabel{Co-orientador\tccore@@ref{advisor}{narticle}}
-\formsexaminerlabel{Avaliador\tccore@@ref{examiner}{narticle}}
-\formsaltexaminerlabel{Suplente}
-\formstimelabel{Horário}
-
-\formssupervisorlabel{Supervisor\tccore@@ref{supervisor}{narticle}}
-
-
-%\formstopicAlabel{Conteúdo}
-%\formstopicBlabel{Trabalho Escrito}
-%\formstopicClabel{Apresentação}
-\formsworktitlelabel{Título do Trabalho}
-\formstemptitlelabel{Título Provisório}
-\formsstudentIDlabel{Cartão}
-\formsemaillabel{e-mail}
-\formsphonelabel{ramal}
-\agreelabel{De Acordo}
-
-\continuelabel{Continua...}
-
-\formsdatelabel{Data}
-\formstitle{Trabalho de Conclusão de Curso II}% em \tcdef@cover@course}
-\formstitleTR{Trabalho de Conclusão de Curso I}% em \tcdef@cover@course}
-\formsfootnote{Entregar a cada membro da banca juntamente com a cópia do trabalho.}
-
-
-\renewreqformtitle{Formulário de Renovação da Inscrição na Atividade de Ensino Trabalho de Conclusão em \tcdef@cover@course}
-
-\reqArgument{ \noindent O Tema do Trabalho e Orientador (Co-orientador) seguem sendo os mesmos de TCC I ?
-\begin{itemize}[tcc,noitemsep]
- \item[$\Box$] SIM
- \item[$\Box$] NÃO, neste caso \textbf{justifique} a mudança no espaço a seguir:
- \end{itemize}}
-
-\renewreqformnotes{O resumo deve ser curto, i.e., não deve exceder este espaço. O texto deve ser escrito em parágrafo único, e por se tratar de proposta, poderá utilizar tempo futuro e não necessita ter motivação ou justificativa.\\
-Deve conter:
-\begin{enumerate*}[alpha)]
- \item O QUE será feito - descrição e objetivos.
- \item COMO será feito - metodologia.
- \item Resultados esperados.
-\end{enumerate*}
-}
-
-\reqformtitle{Formul\'{a}rio de Requerimento de Matr\'{i}cula}
-\reqformopening{Ilm\tccore@@ref{coursecoord}{article}. Sr\tccore@@ref{coursecoord}{narticle}.\par
- Coordenador\tccore@@ref{coursecoord}{narticle} da Comissão de Graduação do Curso em \tcdef@cover@course\ {da \tcdef@cover@universityacronym\ }}
-%\reqformopening{algo}
-
-\reqformdescgen{\tccore@@ref{student}{Article} alun\tccore@@ref{student}{article} \tc@studentA , REGULARMENTE MATRICULAD\tccore@@ref{student}{Article} neste período letivo no curso \emph{\tcdef@cover@course\ }, desta universidade, portador\tccore@@ref{student}{narticle} do cartão de identificação n$^o$ \tc@studentAID\ vem por meio deste solicitar matrícula na atividade de ensino}
-
-
-\reqformdesc{\tcdef@forms@reqformdescgen\ \tcdef@forms@formstitle}
-
-\reqformdescTR{\tcdef@forms@reqformdescgen\ \tcdef@forms@formstitleTR}
-
-\formsinternshiptitle{Estágio Supervisionado Obrigatório}% em \tcdef@cover@course}
-
-\reqforminternshipdesc{\tcdef@forms@reqformdescgen\ \tcdef@forms@formsinternshiptitle}
-
-\supervisorsignature{Assinatura\ \ d\tccore@@ref{supervisor}{article}\ \ Supervisor\tccore@@ref{supervisor}{narticle}}
-\tutorsignature{Assinatura\ \ d\tccore@@ref{tutor}{article}\ \ Tutor\tccore@@ref{tutor}{narticle}}
-\internshipcoordsignature{Assinatura\ \ d\tccore@@ref{internshipcoord}{article}\ \ Coordenador\tccore@@ref{internshipcoord}{narticle}}
-
-\supervisorformtitle{Formulário de Avaliação do Supervisor (Pela Empresa)}
-\tutorformtitle{Formulário de Avaliação do Tutor e Coordenador}
-
-\interntutorgrade{Avaliação d\tccore@@ref{tutor}{article} Prof\tccore@@ref{tutor}{narticle}. Tutor\tccore@@ref{tutor}{narticle}:\emptybox}
-
-\interncoordgrade{Avaliação d\tccore@@ref{internshipcoord}{article} Prof\tccore@@ref{internshipcoord}{narticle}. Coordenador\tccore@@ref{internshipcoord}{narticle}:\emptybox}
-
-
-\reqforminternshipinfo{%
- \tcdef@forms@formsstudentemaillabel : {\bf \tc@studentAemail} %
-\vspace{2mm}
-
-Tutor : \tc@studentA@tutor%
-
-Email do Tutor: {\bf \tccore@@ref{tutor}{email}}%
-\hfill Ramal: {\bf \tccore@@ref{tutor}{phone}}%
-\vspace{2mm}
-
-
-Empresa: {\bf \tccore@@ref{internship}{company}}%
-
-Área de Atividade: {\bf \tccore@@ref{internship}{field}}%
-\vspace{2mm}
-
-Supervisor\tccore@@ref{supervisor}{narticle}: {\bf \tccore@@ref{supervisor}{}} \hfill CREA: {\bf \tccore@@ref{supervisor}{register}}
-
-Cargo: {\bf \tccore@@ref{supervisor}{office}}\hfill Email: {\bf \tccore@@ref{supervisor}{email}} \hfill Fone: {\bf \tccore@@ref{supervisor}{phone}} %
-\vspace{2mm}
-
-Data de Início: {\bf \tccore@@ref{internship}{start}}\hfill Previsão de Término: {\bf \tccore@@ref{internship}{end}}\hfill Duração: {\bf \tccore@@ref{internship}{length}}
-}
-
-\internshipreqformnotes{O prazo final de entrega do relatório é até 21 dias antes do término do período letivo posterior à inscrição na atividade. Relatórios não entregues até esta data serão considerados \textbf{\emph{Em Exame}}. Relatórios não entregues até 14 dias antes do término do período letivo considerado implicam a atribuição de \textbf{\emph{conceito FF}}, com o consequente encerramento do processo.}
-
-\internshipstudentinfo{
- Aluno: \textbf{\tccore@@ref{student}{}}\hfill Cartão:\textbf{\tccore@@ref{student}{ID}}%
-}
-\internshipcompanyinfo{%
- Empresa: {\bf \tccore@@ref{internship}{company}}\\%
-Área de Atividade: {\bf \tccore@@ref{internship}{field}}%
-}
-\internshipsupervisorinfo{
- Supervisor: \textbf{\tccore@@ref{supervisor}{}} \hfill crea:\textbf{\tccore@@ref{supervisor}{register}}%
-}
-\internshiptutorinfo{
-Tutor: \textbf{\tccore@@ref{tutor}{}}%
-}
-\internshipcoordinfo{
-Coordenador da Atividade: \textbf{\tccore@@ref{internshipcoord}{}}%
-}
-
-
-\internshipperiod{
- Período do Estágio de: {\bf \tccore@@ref{internship}{start}} até: {\bf \tccore@@ref{internship}{end}}
-}
-
-\def\emptybox{\framebox[3em]{\color{white}W}}
-
-\internsupervisorgradesform{
-\begin{itemize}[tcc,nosep]
- \item Grupo I - Aspectos Profissionais
- \begin{enumerate}[tcc,nosep]
- \item \textbf{Qualidade do Trabalho}:\emptybox\\ {\footnotesize considerar a qualidade do trabalho tendo em vista o que seria desejável}
- \item \textbf{Engenhosidade}:\emptybox\\ {\footnotesize capacidade de sugerir, projetar ou executar modificações ou inovações.}
- \item \textbf{Conhecimentos}:\emptybox\\ {\footnotesize conhecimento demonstrado no desenvolvimento das atividades programadas.}
- \item \textbf{Cumprimentos das Tarefas}:\emptybox\\ {\footnotesize considerar o volume de atividades cumpridas dentro de um padrão razoável.}
- \item \textbf{Iniciativa}:\emptybox\\ {\footnotesize iniciativa para desenvolver suas atividades sem dependências de outros.}
- \end{enumerate}
- \item Grupo II - Aspectos Humanos
- \begin{enumerate}[tcc,nosep]
- \item \textbf{Assiduidade}:\emptybox\\ {\footnotesize cumprimento do horário do estágio e ausência de falhas}
-\item \textbf{Disciplina}:\emptybox\\ {\footnotesize observância das normas e regulamentos internos da empresa.}
-\item \textbf{Sociabilidade}:\emptybox\\ {\footnotesize facilidade de se integrar com colegas e ambiente de trabalho.}
-\item \textbf{Cooperação}:\emptybox\\ {\footnotesize disposição para cooperar com colegas e para atender a atividades..}
-\item \textbf{Senso de Responsabilidade}:\emptybox\\ {\footnotesize zelo pelo material, equipamentos e bens da empresa.}
- \end{enumerate}
-\end{itemize}
-}
-
-\internsupervisorcomments{Considerações Complementares:}
-\internshiptutorcomments{Considerações do Prof. Tutor sobre o Estágio:}
-\internshipcoordcomments{Considerações Finais do Prof. Coordenador sobre o Estágio:}
-
-\internsupervisornote{Favor utilizar a seguinte grade discreta: \begin{enumerate*}[start=0]\item Sofrível \item Regular \item Bom \item Muito Bom \item Excelente \end{enumerate*}
-}
-\coadvisorformtitle{Requerimento de Autorização de Co-Orientação}
-\coadvisorformdesc{\tccore@@ref{student}{Article} alun\tccore@@ref{student}{article} \tc@studentA , REGULARMENTE MATRICULAD\tccore@@ref{student}{Article} na atividade de TCC neste período letivo, vem por meio deste solicitar autorização para registro de co-orientação de TCC, conforme justificativa abaixo.}
-
-\formsbrieflabel{Resumo}
-
-\formsstudentemaillabel{Email d\tccore@@ref{student}{article} Alun\tccore@@ref{student}{article}}
-
-\formsadvisoremaillabel{Email d\tccore@@ref{advisor}{article} Orientador\tccore@@ref{advisor}{narticle}}
-
-\formscoadvisoremaillabel{Email d\tccore@@ref{coadvisor}{article} Co-Orientador\tccore@@ref{coadvisor}{narticle}}
-
-\formsreasonlabel{Justificativa}
-
-
-\examformtitle{Formul\'{a}rio de Avalia\c{c}\~{a}o}
-
-\examformdesc{A nota (variando de zero a dez) atribuída por cada membro da banca examinadora será dada considerando o desempenho d\tccore@@ref{student}{article} alun\tccore@@ref{student}{article} nos 3 pontos apresentados na tabela abaixo.}
-
-\examformnoteslabel{Observações}
-
-\examformnotes{\ \\Posteriormente, \tccore@@ref{TCCcoord}{article} professor\tccore@@ref{TCCcoord}{narticle} coordenador\tccore@@ref{TCCcoord}{narticle} calculará a nota final atribuída por cada membro da banca examinadora, de acordo com a seguinte ponderação:\\[2mm] {\bf Nota Final Banca = \tc@TCCpointAweight\ x \tc@TCCpointAlabel\ + \tc@TCCpointBweight\ x \tc@TCCpointBlabel\ + \tc@TCCpointCweight\ x \tc@TCCpointClabel\ } \\[2mm] A média final da atividade será dada pela média das notas finais (calculadas com a expressão acima) atribuidas por cada um dos membros da banca examinadora.}
-
-\examboardformtitle{Formulário de Aprovação da Banca Examinadora}
-
-\examboardformtitleTMP{Formulário de Aprovação do Relatório Parcial e Banca Examinadora}
-
-\examboardformdescTMP{Aprovo o Relatório Parcial e nominata da Banca Examinadora acima relacionada.}
-
-\examboardformdesc{Aprovo a nominata da Banca Examinadora acima relacionada.}
-
-\formsboardtitle{Banca Examinadora}
-
-\advisorapprovalformtitle{Formulário de Aprovação para Apresentação}
-
-\advisorapprovalformdesc{{\bf Parecer d\tccore@@ref{advisor}{article} Orientador\tccore@@ref{advisor}{narticle}}\footnote{Preenchimento Obrigatório}}
-
-%\advisorapprovalformdescB{Aprovo a versão final do trabalho submetido pel\tccore@@ref{student}{article} alun\tccore@@ref{student}{article} e considero \tccore@@ref{student}{article} mesm\tccore@@ref{student}{article} apt\tccore@@ref{student}{article} para apresentação.}
-\advisorapprovalformdescB{}
-
-\rectifyapprovalformtitle{Formulário de Aprovação das Correções}
-
-\rectifyapprovalformdesc{\begin{description}
-\item[Observação 1:] A nota final será a já atribuída pela Banca Examinadora no momento da Defesa. Caso a versão final corrigida do trabalho mais este formulário não sejam entregues até a data estipulada, o conceito do aluno passará a ser {\bf D}.
-\item[Observação 2:] A assinatura d\tccore@@ref{advisor}{article} orientador\tccore@@ref{advisor}{narticle} é obrigatória, entretanto a assinatura dos membros da banca só é necessária caso o(a) mesmo(a) tenha marcado a opção ''$\Box$ Revisarei o trabalho depois de corrigido'' no \emph{Formulário de Correções}.
-\end{description}}
-
-\rectifyapprovalTRformdesc{\begin{description}
-\item[Observação 1:] A nota final será a já atribuída pela Banca Examinadora via o \emph{\tcdef@forms@formsTRtitle}.
-Caso a versão final corrigida do trabalho mais este formulário não sejam entregues até a data estipulada, o conceito do aluno passará a ser {\bf D}.
-\item[Observação 2:] A assinatura d\tccore@@ref{advisor}{article} orientador\tccore@@ref{advisor}{narticle} é obrigatória,
-entretanto a assinatura dos membros da banca só é necessária caso o(a) mesmo(a) tenha marcado a opção ''$\Box$ Revisarei o trabalho depois de corrigido'' no \emph{\tcdef@forms@formsTRtitle}.
-\end{description}}
-
-
-\receiptformtitle{Recibo de entrega de cópia da versão final do Trabalho de Conclusão}
-
-\receiptformfootnote{Entregar a cada membro da banca juntamente com a cópia do trabalho final e após encaminhar ao \tcdef@cover@secretaryacronym .}
-
-\receiptformdesc{Declaro que encontra-se em minha posse cópia da versão final do Trabalho de Conclusão de Curso em \tcdef@cover@course\ d\tccore@@ref{student}{article} alun\tccore@@ref{student}{article} }
-
-
-\reviewformtitle{Formulário de Correções}
-\reviewformdesc{O texto submetido:
- \parbox[t]{.75\textwidth}{
- \begin{itemize}[tcc,nosep]
- \item[$\Box$] Está adequado, dispensando correções do texto.
- \item[$\Box$] Está adequado, sendo necessário correções, conforme a
- seguir (e anotações anexas).
- \begin{description}[tcc,noitemsep]
- \item[$\Box$] Ortográfica
- \item[$\Box$] Regras de Escrita
- \item[$\Box$] Equações
- \item[$\Box$] Resumo
- \item[$\Box$] Abstract
- \item[$\Box$] Índice
- \item[$\Box$] Introdução
- \item[$\Box$] Conclusões
- \item[$\Box$] Corpo do Trabalho
- \item[$\Box$] Resultados
- \item[$\Box$] Adicionar mais exemplos
- \item[$\Box$] Figuras
- \item[$\Box$] Tabelas
- \end{description}
- \item[$\Box$] Necessita ser revisto/re-escrito,\footnotemark[2] e:
- \begin{itemize}
- \item[$\Box$] basta a revisão final do texto pelo orientador,
- \item[$\Box$] revisarei o trabalho depois de corrigido.
- \end{itemize}
- \item[$\Box$] Outras considerações (se necessário): \\
- \begin{tabular}{p{0.7\textwidth}}
- ~\\\hline
- ~\\\hline
- ~\\\hline
- ~\\\hline
- \end{tabular}\\[-1mm]
- \end{itemize}}
-}
-
-
-\formsTRtitle{Formulário de Avaliação do Trabalho}
-\TRformfootnote{Entregar a cada revisor do texto, juntamente com uma cópia do trabalho.}
-
-\reviewformfootnoteB{Neste caso \tccore@@ref{student}{article} alun\tccore@@ref{student}{article} estará em EXAME e receberá conceito final C ou D, conforme revisão final do texto.}
-
-\reviewformfootnote{\tcdef@forms@formsfootnote\ Após a apresentação, retornar este à coordenação do TCC.}
-
-\formsrectifyOKdesc{Correções satisfatórias: \hspace*{1cm}$\Box$\ sim\hspace*{2cm}$\Box$\ não}
-
-\TCCpointsweight{0.35}{0.35}{0.3}
-\TCCpointslabel{Conteúdo}{Trab. Escrito}{Apresentação}
-
-\TCCIpointsweight{2.0}{2.0}{2.0}{1.0}
-\TCCIpointslabel{Tema}{Biblio.}{Plano Trab.}{Texto}
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-terms-en.tex b/macros/latex/contrib/ufrgscca/latex/ufrgscca-terms-en.tex
new file mode 100644
index 0000000000..04f3fa11d0
--- /dev/null
+++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-terms-en.tex
@@ -0,0 +1,103 @@
+%%%==============================================================================
+%% Copyright 2022-23 by Alceu Frigeri
+%%
+%% This work may be distributed and/or modified under the conditions of
+%%
+%% * The [LaTeX Project Public License](http://www.latex-project.org/lppl.txt),
+%% version 1.3c (or later), and/or
+%% * The [GNU Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.html),
+%% version 3 (or later)
+%%
+%% This work has the LPPL maintenance status *maintained*.
+%%
+%% The Current Maintainer of this work is Alceu Frigeri
+%%
+%% This is version {2.0} {2023/11/23}
+%%
+%% The list of files that compose this work can be found in the README.md file at
+%% https://ctan.org/pkg/ufrgscca
+%%
+%%%==============================================================================
+%% UFRGS stands for "Federal University of Rio Grande do Sul" in south Brazil
+%% EE stands for "Engineering School"
+%% CCA stands for "Control and Automation Engineering Course" (Portuguese acronym)
+%%%==============================================================================
+
+
+\SetHeadings{%
+ university = Federal University of Rio Grande do Sul ,
+ acronym = UFRGS ,
+ unit = Engineering School ,
+ secretary = SACAD/EE ,
+ course = Control and Automation Engineering ,
+ course.title = Bachelor in Control and Automation Engineering ,
+ department = {Dept. of Electrical Systems} ,
+}
+
+
+
+\ActivitySelect{course}
+\ActivitySet{CCA}{Control and Automation Engineering}
+\ActivitySetCoord{Nome Coordenador}
+\ActivitySetCoordTitle{Head of Course}
+
+\ActivitySelect{tccI}
+\ActivitySet{TCC~-~I}{Final Course Work I}
+\ActivitySetCoord{Nome Coordenador}
+\ActivitySetCoordTitle{Final Course Work Coordinator}
+
+\ActivitySelect{tccII}
+\ActivitySet{TCC~-~II}{Final Course Work II}
+\ActivitySetCoord{Nome Coordenador}
+\ActivitySetCoordTitle{Final Course Work Coordinator}
+
+\ActivitySelect{internship}
+\ActivitySet{Est.Ob.}{Estágio Supervisionado Obrigatório}
+\ActivitySetCoord{Nome Coordenador}
+\ActivitySetCoordTitle{Coordenador\ActivityCoord[internship]{narticle} da Atividade de Ensino de\newline Estágio Supervisionado Obrigatório}
+
+
+
+\SetTerms{%
+ title.tcc = Completions's Course Work ,
+ title.tccI = Completions's Course Work I ,
+ title.tccII = Completions's Course Work II ,
+}
+
+
+\SetLabels{%
+ advisor = Advisor ,
+ advisors = Advisors ,
+ advisor.gen = Advisor ,
+ advisor.email = Advisor's Email ,
+ coadvisor = Co-advisor ,
+ coadvisor.gen = Co-advisor ,
+ coadvisor.email = Co-advisor's Email ,
+ reviewer.base = Reviewer ,
+ reviewer = Reviewer ,
+ tutor = Tutor\DataFields{student.tutor}{narticle} ,
+ tutor.gen = Tutor(a) ,
+ tutor.email = Email d\DataFields{student.tutor}{article} Tutor\DataFields{student.tutor}{narticle} ,
+ supervisor = Supervisor\DataFields{student.supervisor}{narticle} ,
+ supervisor.gen = Supervisor(a) ,
+ student = Student ,
+ student.gen = Student ,
+ student.email = Student's Email ,
+ student.ID = Card N. ,
+ board = Exam's Board ,
+}
+
+\SetTerms{%
+ tccI.text-descpage = { This work's proposal was submitted to COMGRAD/\Activity[course]{acronym}\ -- \UseHeading{acronym}\
+ as part of the requirements to obtain the title of \emph{\UseHeading{course.title}.}
+ } ,
+ tccI.text-approvalpage = { This work's proposal was considered adequate to finish the \emph{\Activity[tccI]{name}} and approved, in it's final form, by the
+ \studentCoadvCase{Advisors}{Advisor} and Exam's Board below. } ,
+ tccII.text-descpage = { This work was submitted to COMGRAD/\Activity[course]{acronym}\ -- \UseHeading{acronym}\
+ as part of the requirements to obtain the title of \emph{\UseHeading{course.title}.}
+ } ,
+ tccII.text-approvalpage = { This work was considered adequate to finish the \emph{\Activity[tccII]{name}} and approved, in it's final form, by the
+ \studentCoadvCase{Advisors}{Advisor} and Exam's Board below.
+ } ,
+}
+
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-terms-ptBR.tex b/macros/latex/contrib/ufrgscca/latex/ufrgscca-terms-ptBR.tex
new file mode 100644
index 0000000000..187a58ebf0
--- /dev/null
+++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-terms-ptBR.tex
@@ -0,0 +1,267 @@
+%%%==============================================================================
+%% Copyright 2022-23 by Alceu Frigeri
+%%
+%% This work may be distributed and/or modified under the conditions of
+%%
+%% * The [LaTeX Project Public License](http://www.latex-project.org/lppl.txt),
+%% version 1.3c (or later), and/or
+%% * The [GNU Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.html),
+%% version 3 (or later)
+%%
+%% This work has the LPPL maintenance status *maintained*.
+%%
+%% The Current Maintainer of this work is Alceu Frigeri
+%%
+%% This is version {2.0} {2023/11/23}
+%%
+%% The list of files that compose this work can be found in the README.md file at
+%% https://ctan.org/pkg/ufrgscca
+%%
+%%%==============================================================================
+%% UFRGS stands for "Federal University of Rio Grande do Sul" in south Brazil
+%% EE stands for "Engineering School"
+%% CCA stands for "Control and Automation Engineering Course" (Portuguese acronym)
+%%%==============================================================================
+
+
+\location{Porto~Alegre}{RS}
+
+\SetHeadings{%
+ university = Universidade Federal do Rio Grande do Sul ,
+ acronym = UFRGS ,
+ unit = Escola de Engenharia ,
+ secretary = SACAD/EE ,
+ course = Engenharia de Controle e Automação ,
+ course.title = Bacharel em Engenharia de Controle e Automação ,
+ ppc.comgrad = {COMISSÃO DE GRADUAÇÃO - COMGRAD/CCA} ,
+ ppc.nde = {NÚCLEO DOCENTE ESTRUTURANTE - NDE/CCA} ,
+ ppc.course = {DO CURSO EM ENGENHARIA DE CONTROLE E AUTOMAÇÃO} ,
+ department = {Depto. de Sistemas Elétricos de Automação e Energia} ,
+}
+
+
+
+\ActivitySelect{course}
+\ActivitySet{CCA}{Eng. de Controle e Automação}
+\ActivitySetCoord{Nome Coordenador}
+\ActivitySetCoordTitle{Coordenador\ActivityCoord[course]{narticle} de Curso}
+
+\ActivitySelect{tccI}
+\ActivitySet{TCC~-~I}{Trabalho de Conclusão de Curso CCA - I}
+\ActivitySetCoord{Nome Coordenador}
+\ActivitySetCoordTitle{Coordenador\ActivityCoord[tccI]{narticle} da Atividade de Ensino de\break Trabalho de Conclusão de Curso}
+
+\ActivitySelect{tccII}
+\ActivitySet{TCC~-~II}{Trabalho de Conclusão de Curso CCA - II}
+\ActivitySetCoord{Nome Coordenador}
+\ActivitySetCoordTitle{Coordenador\ActivityCoord[tccII]{narticle} da Atividade de Ensino de\break Trabalho de Conclusão de Curso}
+
+\ActivitySelect{internship}
+\ActivitySet{Est.Ob.}{Estágio Supervisionado Obrigatório}
+\ActivitySetCoord{Nome Coordenador}
+\ActivitySetCoordTitle{Coordenador\ActivityCoord[internship]{narticle} da Atividade de Ensino de\newline Estágio Supervisionado Obrigatório}
+
+\ActivitySelect{internship}
+\ActivitySet{Est.Ob.}{Estágio Supervisionado Não Obrigatório}
+\ActivitySetCoord{Nome Coordenador}
+\ActivitySetCoordTitle{Coordenador\ActivityCoord[internship]{narticle} da Atividade de Ensino de\newline Estágio Supervisionado Não Obrigatório}
+
+
+\SetTerms{%
+ title.tcc = Trabalho de Conclusão de Curso ,
+ title.tccI = Trabalho de Conclusão de Curso I ,
+ title.tccII = Trabalho de Conclusão de Curso II ,
+ title.internship = Estágio Supervisionado Obrigatório ,
+ %
+ title.calendar = {Calendário - \UseTerm{semester}} ,
+ title.requestform = Formulário de Requerimento de Matrícula ,
+ title.coadvisorform = Requerimento de Autorização de Coorientação ,
+ title.boardapproval = Formulário de Indicação da Banca Examinadora ,
+ title.advisorsapproval-I = Formulário de Aprovação para Avaliação ,
+ title.advisorsapproval-II = Formulário de Aprovação para Apresentação ,
+ title.receipts = Recibo de entrega de cópia da versão final do Trabalho de Conclusão ,
+ title.reviewersform = Formulário de Avaliação ,
+ title.correctionsform = Formulário de Correções ,
+ title.rectifyapproval = Formulário de Aprovação das Correções ,
+ title.internsupervisorform = Formulário de Avaliação do Supervisor (Pela Empresa) ,
+ title.interntutorform = Formulário de Avaliação do Tutor e Coordenador ,
+ %
+ %footnote.reviewersform
+ footnote.reviewersform = {Entregar a cada membro da banca juntamente com a cópia do trabalho.} , %%% TCC I / II
+ footnote.receipts = {Entregar a cada membro da banca juntamente com a cópia do trabalho final e após encaminhar à coordenação de TCC.} , %%% TCC II
+ footnote.correctionsform = {Entregar a cada membro da banca juntamente com a cópia do trabalho. Após apresentação, retornar este à coordenação de TCC.} ,%%% TCC II
+ %
+ footnote.supervisorsform = {Favor utilizar a seguinte grade discreta: \begin{enumerate*}[start=0]\item Sofrível \item Regular \item Bom \item Muito Bom \item Excelente \end{enumerate*}} ,
+ %
+ opening.requestform = { Ilm\ActivityCoord[course]{article}. Sr\ActivityCoord[course]{narticle}.\par
+ Coordenador\ActivityCoord[course]{narticle} da Comissão de Graduação do Curso em \Activity[course]{name}\ da \UseHeading{university}. } ,
+ localdate = {\UseConst{publ.city},\hspace{4mm} de \hspace{1.2cm} de 20\hspace{4mm}.} ,
+ %
+ %
+ %
+ %
+ footnote.requestform = { O resumo deve ser curto, i.e., não deve exceder este espaço. O texto deve ser escrito em parágrafo único,
+ e por se tratar de proposta, poderá utilizar tempo futuro e não necessita ter motivação ou justificativa.\break Deve conter:
+ \begin{enumerate*}[alpha)]
+ \item O QUE será feito - descrição e objetivos.
+ \item COMO será feito - metodologia.
+ \item Resultados esperados.
+ \end{enumerate*}%
+ } , %%% TCC I
+ desc.requestform = { \DataFields{student}{Article} alun\DataFields{student}{article} \DataFields{student}{name},
+ REGULARMENTE MATRICULAD\DataFields{student}{Article} neste período letivo no curso \emph{\Activity[course]{name}}, desta universidade,
+ portador\DataFields{student}{narticle} do cartão de identificação n$^o$ \DataFields{student}{ID},
+ vem por meio deste solicitar matrícula na atividade de ensino} ,
+ desc.coadvisorform = {\DataFields{student}{Article} alun\DataFields{student}{article} \DataFields{student}{name},
+ REGULARMENTE MATRICULAD\DataFields{student}{Article} na atividade de TCC neste período letivo,
+ vem por meio deste solicitar autorização para registro de coorientação de TCC, conforme justificativa abaixo.} ,
+ desc.rectifyapproval = { \begin{description}
+ \item[Observação 1:] Caso a versão final corrigida do trabalho, mais este formulário, não sejam entregues até a data estipulada, o conceito final passará a ser {\bf D}.
+ \item[Observação 2:] Caso as correções sejam satisfatórias, a nota final será a já atribuída pela Banca Examinadora.
+ \item[Observação 3:] A assinatura d\DataFields{student.advisor}{article} orientador\DataFields{student.advisor}{narticle} é obrigatória, entretanto a assinatura dos membros da banca só é necessária caso tenham marcado a opção ''$\Box$ Revisarei o trabalho depois de corrigido'' no \emph{\UseTerm{temp.formrefname}}.
+ \end{description}
+ } ,
+ desc.studentwork = {
+ \noindent\UseLabel{student}: {\bf \DataFields{student}{name}}\hfill \UseLabel{student.ID}: {\bf \DataFields{student}{ID}}\\%
+ \noindent\UseLabel{worktitle}: \DataFields{student}{worktitle} } ,
+ desc.studentwork.full = {\UseTerm{desc.studentwork}\\[2.5mm]\UseTerm{desc.advisor}} ,
+ desc.advisor = {\noindent\UseLabel{advisor}: \textbf{\DataFields{student.advisor}{name}}} ,
+ desc.coadvisor = {\noindent\UseLabel{coadvisor}: \textbf{\DataFields{student.advisor}{name}}} ,
+ desc.reviewer = {\noindent\UseLabel{reviewer}: \textbf{\DataFields{student.advisor}{name}}} ,
+ desc.student = {\noindent\UseLabel{student}: {\bf \DataFields{student}{name}}\hfill
+ \UseLabel{student.ID}: {\bf \DataFields{student}{ID}}} ,
+ desc.internshipperiod = {\noindent Período do Estágio: {\bf \DataFields{student.internship}{start}} até: {\bf \DataFields{student.internship}{end}}} ,
+ desc.supervisor = {\UseLabel{supervisor}: \textbf{\DataFields{student.supervisor}{name}} \hfill CREA: \textbf{\DataFields{student.supervisor}{register}}} ,
+ desc.sacad = {\noindent Ao\par\noindent SACAD da Escola de Engenharia} ,
+ corrections.ok = {Correções satisfatórias: \hspace*{1cm}$\Box$\ sim\hspace*{2cm}$\Box$\ não} ,
+}
+
+
+
+\SetTerms{%
+ tccI.text-descpage = { Proposta de Trabalho de Conclusão de Curso submetida à
+ COMGRAD/\Activity[course]{acronym}\ da \UseHeading{acronym}\ como parte dos requisitos para a
+ obtenção do título de \emph{\UseHeading{course.title}.}
+ } ,
+ tccI.text-approvalpage = { Esta Proposta de Trabalho de Conclusão de Curso foi julgada adequada para a
+ obtenção dos créditos da Atividade de \emph{\Activity[tccI]{name}} e aprovada em sua forma final
+ \studentCoadvCase{pelos Orientadores}{pel\DataFields{student.advisor}{article} Orientador\DataFields{student.advisor}{narticle}}
+ e Banca Examinadora abaixo.
+ } ,
+ tccII.text-descpage = { Trabalho de Conclusão de Curso submetido à
+ COMGRAD/\Activity[course]{acronym}\ da \UseHeading{acronym}\ como parte dos requisitos para a
+ obtenção do título de \emph{\UseHeading{course.title}.}
+ } ,
+ tccII.text-approvalpage = { Este Trabalho de Conclusão de Curso foi julgado adequado para a
+ obtenção dos créditos da Atividade de \emph{\Activity[tccII]{name}} e aprovado em sua forma final
+ \studentCoadvCase{pelos Orientadores}{pel\DataFields{student.advisor}{article}
+ Orientador\DataFields{student.advisor}{narticle}} e Banca Examinadora abaixo.
+ } ,
+}
+
+
+
+
+%\SetTerms{%
+%
+%}
+
+
+\SetLabels{%
+ advisor = Orientador\DataFields{student.advisor}{narticle} ,
+ advisors = Orientadores ,
+ advisor.gen = Orientador(a) ,
+ advisor.email = Email d\DataFields{student.advisor}{article} Orientador\DataFields{student.advisor}{narticle} ,
+ coadvisor = Coorientador\DataFields{student.coadvisor}{narticle} ,
+ coadvisor.gen = Coorientador(a) ,
+ coadvisor.email = Email d\DataFields{student.coadvisor}{article} Coorientador\DataFields{student.coadvisor}{narticle} ,
+ reviewer.base = Avaliador ,
+ reviewer = Avaliador\DataFields{student.reviewer}{narticle} ,
+ altreviewer = Suplente ,
+ altreviewer.sig = Avaliador\DataFields{student.altreviewer}{narticle} ,
+ tutor = Tutor\DataFields{student.tutor}{narticle} ,
+ tutor.gen = Tutor(a) ,
+ tutor.email = Email d\DataFields{student.tutor}{article} Tutor\DataFields{student.tutor}{narticle} ,
+ supervisor = Supervisor\DataFields{student.supervisor}{narticle} ,
+ supervisor.gen = Supervisor(a) ,
+ student = Alun\DataFields{student}{article} ,
+ student.gen = Aluno(a) ,
+ student.email = Email d\DataFields{student}{article} Alun\DataFields{student}{article} ,
+ student.ID = Cartão ,
+ signature.gen = Assinatura ,
+ signature.student = Assinatura\ \ d\DataFields{student}{article}\ \ Alun\DataFields{student}{article} ,
+ signature.student.gen = Assinatura\ \ do(a)\ \ Aluno(a) ,
+ signature.advisor = Assinatura\ \ d\DataFields{student.advisor}{article}\ \ Orientador\DataFields{student.advisor}{narticle} ,
+ signature.coadvisor = Assinatura\ \ d\DataFields{student.coadvisor}{article}\ \ Coorientador\DataFields{student.coadvisor}{narticle} ,
+ signature.reviewer = Assinatura\ \ d\DataFields{student.reviewer}{article}\ \ Avaliador\DataFields{student.reviewer}{narticle} ,
+ signature.board = Assinatura\ \ do\ \ Membro\ \ da\ \ Banca ,
+ signature.gen = Assinatura ,
+ signature.supervisor = Assinatura\ \ d\DataFields{student.supervisor}{article}\ \ Supervisor\DataFields{student.supervisor}{narticle} ,
+ signature.tutor = Assinatura\ \ d\DataFields{student.tutor}{article}\ \ Tutor\DataFields{student.tutor}{narticle} ,
+ signature.internshipcoord = Assinatura\ \ d\ActivityCoord[internship]{article}\ \ Coordenador\ActivityCoord[internship]{narticle} ,
+ worktitle = Título do Trabalho ,
+ worktitle.temp = Título Provisório ,
+ email = Email ,
+ phone = ramal ,
+ board = Banca Examinadora ,
+ board.member = Membro da Banca ,
+ agree = De Acordo ,
+ Nproc = SEI ,
+ remarks = remarks ,
+ boardtime.gen = Horário ,
+}
+
+\SetLabels{%
+ TCC-I.pointA = {Tema} ,
+ TCC-I.pointB = {Biblio.} ,
+ TCC-I.pointC = {Plano Trab.} ,
+ TCC-I.pointD = {Texto} ,
+ TCC-II.pointA = {Conteúdo} ,
+ TCC-II.pointB = {Trab. Escrito} ,
+ TCC-II.pointC = {Apresentação} ,
+ Ngrade = {Nota} ,
+ grade = {Conceito} ,
+}
+
+\SetConsts{%
+ TCC-I.weightA = {2} ,
+ TCC-I.weightB = {2} ,
+ TCC-I.weightC = {2} ,
+ TCC-I.weightD = {1} ,
+ TCC-II.weightA = {0.35} ,
+ TCC-II.weightB = {0.35} ,
+ TCC-II.weightC = {0.3} ,
+ NgradeA = {9.0} ,
+ NgradeB = {7.5} ,
+ NgradeC = {6.0} ,
+}
+
+
+
+\SetConsts{%
+ report.tabA = {32mm} ,
+ report.tabA* = {42mm} ,
+ report.tabB = {42mm} ,
+ report.tabB* = {62mm} ,
+ report.tabC = {15mm} ,
+ report.tabD = {15mm} ,
+ report.tabE = {15mm} ,
+ report.tabEx = {15mm} ,
+ report.tabF = {8mm} ,
+ report.tabG = {12mm} ,
+}
+
+\SetConsts{%
+ board.tabA = {38mm} ,
+ board.tabB = {38mm} ,
+ board.tabC = {60mm} ,
+ board.tabD = {13mm} ,
+}
+
+\SetConsts{%
+ cover.winwidth = {95mm} ,
+ cover.winheight = {64mm} ,
+ cover.winvoffset = {112mm} ,
+ form.winvoffset = {24mm} ,
+}
+
diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca.cls b/macros/latex/contrib/ufrgscca/latex/ufrgscca.cls
index 53c6d33447..dd87d1ea35 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 1.12 (2023/09/23)
+%% This is version {2.0} {2023/11/23}
%%
%% The list of files that compose this work can be found in the README.md file at
%% https://ctan.org/pkg/ufrgscca
@@ -23,15 +23,49 @@
%% CCA stands for "Control and Automation Engineering Course" (Portuguese acronym)
%%%==============================================================================
\NeedsTeXFormat{LaTeX2e}[2022/06/01]
-\RequirePackage{expl3}
-\def\tc@tmp@packname{ufrgscca}
-\def\tc@tmp@altpackname{ufrgscca}
-\def\tc@tmp@packdesc{UFRGS/CCA class}
-\def\tc@tmp@packdate{2023/09/23}
-\def\tc@tmp@packversion{1.12}
-\let\@exp\expandafter
-\@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion}
-\@exp\@exp\@exp\ProvidesPackage\@exp\@exp\@exp{\@exp\tc@tmp@packname\@exp}\@exp[\tc@tmp@packdate\space v\tc@tmp@packversion\space\tc@tmp@packdesc]
+
+
+\ProvidesExplClass
+ {ufrgscca}
+ {2023/11/23}
+ {2.0}
+ {UFRGS/CCA class}
+
+
+%%%%%%%
+%%%
+%%% Just an attempt of having my packages info in a regular way
+%%% Idea being: { <pck-name> / pkg info } for each and all.
+%%%
+%%%%%%%
+\keys_define:nn { ufrgscca / pkg info}
+ {
+ name .code:n = {ufrgscca} ,
+ prefix .code:n = {ufrgscca} ,
+ date .code:n = {2023/11/23},
+ version .code:n = {2.0} ,
+ description .code:n = {UFRGS/CCA~a~report~based~class~bundle}
+ }
+\cs_if_exist:NF \__codedesc_pkg_info:nn
+ {
+ \cs_new_protected:Npn \__codedesc_pkg_info:nn #1#2
+ { \keys_set:nn {#1 / pkg info}{#2} }
+ }
+\cs_if_exist:NF \PkgInfo
+ { \NewDocumentCommand \PkgInfo {mm} { \keys_set:nn {#1 / pkg info}{#2} } }
+\cs_if_exist:NF \PkgDescription
+ {
+ \NewDocumentCommand \PkgDescription {m}
+ {
+ \noindent Package~ \textbf{\PkgInfo{#1}{name}}~Version:~\PkgInfo{#1}{version}~ -~ \PkgInfo{#1}{date}\par \emph{\PkgInfo{#1}{description}}~\par
+ }
+ }
+%%%%%%%
+%%% End of cut-n-paste
+%%%%%%%
+
+
+
\RequirePackage{etex}
@@ -40,137 +74,226 @@
\RequirePackage[T1]{fontenc}
\RequirePackage[utf8]{inputenc}
+%%%%%%%%%%%%%%%%%%%%%%
+%%%
+%%% TODO: to be decided, where to leave that !!
+%%% general purpose _propeties !!
+%%%
+%%%%%%%%%%%%%%%%%%%%%%
+
+\prop_new:N \l__ufrgscca_terms_prop
+
+\NewDocumentCommand{\SetHeadings}{m}
+ {
+ \prop_put_from_keyval:Nn \l__ufrgscca_terms_prop {#1}
+ }
+
+ %%
+ %% No protection, so it can be used in a fully expandable context (like \MakeUppercase)
+\cs_new:Npn \UseHeading #1
+ { \prop_item:Nn \l__ufrgscca_terms_prop {#1} }
+
+
+%\prop_new:N \l__ufrgscca_terms_prop
+
+\NewDocumentCommand{\SetTerms}{+m}
+ {
+ \prop_put_from_keyval:Nn \l__ufrgscca_terms_prop {#1}
+ }
+
+ %%
+ %% No protection, so it can be used in a fully expandable context (like \MakeUppercase)
+\cs_new:Npn \UseTerm #1
+ { \prop_item:Nn \l__ufrgscca_terms_prop {#1} }
+
+\cs_new_protected:Npn \TermCase #1#2#3
+ {
+ \prop_if_in:NnTF \l__ufrgscca_terms_prop {#1} {#2} {#3}
+ }
+
+%\prop_new:N \l__ufrgscca_labels_prop
+
+
+
+\NewDocumentCommand{\SetLabels}{m}
+ {
+ \prop_put_from_keyval:Nn \l__ufrgscca_terms_prop {#1}
+ }
+
+ %%
+ %% No protection, so it can be used in a fully expandable context (like \MakeUppercase)
+\cs_new:Npn \UseLabel #1
+ { \prop_item:Nn \l__ufrgscca_terms_prop {#1} }
+
+
+\prop_new:N \l__ufrgscca_const_prop
+
+\NewDocumentCommand{\SetConsts}{m}
+ {
+ \prop_put_from_keyval:Nn \l__ufrgscca_const_prop {#1}
+ }
+
+\cs_generate_variant:Nn \prop_item:Nn {Ne}
+ %%
+ %% No protection, so it can be used in a fully expandable context (like \MakeUppercase)
+\cs_new:Npn \UseConst #1
+ { \prop_item:Ne \l__ufrgscca_const_prop {#1} }
+
+
+\bool_new:N \l__ufrgscca_repeatfields_bool
+\bool_new:N \l__ufrgscca_timesroman_bool
+\bool_new:N \l__ufrgscca_nolocal_bool
%==============================================================================
% Declaração de opções
%==============================================================================
-\DeclareKeys[tc]{
- tocdepth.usage = load,
- tocdepth.code = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-abnt}},
- secdepth.usage = load,
- secdepth.code = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-abnt}},
-
- english.usage = load,
- english.code = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-abnt}\OptionNotUsed},
- relnum.usage = load,
- relnum.code = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-abnt}\PassOptionsToPackage{\CurrentOption}{ufrgscca-lists}\OptionNotUsed},
-
- pretextontoc.usage = load,
- pretextontoc.code = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-abnt}},
- timesroman.usage = load,
- timesroman.if = tcif@timesroman,
- yearsonly.usage = load,
- yearsonly.code = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-abnt}},
-
- oneside.usage = load,
- oneside.code = {\AtEndOfClass{\@twosidefalse}\OptionNotUsed},
- strict-abnt.usage = load,
- strict-abnt.code = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-abnt}},
- repeatfields.usage = load,
- repeatfields.code = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-abnt}},
- chapternopagenum.usage = load,
- chapternopagenum.code = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-abnt}},
-
- nomicrotype.usage = load,
- nomicrotype.code = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-abnt}},
-
- showframes.usage = load,
- showframes.code = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-abnt}},
- showlabes.usage = load,
- showlabes.code = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-abnt}},
-
- xlists.usage = load,
- xlists.if = tc@xlists,
- xpacks.usage = load,
- xpacks.if = tc@xpacks,
-
- nolocal.usage = load,
- nolocal.if = tcif@nolocal,
-
- nofontwarning.usage = load,
- nofontwarning.if = @nofontwarning,
-
- report.usage = load,
- report.code = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-cover}},
- internship.usage = load,
- internship.code = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-cover}},
- nonrequired.usage = load,
- nonrequired.code = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-cover}},
-
- texlive.usage = load,
- texlive.if = tcif@texlive,
- overleaf.usage = load,
- overleaf.if = tcif@overleaf,
- miktex.usage = load,
- miktex.if = tcif@miktex,
-
- article.usage = load,
- article.if = tcif@article,
-
- nogeometry.usage = load,
- nogeometry.if = tcif@nogeometry,
-}
-
-\DeclareUnknownKeyHandler[tc]{\PassOptionsToClass{\CurrentOption}{report}}
-\ProcessKeyOptions[tc]\relax
-
-\iftcif@timesroman
- \RequirePackage[english,brazilian]{babel}% babel has to be loaded BEFORE newtx*
+\keys_define:nn { ufrgscca }
+ {
+ tocdepth .usage:n = load,
+ tocdepth .code:n = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-abnt}},
+ secdepth .usage:n = load,
+ secdepth .code:n = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-abnt}},
+
+% english .usage:n = load,
+% english .code:n = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-abnt}\OptionNotUsed},
+
+ english .usage:n = load ,
+ english .bool_set:N = \l__ufrgscca_english_bool ,
+
+ relnum .usage:n = load,
+ relnum .code:n = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-abnt}\PassOptionsToPackage{\CurrentOption}{ufrgscca-lists}\OptionNotUsed},
+
+ pretextontoc .usage:n = load,
+ pretextontoc .code:n = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-abnt}},
+ timesroman .usage:n = load,
+ timesroman .bool_set:N = \l__ufrgscca_timesroman_bool,
+ yearsonly .usage:n = load,
+ yearsonly .code:n = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-abnt}},
+
+ oneside .usage:n = load,
+ oneside .code:n = {\AtEndOfClass{\@twosidefalse}\OptionNotUsed},
+ strict-abnt .usage:n = load,
+ strict-abnt .code:n = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-abnt}},
+ repeatfields .usage:n = load,
+ repeatfields .code:n = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-abnt}},
+ chapternopagenum .usage:n = load,
+ chapternopagenum .code:n = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-abnt}},
+
+ nomicrotype .usage:n = load,
+ nomicrotype .code:n = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-abnt}},
+
+ showframes .usage:n = load,
+ showframes .code:n = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-abnt}},
+ showlabes .usage:n = load,
+ showlabes .code:n = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-abnt}},
+
+ xlists .usage:n = load,
+ xlists .bool_set:N = \l__ufrgscca_xlists_bool,
+ xpacks .usage:n = load,
+ xpacks .bool_set:N = \l__ufrgscca_xpacks_bool,
+
+ nolocal .usage:n = load,
+ nolocal .bool_set:N = \l__ufrgscca_nolocal_bool,
+
+ nofontwarning .usage:n = load,
+ nofontwarning .bool_set:N = \l__ufrgscca_nofontwarning_bool,
+
+ report .usage:n = load,
+ report .code:n = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-cover}},
+ internship .usage:n = load,
+ internship .code:n = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-cover}},
+ nonrequired .usage:n = load,
+ nonrequired .code:n = {\PassOptionsToPackage{\CurrentOption}{ufrgscca-cover}},
+
+ texlive .usage:n = load,
+ texlive .bool_set:N = \l__ufrgscca_texlive_bool,
+ overleaf .usage:n = load,
+ overleaf .bool_set:N = \l__ufrgscca_overleaf_bool,
+ miktex .usage:n = load,
+ miktex .bool_set:N = \l__ufrgscca_miktex_bool,
+
+ article .usage:n = load,
+ article .bool_set:N = \l__ufrgscca_article_bool,
+
+ nogeometry .usage:n = load,
+ nogeometry .bool_set:N = \l__ufrgscca_nogeometry_bool,
+
+ oldrenews .usage:n = load,
+ oldrenews .bool_set:N = \l__ufrgscca_oldrenews_bool,
+
+ unknown .code:n = {\PassOptionsToClass{\CurrentOption}{report}},
+ }
+\ProcessKeyOptions[ufrgscca]\relax
+
+
+
+\bool_if:NTF \l__ufrgscca_timesroman_bool
+ {
+ \bool_if:NTF \l__ufrgscca_english_bool
+ {
+ \RequirePackage[brazilian,english]{babel}% babel has to be loaded BEFORE newtx*
+ }
+ {
+ \RequirePackage[english,brazilian]{babel}% babel has to be loaded BEFORE newtx*
+ }
\RequirePackage{mathptmx}
-% \RequirePackage[scale=1.05,looser]{newtxtext}%
-% \RequirePackage[scale=1.05]{newtxmath}%
-% \PackageWarning{ufrgscca}{Fonts newtxtext and newtxmath loaded. Those are free 'implementantion/interpletation' of the proprietary Times Roman (by Adobe) and Times New Roman (by Microsoft)}
-% \PackageWarning{ufrgscca}{newtxtext and newtxmath are based on URW Nimbus Roman with some extra math support. Again, those are not real Times Roman nor Times New Roman}
\PackageWarning{ufrgscca}{(obsolete) package mathptmx loaded. It loads a free 'implementantion/interpletation' of the proprietary Times Roman (by Adobe) and Times New Roman (by Microsoft)}
\PackageWarning{ufrgscca}{package microtype is suppressed, resulting in a subpar layout. Again, the “Roman” font used isn't a true Times Roman nor Times New Roman}
-
-\else
+ }
+ {
\RequirePackage{lmodern}%
-\fi
-
-\iftcif@article
+ }
+\bool_if:NTF \l__ufrgscca_article_bool
+ {
\LoadClass[12pt]{article}
-\else
+ }
+ {
\LoadClass[12pt,twoside,openright]{report}
-% \LoadClass[12pt]{report}
-\fi
-
-\iftcif@miktex
-% \def\BabelCaseHack{}
- \ifcsdef{miktexHack}{\miktexHack}{}
-\fi
-
-\iftcif@overleaf
- \ifcsdef{overleafHack}{\overleafHack}{}
-\fi
-
-\iftcif@texlive
- \ifcsdef{texliveHack}{\texliveHack}{}
-\fi
+ }
+
+\bool_if:NT \l__ufrgscca_miktex_bool
+ {
+ \ifcsdef{miktexHack}{\miktexHack}{}
+ }
+\bool_if:NT \l__ufrgscca_overleaf_bool
+ {
+ \ifcsdef{overleafHack}{\overleafHack}{}
+ }
+\bool_if:NT \l__ufrgscca_texlive_bool
+ {
+ \ifcsdef{texliveHack}{\texliveHack}{}
+ }
%%%%%%%%%%%%%%%%%%%%%
%%% Packages Loading
%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{silence}%
-\if@nofontwarning%
+
+\bool_if:NT \l__ufrgscca_nofontwarning_bool
+ {
\WarningFilter{latexfont}{Font shape}%
\WarningFilter{latexfont}{Size substitutions with differences}%
\WarningFilter{latexfont}{Some font shapes were not available}%
-\fi%
+ }
\RequirePackage{ufrgscca-abnt}
-\iftc@xlists\RequirePackage{ufrgscca-lists}\fi
+\bool_if:NT \l__ufrgscca_xlists_bool
+ {
+ \RequirePackage{ufrgscca-lists}
+ }
+
-\RequirePackage{ufrgscca-gen}
\RequirePackage{ufrgscca-cover}
\RequirePackage{ufrgscca-core}
-\iftc@xpacks
+\bool_if:NT \l__ufrgscca_xpacks_bool
+ {
+ \ExplSyntaxOff
\RequirePackage{relsize}
\RequirePackage{keyval,graphicx}
\RequirePackage{mathtools}
@@ -193,31 +316,54 @@
\usetikzlibrary{shadows}%
\usetikzlibrary{babel}
\RequirePackage{steinmetz}%
-\fi
+ \ExplSyntaxOn
+ }
+
+
+
\WarningFilter{hyperref}{Option `pdftex' has already}
-\RequirePackage[hidelinks,hypertexnames=false]{hyperref}%
+\RequirePackage[hidelinks,hypertexnames=false]{hyperref}
+
%%
%% A few (hyperref related) commands
%%
-\NewDocumentCommand{\autonameref}{O{, }mO{\space}}{\autoref{#2}#1\nameref{#2}#3}
+\NewDocumentCommand{\autonameref}{O{,\space}mO{}}{\autoref{#2}#1\nameref{#2}#3}
\gdef\annexref#1{\hyperref[#1]{\defannexname\ \ref*{#1}}}
-\NewDocumentCommand{\autoannexref}{O{, }mO{\space}}{\annexref{#2}#1\nameref{#2}#3}
+\NewDocumentCommand{\autoannexref}{O{,~ }mO{}}{\annexref{#2}#1\nameref{#2}#3}
+
+
+\NewActivity{course} % yeah, CCA as an activity...
+\NewActivity{tccI}
+\NewActivity{tccII}
+\NewActivity{internship}
+\NewActivity{internship-opt}
+
+
+
+\ExplSyntaxOff
+ \input{ufrgscca-terms-ptBR.tex}
+ \input{ufrgscca-cover-ptBR.tex}
+\ExplSyntaxOn
+
+
+\bool_if:NT \l__ufrgscca_english_bool
+ {
+ \AtBeginDocument{\input{ufrgscca-terms-en.tex}}
+ }
-\iftcif@english%
- \input{ufrgscca-en-core.def}%
-\else%
- \input{ufrgscca-ptBR-core.def}%
-\fi%
+\bool_if:NF \l__ufrgscca_nolocal_bool
+ {
+ \ExplSyntaxOff
+ \IfFileExists{local.tex}
+ { \AtBeginDocument{ \input{local.tex} } }
+ {}%
+ \ExplSyntaxOn
+ }
-\iftcif@nolocal%
-\else%
- \IfFileExists{local.tex}{\input{local.tex}}{}%
- \tccore@emptyfields%
-\fi