Classe ABNT com LaTeX (do zero)
Criação da estrutura
Antes de criar os arquivos e o template em si, é interessante estruturar o projeto em pastas. Um exemplo:
- ./figuras/
- ./template/
- ./conteudo/
- ./pretextual/
Dentro da pasta ./template
, vamos informar:
% -- Identificação do template:
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{./template/<nomeDoTemplate>}
% Classe base:
\LoadClass[a4paper,oneside,12pt]{article}
No momento de carregar essa classe com o comando \documentclass
, é importante informar o diretório.
\documentclass{./template/<nomeDoTemplate>}
Elementos Textuais
Formatação básica
A formatação básica compreende codificação, idioma, espaçamento, indentação de parágrafos, fonte e margens. No .cls
, utilizaremos \RequirePackage
em vez do comando \usepackage
(comumente utilizado no preâmbulo de um arquivo .tex
)
% -- Formatação básica:
\RequirePackage[utf8]{inputenc} % codificação
\RequirePackage[T1]{fontenc} % codificação
\RequirePackage[english,brazil]{babel} % idiomas (último: principal)
\RequirePackage{setspace} % pacote espaçamento
\onehalfspacing % espaçamento 1.5
\setlength{\parindent}{1.25cm} % indentação parágrafo
\setlength{\parskip}{0.2cm} % espaço parágrafos
\RequirePackage{indentfirst} % indenta o primeiro \par
\RequirePackage{times} % fonte: Times New Roman
\RequirePackage[
left=3cm,
top=3cm,
right=2cm,
bottom=2cm% margens
]{geometry} \RequirePackage[all,defaultlines=3]{nowidow} % reduz linhas órfãs
Títulos
Para customizar os títulos (seções, subseções), utilizaremos o pacote titlesec
. Quanto ao estilo, podemos utilizar:
\titleformat{\section}{<formato título>}{<formato num.>}{<espaço num./título>}{}
% e
\titlespacing{<título>}{<espaço esquerda>}{<espaço antes>}{<espaço após>}
% -- Títulos:
\RequirePackage{titlesec}
% Formato:
\titleformat{\section} % Seção
\bfseries\MakeUppercase}{\thesection}{0.5em}{}
{\titleformat{\subsection} % Subseção
\MakeUppercase}{\thesubsection}{0.5em}{}
{\titleformat{\subsubsection} % Sub-subseção
\bfseries}{\thesubsubsection}{0.5em}{}
{% Espaçamento (títulos):
\titlespacing{\section}{0pt}{12pt}{12pt}
\titlespacing{\subsection}{0pt}{12pt}{6pt}
\titlespacing{\subsubsection}{0pt}{21pt}{6pt}
Floats e legendas
No caso dos floats (figuras e tabelas), podemos carregar pacotes base e aqueles que eventualmente podemos precisar (e.g., longtable).
% -- Floats:
\RequirePackage{float} % posicionamento
\RequirePackage{graphicx} % figuras
\RequirePackage{booktabs} % linhas horizontais
\RequirePackage{multirow,multicol} % células mescladas
\RequirePackage{adjustbox} % ajuste ao texto
\RequirePackage{longtable} % tabela múlti-páginas
\RequirePackage[flushleft]{threeparttable} % notas tabulares
\RequirePackage{tabularx}
\renewcommand{\arraystretch}{1.5} % espaçamento tabelas
Se precisarmos criar colunas com tamanho especificado (estilo p{<medida>}
) mas alinhado ao centro ou à direita, o pacote array
é bem útil.
\RequirePackage{array} % novos estilos de coluna
% Coluna alinha ao centro (dimensão especificada):
\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}
% Coluna alinha à esquerda (dimensão especificada):
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}m{#1}}
% Coluna alinha à direita (dimensão especificada):
\newcolumntype{R}[1]{>{\raggedleft\arraybackslash}m{#1}}
Já as legendas, podemos configurar de maneira global, ou separadamente para figuras e tabelas. Dessa forma, podemos alterar o estilo da fonte dos termos Figura e Tabela; o separador; o tamanho da fonte e o espaço entre caption e figura/tabela.
% -- Legendas:
\RequirePackage{caption}
\captionsetup[figure]{labelfont=bf,labelsep=endash,size=small,skip=6pt}
\captionsetup[table]{labelfont=bf,labelsep=endash,size=small,skip=6pt}
Se necessário, podemos criar o ambiente quadro (segundo a ABTN, tabelas com todas as bordas verticais e horizontais são denominadas quadros).
% Definir um novo tipo de float chamado 'quadro'
\RequirePackage{newfloat}
% Definição do novo float "quadro"
\DeclareFloatingEnvironment[
fileext=lod,
listname={Lista de Quadros},
name=Quadro,
placement=htbp ]{quadro}
Lembremos de definir um estilo para a legenda do quadro:
\captionsetup[quadro]{labelfont=bf,labelsep=endash,size=small,skip=6pt}
Pacotes matemáticos
Aqui entram pacotes-base e uma fonte para elementos matemáticos.
% -- Pacotes matemáticos:
\RequirePackage{amsmath,amssymb,amsfonts} % base
\RequirePackage{mathptmx} % fonte matemática
URLs e hyperlinks
Antes de configurar URLs e hiperlinks é importante carregar um pacote para o uso de cores xcolor
. Assim, também é possível definir uma cor com base no código HTML ou RGB. Vejamos um exemplo com HTML:
\RequirePackage[dvipsnames]{xcolor} % pacote
\definecolor{indigo}{HTML}{3F00FF} % cor indigo (usar no comando \color)
Feito isso, podemos definir as configurações.
\RequirePackage[dvipsnames]{xcolor}
\RequirePackage{url}
\urlstyle{same}
\RequirePackage[hidelinks]{hyperref}
\hypersetup{
colorlinks=True,
citecolor=black,
linkcolor=black,
filecolor=black,
urlcolor=blue }
Citações
Para as citações e referências, vamos utilizar o pacote abntex2cite
.
% -- Citações e referências:
\RequirePackage[
alf,
abnt-repeated-title-omit=yes,
abnt-emphasize=bf,
abnt-etal-list=0
]{abntex2cite}\citebrackets()
\bibliographystyle{abntex2-alf}
% citação direta:
\newenvironment{cited}
\vspace{12pt}\hfill\begin{minipage}{12cm}}
{\end{minipage}\vspace{12pt}} {
Ao longo do texto, podemos utilizar algumas variações do comando \cite
.
Comando | Resultado |
---|---|
\cite{Oviedo2023} |
(Oviedo et al., 2023) |
\citeonline{Oviedo2023} |
Oviedo et al. (2023) |
\citeauthor{Oviedo2023} |
Oviedo et al. |
\citeyear{Oviedo2023} |
2023 |
Elementos pré-textuais
Antes de darmos início aos elementos pré-textuais, podemos criar variáveis de preâmbulos, novos comandos ou novos ambientes. Dessa forma, informações que tendem a repetir podem ser informadas uma única vez no preâmbulo. Assim, temos:
\makeatletter
\def \Titulo#1{\def\@Titulo{#1}}
\def \@Titulo {} % inicia vazio
\makeatother
Agora, informando no preâmbulo, podemos automatizar as informações de uma capa:
\begin{center}
% Pode-se adicionar uma logo com \includegraphics
\MakeUppercase{\textbf{Universidade}}\\
\MakeUppercase{Departamento}\\
Programa
\vspace*{7.5cm}
\MakeUppercase{\textbf{Autor}}
\vspace*{2cm}
\MakeUppercase{\textbf{Título}}
\vfill
\\
Cidade, estado
2025 \end{center}
\clearpage
Da mesma forma, para uma contracapa:
\begin{center}
\large{\textbf{Autor}}
\vspace{2.5cm}
\MakeUppercase{\textbf{Título}}
\vspace{3cm}
\begin{flushright}
\begin{minipage}[r]{9.05cm}
Projeto de dissertação apresentado ao Programa de Pós-Graduação em X da Universidade Y, Cidade - Estado (Sigla), como requisito para obtenção do título de Mestre/Doutor.\end{minipage}
\end{flushright}
\vspace{4cm}
Orientador (a): Prof. Dr.
Coorientador (a): Prof. Dr.
\vfill
\\
Cidade, Estado
2025\clearpage
\end{center}
Para isso basta criar utilizar \@Titulo
ao invés de “Título” e criar comandos para imprimir as duas páginas. Com isso, podemos usar:
% supondo que os comandos foram criados previamente
AtBeginDocument{\printCapa
\printContracapa
}
Resumo
No caso do Resumo podemos utilizar o ambiente abstract
(redefinindo o estilo do título) e criar um novo comando para as palavras-chave (lembrando de usar o noindent
).
% -- Resumo e palavras-chave:
\addto\captionsbrazil{
\renewcommand{\abstractname}{\textbf{\MakeUppercase{Resumo}}}
}\newcommand{\kewywords}[1]{
\bigskip\noindent\textbf{Palavras-chave:}~#1
}
Assim, o resumo fica:
\begin{abstract}
\noindent
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit, vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur dictum gravida mauris. Nam arcu libero, nonummy eget, consectetuer id, vulputate a, magna. Donec vehicula augue eu neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Mauris ut leo. Cras viverra metus rhoncus sem. Nulla et lectus vestibulum urna fringilla ultrices. Phasellus eu tellus sit amet tortor gravida placerat. Integer sapien est, iaculis in, pretium quis, viverra ac, nunc. Praesent eget sem vel leo ultrices bibendum. Aenean fauci bus. Morbi dolor nulla, malesuada eu, pulvinar at, mollis ac, nulla. Curabitur auctor semper nulla. Donec varius orci eget risus. Duis nibh mi, congue eu, accumsan eleifend, sagittis quis, diam. Duis eget orci sit amet orci dignissim rutrum.
\kewywords{KW1, KW2, KW3.}
\end{abstract}
Sumário, Lista de Figuras, Lista de Tabelas e Lista de Quadros
Aqui é um copia e cola mesmo, a desvantagem é a limitação ao editar a lista de quadros.
% -- TOC, LOT, LOF, LOQ:
\RequirePackage{tocloft} % Pacote base
\setlength{\cftbeforesecskip}{0pt}
\setlength{\cftbeforesubsecskip}{0pt}
% Sumário:
\renewcommand\cfttoctitlefont{\hfil\centering\bfseries\MakeUppercase}
%Seção:
\setlength{\cftsecindent}{0pt} % sem recuo
\setlength{\cftsecnumwidth}{3.25em} % espaço reservado p/ número da seção
%Subseção:
\setlength{\cftsubsecindent}{0pt}
\setlength{\cftsubsecnumwidth}{3.25em}
%Subsubseção:
\setlength{\cftsubsubsecindent}{0pt}
\setlength{\cftsubsubsecnumwidth}{3.25em}
\renewcommand{\cftsecleader}{\cftdotfill{\cftdotsep}} % Define dots para as seções
% Lista de Tabelas:
\renewcommand\cftlottitlefont{\hfil\centering\bfseries\MakeUppercase}
\setlength{\cfttabindent}{0pt}
\renewcommand{\cfttabpresnum}{\bfseries Tabela~}
\setlength{\cfttabnumwidth}{5.1em}
\renewcommand{\cfttabfont}{\normalfont}
\renewcommand{\cfttabpagefont}{\normalfont}
\renewcommand{\cfttabaftersnum}{\ -- \ }
% Lista de Figuras:
\renewcommand\cftloftitlefont{\hfil\centering\bfseries\MakeUppercase}
\setlength{\cftfigindent}{0pt}
\renewcommand{\cftfigpresnum}{\bfseries Figura~}
\setlength{\cftfignumwidth}{5.1em}
\renewcommand{\cftfigfont}{\normalfont}
\renewcommand{\cftfigpagefont}{\normalfont}
\renewcommand{\cftfigaftersnum}{\ -- \ }
Lista de abreviaturas/siglas
Nesse caso, vamos configurar com o pacote nomencl
.
% -- Configuração da Nomenclatura/Silgas
\RequirePackage{nomencl}
\makenomenclature
\renewcommand{\nomname}{\hfil Lista de abreviaturas e siglas}
\setlength{\nomitemsep}{0pt}
\setlength{\nomitemsep}{-\parsep}
\setlength{\nomlabelwidth}{5em} % espaço reservado para a sigla
Dessa maneira, podemos criar um arquivo siglas.tex
no diretório dos elementos pré-textuais.
% Lista de abreviaturas:
\nomenclature{QOD}{Quasi-one-dimension}
\nomenclature{SIGLA}{Descrição}
\nomenclature{SIGLA}{Descrição}
\nomenclature{SIGLA}{Descrição}
\printnomenclature
E carregar via \input
:
\input{pretextual/siglas}
Com tudo isso, podemos automatizar para aparecer logo após iniciar o ambiente Document
:
% no cls:
\AtBeginDocument{
% Sem numeração
\pagenumbering{gobble}
%
\printCapa
\printContraCapa
}
Já no arquivo .tex
principal, teremos:
\begin{document}
% ---- Pré-Textual -----
%
\input{pretextual/resumo}
\clearpage
\input{pretextual/siglas}
\clearpage
\tableofcontents
\clearpage
\listoftables
\clearpage
\listoffigures
\clearpage
\listofquadro
\clearpage
% Com numeração
\pagenumbering{arabic}
%
%
% ---- Textual -----
\section{Introdução}
...
\end{document}
Informações sobre o autor
Vinícius Oviedo | Data Analyst & LaTeX editor