Classe ABNT com LaTeX (do zero)

Autor

Vinícius Oviedo

Data de Publicação

2 de outubro de 2025

Criação da estrutura

Dica

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}
Nota

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
]{geometry} % margens
\RequirePackage[all,defaultlines=3]{nowidow} % reduz linhas órfãs

Estilo de página (header/footer)

Para o estilo da página, podemos criar um novo pagestyle com o pacote fancyhdr. No nosso caso, precisamos limpar o estilo padrão, configurar a numeração da página e retirar a linha padrão que vem no cabeçalho.

% -- Estilo de página:
\RequirePackage{fancyhdr} % estilo próprio
\fancypagestyle{abnt}{
  \fancyhf{} 
  \fancyhead[R]{\footnotesize\thepage}  % pagina na direita (topo)
  \renewcommand{\headrulewidth}{0pt} % sem linha no header
  \setlength{\headsep}{12pt}
}
\pagestyle{abnt} % aplica como pagestyle principal

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

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

GitHub Badge Linkedin Badge Medium Badge Youtube Badge Fiverr Badge Upwork Badge