This tutorial will guide you through creating a technical report using the TeX-UPmethodology LaTeX packages with the UTBM/CIAD style extension. This template is designed for writing structured documents with:
Before starting, ensure you have:
Create a new directory for your report. Inside, create the following file structure:
my-report/
├── myreport.tex (main LaTeX file)
├── references.bib (bibliography file)
├── images/ (folder for your figures)
│ └── (your images here)
Create a file named myreport.tex with the following minimal structure:
\documentclass[english]{utbmciadreport} \begin{document} \chapter{Introduction} This is my first report. \end{document}
Let's break down what this does:
\documentclass[english]{utbmciadreport} loads the UTBM/CIAD report class with English languageAdd document metadata before \begin{document}. This information appears on the front page and in document summaries.
\documentclass[english]{utbmciadreport} % Document identification \declaredocument{My Project}{Technical Report}{TR-2026-001} % Version information \initialversion{1.0}{2024/01/15}{First draft}{\upmrestricted} \begin{document} ... \end{document}
Explanation of commands:
\declaredocument{project}{document name}{reference}: Sets the project name, document title, and reference number\initialversion{version}{date}{description}{status}: Registers the first version of your document, with its version number, its publication date, a brief description, and the status (see the table below).The commands in the following table represent the standard statuses of a document.
| Command | Meaning |
|---|---|
\upmrestricted |
Restricted access (confidential or only authors, not yet for broad distribution) |
\upmvalidable |
The document is ready to be sent to validators |
\upmvalidated |
The document has been validated but not yet published |
\upmpublic |
The document is published and publicly accessible |
The commands below return the status string associated with a given version or the latest version.
| Command | Returns |
|---|---|
\upmstatusversion{version} |
The status of the specified version number. |
\theupmstatus |
The status of the last (current) version. |
Example:
\theupmstatus would expand to e.g., \upmrestricted, \upmvalidable, \upmvalidated, or \upmpublic depending on the last registered version.
You could also keep an history of the changes applied to your document by using one of the following commands:
| Command | Description |
|---|---|
\initialversion{version}{date}{description}{status} |
Registers the initial version with the given status. |
\incversion{date}{description}{status} |
Registers a new major version (increments the major number) with the given status. |
\incsubversion{date}{description}{status} |
Registers a new minor version (increments the minor number) with the given status. |
\updatesversion{version}{date}{description}{status} |
General‑purpose command to register any version with a status. |
If the document's status is set to \upmrestricted, a "CONFIDENTIAL" watermark is automatically added to every page. You can customise its colour and scale using:
\definecolor{watermarkcolor}{...} \Setwatermarksize{scale} (e.g., \Setwatermarksize{0.5})Still in the preamble (before \begin{document}), add the people involved:
\documentclass[english]{utbmciadreport} % Document identification \declaredocument{AI Research Project}{Technical Report}{TR-2024-001} % Version information \initialversion{1.0}{2024/01/15}{First draft}{\upmrestricted} % Authors (people who write the document) \addauthor{john.doe@example.com}{John}{Doe} \addauthor{jane.smith@example.com}{Jane}{Smith} % Validators (people who approve the document) \addvalidator{bob.wilson@example.com}{Bob}{Wilson} % Informed people (people who receive the document for information) \addinformed{alice.brown@example.com}{Alice}{Brown} \addinformed{carol.white@example.com}{Carol}{White} \begin{document} ... \end{document}
Note: The starred version \addauthor*{...}{...}{...}{comment} allows adding a comment (e.g., "Project Leader").
To add a single person with multiple roles (e.g., both author and validator, you could use the command: \addauthorvalidator. This command registers the same person simultaneously as an author and a validator. It saves you from calling \addauthor and \addvalidator separately.
All the functions for adding a person have the arguments [email]{firstname}{lastname} or [email]{firstname}{lastname}{comment}.
email (optional) – the person's email address.firstname (mandatory) – the first name.lastname (mandatory) – the last/family name.comment (only for starred version of the commands) – an additional comment (e.g., "Project Leader").Add the abstract and keywords to your document preamble:
... % Abstract and keywords \setdocabstract{This technical report presents the findings of the AI Research Project conducted during the first quarter of 2026. We demonstrate novel approaches to machine learning that improve efficiency by 30\%.} \setdockeywords{artificial intelligence, machine learning, technical report, UTBM} ...
Now let's build a complete document with standard sections:
\documentclass[english]{utbmciadreport} % === Document Information === \declaredocument{AI Research Project}{Technical Report}{TR-2024-001} % === Version History === \initialversion{1.0}{2024/01/15}{First draft}{draft} % === Authors === \addauthor{john.doe@example.com}{John}{Doe} \addauthor{jane.smith@example.com}{Jane}{Smith} % === Validators === \addvalidator{bob.wilson@example.com}{Bob}{Wilson} % === Informed People === \addinformed{alice.brown@example.com}{Alice}{Brown} \addinformed{carol.white@example.com}{Carol}{White} % === Abstract and Keywords === \setdocabstract{This technical report presents the findings of the AI Research Project conducted during the first quarter of 2026. We demonstrate novel approaches to machine learning that improve efficiency by 30\%.} \setdockeywords{artificial intelligence, machine learning, technical report, UTBM} \begin{document} \tableofcontents % Main content \chapter{Introduction} This chapter introduces the context of our research. Artificial intelligence has become a cornerstone of modern technology. \section{Problem Statement} The main challenge we address is the computational inefficiency of traditional machine learning algorithms. \section{Contributions} Our main contributions are: \begin{enumerate} \item A novel algorithm for efficient training \item An open-source implementation \item Experimental validation on real-world datasets \end{enumerate} % Back matter \bibliography{references} \listoffigures \listoftables \appendix %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \chapter{Technical Details} ... \end{document}
For writing the content of your report, you could use the commands that are explained in this section.
The template already defines a definition environment. You can use it as follows:
\begin{definition}{Name of the definition}{label} Text of the definition. \end{definition}
Example:
\begin{definition}{Multi-Agent System}{mas} A Multi-Agent System (MAS) is a system composed of multiple interacting intelligent agents. \end{definition}
To reference it later: Definition \ref{def:mas} (the label prefix def: is added automatically when you write the definition).
The command \defref{mas} may be used as an equivalent to \ref{def:mas}.
For page reference: \defpageref{mas} or \pageref{def:mas}.
If you need additional theorem‑like environments (theorem, lemma, corollary, etc.), you can declare them in the preamble:
\declareupmtheorem{mytheorem}{My Theorem}{List of my Theorems}{mythm}{mytheorem}{\textbf}
mytheorem (first argument) - the name of the LaTeX environment that is used in all commands.My Theorem (second argument) - the text to be displayed in the header of the theorem box.List of my Theorems (third argument) - the text to be used as the title of the "list of theorem" chapter.mythm (fourth argument) - the prefix to be automatically appended to the reference labels (similar to the def above for definitions).mytheorem (fifth argument) - name for the file containing the list of theorems.\textbf (sixth argument) - command that is used for formatting the source information associated to a theorem.Then use:
\begin{mytheorem}{Theorem of Everything}{everything} This is the theorem. \end{mytheorem}
You can also add a source as an optional argument:
\begin{mytheorem}{Theorem of Everything}{everything}[Galland et al., 2025] ... \end{mytheorem}
At the end of your document, you can list all theorems with \listofmytheorems.
Including figures in LaTeX always needs many commands (figure environment, caption, label, inclusion of the drawing, etc.). TeX-templates provides a macro for making all these things for you. So that, the simplest way to include a figure is with \mfigure:
\mfigure[ht]{width=0.8\linewidth}{myfigure}{Caption of the figure}{example}
Parameters:
[ht] – placement options (h=here, t=top, b=bottom, p=page of floats).{width=0.8\linewidth} – options passed to \includegraphics.{myfigure} – filename of the image (without extension, supports .pdf, .png, .jpg, etc.).{Caption...} – the figure caption.{example} – label (the prefix fig: is added automatically).Refer to the figure with \figref{example} or \ref{fig:example}, and its page with \figpageref{example} or \pageref{fig:example}.
You can also add a source text:
\mfigure[ht]{width=0.8\linewidth}{myfigure}{Caption}{example}[Source: From Smith et al.]
For figures including subfigures, use the mfigures environment:
\begin{mfigures}[ht]{Main caption}{main} \msubfigure{width=0.45\linewidth}{subfig1}{First subfigure} \hfill \msubfigure{width=0.45\linewidth}{subfig2}{Second subfigure} \end{mfigures}
This environment builds a big figure with caption Main caption and the label fig:main.
Then, you could add a subfigure with \msubfigure followed by the options to pass to \includegraphics, the filename of the drawing and the caption of the subfigure. This subfigure will be assigned automatically to a label with the value fig:main:IDX, where the prefix is the label of the enclosing figure, and IDX is replaced by the alphabetic index of the subfigure in the list of subfigures, i.e., a for the first, b for the second, c for the third, etc.
Use the mtable environment for floating tables with a caption:
\begin{mtable}[ht]{0.9\linewidth}{3}{|l|X|c|}{Comparison of methods}{comparison} \tabularheader{Method}{Description}{Accuracy} A & This is a long description that will wrap & 95\% \\ B & Another description & 88\% \\ \end{mtable}
Parameters:
[ht] – placement.{0.9\linewidth} – total width of the table.{3} – number of columns.{|l|X|c|} – column specification (l=left, r=right, c=center, X=flexible width, | = vertical line).{Comparison...} – caption.{comparison} – label (prefix tab: added automatically).\tabularheader – defines the header row (with background colour). The number of arguments for this command is the same as the number of columns of the table.You can add a source with \addsource{...} and a table note with \tablenote{...}.
For long tables spanning several pages, use mlongtabular (non‑floating). Example of a long table:
\begin{mlongtabular}[\linewidth]{3}{l|X|c}{Top title} \tabularheader{Col1}{Col2}{Col3}\\ Row 1 & data & value \\ Row 2 & more data & 42 \\ % ... many rows \end{mlongtable}
Parameters:
[\linewidth] – total width of the table.{3} – number of columns.{l|X|c} – column specification (l=left, r=right, c=center, X=flexible width, | = vertical line).{Top...} – title at the top of the table.The standard itemize, enumerate and description work as usual. But the template enhances them:
\begin{description} \item[Term 1] Definition 1. \item[Term 2] Definition 2. \end{description}
Example of result:
- Term 1: Definition 1.
- Term 2: Definition 2.
By default, the separator is :. You can change it globally or for a single environment by passing an optional argument:
\begin{description}[//] would use // as separator.
\begin{enumerate} \item[First point] Explanation of first point. \item[Second point] Explanation of second point. \end{enumerate}
Example of result:
- First point: Explanation of first point.
- First point: Explanation of second point.
You can also specify the numbering style:
\begin{enumerate}[1] % Arabic numerals \begin{enumerate}[i] % lower‑case Roman \begin{enumerate}[a] % lower‑case letters \begin{enumerate}[A] % upper‑case letters
Example of result with [i]:
i. First point: Explanation of first point.
ii. First point: Explanation of second point.
Example of result with [a]:
a. First point: Explanation of first point.
b. First point: Explanation of second point.
Example of result with [A]:
A. First point: Explanation of first point.
B. First point: Explanation of second point.
You can list items inline: \begin{inlineenumeration} \item first, \item second, \item third. \end{inlineenumeration} This continues the paragraph.
Example of result: You can list items inline: (i) first, (ii) second, (iii) third. This continues the paragraph.`
\textup{text} – superscript in text mode (e.g., 1\textup{st}).\textdown{text} – subscript in text mode.\emph{text} – emphasised (italic).\Emph{text} – very important (bold and coloured).\makename{first}{last} – formats a person's name (e.g., \makename{John}{Doe} → "John DOE").\drname{first}{last} – adds "Dr." prefix.\phdname{first}{last} – adds "Ph.D." prefix.The template predefines several useful math commands:
$\R$ % ℝ $\N$ % ℕ $\Z$ % ℤ $\Q$ % ℚ $\C$ % ℂ $\powerset{A}$ % 𝒫(A) $\sgn(x)$ % sign function
algorithm package)Load the algorithm package in your preamble:
\usepackage{algorithm} \usepackage{algorithmic}
Then use:
\begin{algorithm} \caption{My algorithm} \label{alg:myalgo} \begin{algorithmic}[1] \STATE $x \gets 0$ \WHILE{$x < 10$} \STATE $x \gets x+1$ \ENDWHILE \end{algorithmic} \end{algorithm}
The template provides colours for algorithm captions and borders; you can customise them with \colorlet{algorithmcaptionlabel}{blue}, etc.
For highlighting important text:
\begin{emphbox}{0.7\linewidth} This is an important statement. \end{emphbox}
For boxes with a title:
\begin{titleemphbox}{0.7\linewidth}{Important} Content. \end{titleemphbox}
There are three variants: titleemphbox, titleemphbox2, titleemphbox3 (different background colours).
Message boxes (caution, info, question) are also available:
\begin{upmcaution} Be careful about this. \end{upmcaution} \begin{upminfo} Useful information. \end{upminfo} \begin{upmquestion} What is the meaning of life? \end{upmquestion}
You can define a footnote once and reuse its reference number later:
Some text.\savefootnote{This is a footnote}{myfn} Later, you can refer to it again: \reffootnote{myfn}
The starred version \savefootnote* defines the footnote but does not print it at that location (useful for footnotes that appear only in later references).
Create references.bib in the same directory:
@article{goodfellow2014generative, title={Generative Adversarial Networks}, author={Goodfellow, Ian and Pouget-Abadie, Jean and Mirza, Mehdi and Xu, Bing and Warde-Farley, David and Ozair, Sherjil and Courville, Aaron and Bengio, Yoshua}, journal={arXiv preprint arXiv:1406.2661}, year={2014} } @inproceedings{he2016deep, title={Deep Residual Learning for Image Recognition}, author={He, Kaiming and Zhang, Xiangyu and Ren, Shaoqing and Sun, Jian}, booktitle={Proceedings of the IEEE conference on computer vision and pattern recognition}, pages={770--778}, year={2016} } @book{goodfellow2016deep, title={Deep Learning}, author={Goodfellow, Ian and Bengio, Yoshua and Courville, Aaron}, year={2016}, publisher={MIT Press} }
The template uses BibTeX. To cite works, use \cite{key}. The provided bibliography style formats citations according to the CIAD requirements.
If you have passed the class option natbib (it is the default), then the natbib package is included and provides a comprehensive set of citation commands for LaTeX. The two most essential ones are \citet and \citep.
\citet and \citep: The main commands for textual (in‑sentence) and parenthetical (in‑parentheses) citations, respectively. For example, \citet{jon90} produces "Jones et al. (1990)", while \citep{jon90} gives "(Jones et al., 1990)".\citet* and \citep*: prints the full author list instead of the abbreviated "et al." form.\citep{jon90,jam91} produces "(Jones et al., 1990; James et al., 1991)".Compile using the following sequence (in a terminal):
pdflatex myreport bibtex myreport pdflatex myreport pdflatex myreport
Why multiple compilations?
The easiest way to compile the document is to use AutoLaTeX. If you have it installed, open a terminal in the folder containing myreport.tex and run:
autolatex -f myreport
or
autolatex
AutoLaTeX will automatically run pdflatex the required number of times, process the bibliography (if any), and generate the final myreport.pdf.
You can modify the document class options to show/hide logos and elements:
% Hide CIAD logo, show all others \documentclass[english,nociadlogo]{utbmciadreport} % Hide document reference on front page \documentclass[english,nodocrefonfront]{utbmciadreport} % Show UT logo, hide UBFC logo \documentclass[english,utlogo,noubfclogo]{utbmciadreport} % Multiple options \documentclass[english,noutbmlogo,noubfclogo,docrefonfront]{utbmciadreport}
Available options:
| Option | Effect |
|---|---|
ciadlogo / nociadlogo |
Show/hide CIAD logo |
utbmlogo / noutbmlogo |
Show/hide UTBM logo |
ubfclogo / noubfclogo |
Show/hide UBFC logo |
utlogo / noutlogo |
Show/hide UT Network logo |
icartslogo / noicartslogo |
Show/hide iC ARTS logo |
docrefonfront / nodocrefonfront |
Show/hide document reference on front page |
docrefonback / nodocrefonback |
Show/hide document reference on back page |
contactonback / nocontactonback |
Show/hide contact information on back page |
To customize colors, add color redefinitions in your preamble:
\documentclass[english]{utbmciadreport} % Custom colors \definecolor{sectiontitlecolor}{RGB}{0,100,150} \colorlet{UTBMblue}{cyan!80!black} % Rest of your document...
You have now created a professional technical report using the UTBM/CIAD LaTeX template. The key features you've learned:
\declaredocument\initialversion, \inversion, \incsubversion\addauthor, \addvalidator, \addinformedFor more advanced features, refer to the full TeX-UPmethodology documentation, which covers additional environments like enumdescription, and more.