\documentclass{abntexto}

\makeatletter

\usepackage[brazil]{babel}
\usepackage[T1]{fontenc}
\usepackage{newtxtext}
\usepackage{newtxmath}
\usepackage{lipsum} \def\lip{\lipsum[1][1-2]}
\usepackage{graphicx}
\usepackage[cmyk]{xcolor}
\usepackage[style=abnt]{biblatex} \addbibresource{abntexto.bib}
\usepackage[colorlinks]{hyperref}
%\let\href=\relax \newdimen\bibitemsep \def\textcite#1{{\bfseries#1}}

% MARKUP
% ================================================

\def\ttnoligs{\ttfamily\@noligs}

\def\cs#1{{\ttnoligs \string#1}}
\def\meta#1{{\ttnoligs <#1>}} % ⟨⟩
\def\cc#1{{\ttnoligs \{\meta{#1}\}}}
\def\kk#1{{\ttnoligs [\meta{#1}]}}

\def\arg{\cc{arg}}
\def\opt{\kk{opt}}
\def\ccval#1{{\ttnoligs \{#1\}}}
\def\kkval#1{{\ttnoligs [#1]}}
\def\pkg#1{{\ttnoligs #1}}

% VERBATIM
% ================================================

\def\adef#1{\catcode`#1=13 \begingroup \lccode`\~=`#1\lowercase{\endgroup\def~}}
\def\dodef#1{\catcode`#1=12 }
\def\verbcatcodes{\let\do=\dodef \dospecials \catcode`\|=0 }

{\catcode`\^^M=13 
	\gdef\verbpercent#1^^M{{\color{graycomment}\itshape\@percentchar#1^^M}}
}

\long\def\codeon{\par\begingroup \verbcatcodes
	\adef{\^^I}{\ \ \ }%
	\adef{\^^M}{\par\leavevmode}%
	\adef{ }{\ }%
	\adef{\%}{\verbpercent}%
	\startverb
}
{\catcode`\ =13 \catcode`\^^M=13 \catcode`\|=0 \catcode`\\=12 
	|gdef|startverb^^M#1^^M\codeoff{|verbbox{#1}|par|endgroup |verbreset}
}
\def\verbbox#1{\def\tnba@placewidth{\hsize \advance\hsize-3cm}%
	\vskip\placeabovespace
	\parindent=0pt 
	\ifx\tnba@savedplace\empty\else\tnba@makelegend\fi
	\nobreak\nointerlineskip\vskip10pt
	{\verbfont{#1}}%
	\nobreak\nointerlineskip\vskip8pt
	\ifx\tnba@savedsrc\empty\else\tnba@makesrc\fi
	\vskip\placebelowspace
}
\def\verbreset{%
	\let\tnba@savedplace=\empty
	\let\tnba@savedlegend=\empty
	\let\tnba@savedsrc=\empty
	\let\@currentlabel=\empty
}
\def\verbfont{\raggedright\leftskip=6pt\singlesp\small\ttnoligs\leftframed}
\long\def\leftframed#1{\setbox0=\vtop{#1}%
	\hbox{{\color{graybar}\kern1.5cm\vrule width1pt}\box0}%
}

% MISC
% ================================================

\sizeselectordef\large{14.4pt}{17pt}
\sizeselectordef\Large{20.74pt}{25pt}
\sizeselectordef\LARGE{25pt}{30pt}

\definecolor{graybar}{gray}{0.75}
\definecolor{graycomment}{gray}{.2}

\legendplacedef{code}{Código}{Lista de códigos}{cód.\,#1}{loc}
\def\loclabelwidth{10.6ex}
\def\me{o autor.}

\tocilowercase
\sectionlowercase

\clubpenalty=10000 
\widowpenalty=10000 

\let\cite=\textcite
\def\bibfont{\singlesp}
\bibitemsep=18pt

\def\corrprinton{\begingroup \def\section##1##2{\heading{##2}}}
\def\corrprintoff{\par\endgroup}

\makeatother



\begin{document}

\leavevmode\vskip1.9in

{\centering \LARGE\sffamily\bfseries
	abntexto\\[0.4em] \Large\itshape\mdseries
	Classe para {\upshape\LaTeX}\\[2em] \normalfont\large
	Elayson\\[1ex]
	\href{mailto:abntexto.classe@gmail.com}{abntexto.classe at gmail.com}\\[2.5ex]
	\today\par}

\vskip3in

{\centering \large\ttfamily 1.2.1-alpha\par}

\newpage

\maketoc

\textual

\section{Apresentação}

O \pkg{abntexto} é uma classe do \LaTeX\ criada para facilitar a utilização das normas da Associação Brasileira de Normas Técnicas (ABNT) em trabalhos acadêmicos (monografias, dissertações, teses).

Este \emph{não} é um manual sobre \LaTeX\ (ou \TeX, a ferramenta que o constitui) nem tampouco uma descrição detalhada sobre as normas ABNT. Para aprender sobre \LaTeX\ leia \cite{viaexemplos} ou \cite{latex2eunnoficial}, disponível também em francês. Além disso, também se pode ler \cite{texbytopic} para aprender sobre o sistema \TeX\footnote{Note que os livros referenciados não foram realmente citados e isso não é aceito na Norma, no entanto este não é um trabalho acadêmico real, mas um manual.}.

Já existe uma classe para aplicação das normas ABNT cujo nome é \pkg{abntex2}. Mas, diferente desta, o \pkg{abntexto} não depende  do \pkg{memoir}, uma classe de código-fonte e manual extensos e que implementa funções as quais, em sua maioria, não são pertinentes a um documento que use as diretrizes da ABNT.

As normas ABNT as quais o \pkg{abntexto} se propõe a seguir são aquelas em vigor até o momento da criação deste manual.

\section{Chamando a classe}

Digite as linhas em \ref{vb:início} e use \pkg{abntexto}.

\legend{code}{Início} \src\me
\label{vb:início}
\codeon
\documentclass{abntexto}

\usepackage[brazil]{babel} % para obter os padrões de hifenização corretos
\usepackage[T1]{fontenc}
\usepackage{newtxtext} % fontes New TX, semelhantes a Times
\usepackage{newtxmath}

\begin{document}
	Texto
\end{document}
\codeoff

\section{Fonte tipográfica}

O tamanho da fonte é 12\,pt de imediato e pode ser configurado com o comando \cs\setfontsize\cc{size} sendo que 12\,pt é a única opção disponível. Mas, se você deseja outro tamanho de fonte, crie-o usando \cs\fontsizedef\cc{size}\cc{defs}. Além disso, com os seletores de tamanho \cs\normalsize\ e \cs\small\ que configuram 12\,pt e 10\,pt, nessa ordem, é possível mudar o tamanho da fonte no corpo do documento.

O espaçamento é de um e meio e pode ser alterado para dois com \cs\spacing\ccval{2}, por exemplo. Os atalhos \cs\singlesp, \cs\onehalfsp\ e \cs\doublesp\ estão disponíveis. Note que o espaçamento simples não tem o mesmo valor que o espaçamento um, portanto, \cs\singlesp\ é diferente de \cs\spacing\ccval{1}! Os atalhos \cs\onehalfsp\ e \cs\doublesp\ tem o mesmo significado de \cs\spacing\ccval{1.5} e \cs\spacing\ccval{2}.

\section{\emph{Layout}}

A folha é A4 por padrão e as margens esquerda e direita são de 3\,cm, 2\,cm para páginas ímpares e de 2\,cm, 3\,cm para páginas pares, respectivamente. Além disso, as margens superior e inferior têm, nessa ordem, 3\,cm, 2\,cm para todo o documento. Todas essas medidas podem ser alteradas com a macro \cs\paper\ que deve ser usada assim: \cs\paper\ccval{left=0cm, right=0cm, top=0cm, botttom=0cm}.

Além das chaves anteriores também existe \cs{twoside} que é booleana, ou seja, aceita os valores \cs{true} ou \cs{false} e serve para ativar o modo de impressão em duas folhas aonde as medidas das margens horizontais se invertem nas páginas pares. Ao não informar um valor para \cs{twoside} subentende-se que seja \cs{true}, portanto \cs\paper\ccval{twoside} equivale a \cs\paper\ccval{twoside=true} e esse princípio também se aplica a outras chaves booleanas.

\section{Sumário}

Os comandos que mudam a fonte das entradas no ToC (Table of Contents, em inglês) são \cs\tocifont, \cs\tociifont, \dots, \cs\tocvfont\ (ver \ref{vb:contents}).

\legend{code}{Aparência do sumário} \src\me
\label{vb:contents}
\codeon
\documentclass{abntexto}

\usepackage{color}

\tocifont{\color{red}\itshape}
\tociifont{\color{blue}\bfseries}

\begin{document}
	\maketoc

	\section{Título}
	\subsection{Título}
\end{document}
\codeoff

\section{Secionamento}

A personalização das macros de seção (\cs\section, \cs\subsection\ etc.) é análoga a personalização do sumário e deve ser feita com \cs\sectionfont, \cs\subsectionfont, etc. como exemplificado em \ref{vb:sec}.

Também há como alterar o espaço vertical acima e abaixo das seções usando \cs\sectionspaces, \cs\subsectionspaces, etc. Por exemplo, \cs\sectionspaces\ccval{2ex}\ccval{1cm} insere um espaço de 2\,ex acima de \cs\section\ e de 1\,cm abaixo.

\legend{code}{Aparência das seções} \src\me
\label{vb:sec}
\codeon
\documentclass{abntexto}

\usepackage{color}

\sectionfont{\color{blue}\scshape}
\subsectionfont{\color{red}\slshape}
\subsubsectionfont{\color{yellow}\sffamily}

\begin{document}
	\maketoc

	\section{Texto}
	\subsection{Texto}
	\subsubsection{Texto}
\end{document}
\codeoff

\section{Alíneas}

Use o ambiente \cs{topics} para criar alíneas. Ele dispõe de dois níveis sendo que o segundo usa um travessão como marcador conforme o exemplo em \ref{vb:topics}. Naturalmente o uso de \cs\label\ é permitido.

\legend{code}{Alíneas} \src\me
\label{vb:topics}
\codeon
\begin{topics}
	\item \label{al:x} 1
		\begin{topics}
			\item x
			\item y
			\item z
		\end{topics}
	\item \label{al:y} 2
	\item 3
\end{topics}
\codeoff

\section{Áreas de legenda}

Use \cs\place\ para inserir áreas de legenda como mostrado em \ref{vb:place}. Mas existem condições: \cs\place\ deve vir por último e \cs\label\ precisa estar depois de \cs\legend. Além disso, existe a possibilidade de alterar o espaço vertical acima e abaixo de uma área de legenda com \cs\placespaces\cc{aboveskip}\cc{belowskip}.

\legend{code}{Áreas de legenda} \src\me
\label{vb:place}
\codeon
\usepackage{graphicx}

\begin{document}
	\legend{figure}{Um título}
	\src{\texttt{www.site.com.br}. Acesso em 01 jan. 2020.}
	\label{fig:teste}
	\place{\includegraphics[width=0.4\linewidth]{example-image}}

	Ver \ref{fig:teste}.
\end{document}
\codeoff

O leitor pode querer definir uma nova área de legenda usando, por exemplo, a instrução: \cs\legendplacedef\ccval{diagram}\ccval{Diagrama}\ccval{Lista de diagramas}\ccval{diag.\cs\,\cs#1}\ccval{lod} que vai criar o comando \cs\makelod\ para escrever no documento as entradas do arquivo auxiliar .lod.

%*

\section{Formatação de {\ttfamily\protect\textbackslash cite} e referências}

Até o momento o \pkg{abntexto} não possui macros para formatação de \cs\cite\ e referências. Utilize \cs{\usepackage[style=abnt]\{biblatex\}}.

\section{Citações}

Para inserir aspas em citações diretas use \cs\qt\ccval{texto}. Mas, se tratando de citações diretas com mais de três linhas, alterne para \cs\quote\ccval{texto \cs\cite\cc{key}}.

\newpage

\corrprinton
%\printbibliography
\corrprintoff

\newpage
\appendix

\section{\emph{Feedback}}
Sugestões, relatos de \emph{bugs} e doações são bem-vindas.

\section{Código-fonte}

\makeatletter
\newcount\seccount \def\thesec{\the\seccount}
\def\extlabelwidth{4ex}
\def\extlabelbox#1{\hbox to\extlabelwidth{#1~---~\hfil}}
\def\l@subsection#1#2{\smartaboveskip{\penalty351}{\vskip1em plus1pt}%
	\begingroup
		\usetocifont \nobreak
		\extlineshape \relax
		\hskip-\leftskip \maybeuctoc{#1}\nobreak\hfil\nobreak
		\hbox to1.55em{\hss #2\kern-1pt\kern1pt}\par
	\endgroup
}
\def\subsection#1{\par \smartaboveskip{\penalty351}{\vskip\subsectionabove}\noindent
	\advancecount\seccount
	\setbox0=\hbox{\usesubsectionfont \thesec\quad}%
	{\usesubsectionfont \hangindent=\wd0 \box0 #1\tnba@nbpar}%
	\nobreak \smartbelowskip{\vskip\subsectionbelow}%
}
\makeatother 

% SOURCE MACROS
% ================================================

\makeatletter

\definecolor{bg}{cmyk}{0,0.06,0,0}
\definecolor{comment}{cmyk}{0.9,0,0,0.1}

\def\sec#1\par{\subsection{#1}}

\newdimen\hhkern \hhkern=12pt 
\newdimen\vvkern \vvkern=12pt 

\def\hh{\kern\hhkern}
\def\vv{\kern\vvkern}

{\catcode`\^^M=13 
	\gdef\verbpercent#1^^M{{\bfseries\color{comment}\@percentchar#1^^M}}
}

\def\srccatcodes{\catcode`\!=14 \catcode`\%=9 \catcode`\|=0 }
\def\codecatcodes{\let\do=\dodef \dospecials}

\long\def\bcode{\par\begingroup \codecatcodes
	\adef{\^^I}{\ \ \ }%
	\adef{\^^M}{\par\leavevmode}%
	\adef{ }{\ }%
	\adef{\%}{\verbpercent}%
%	\def\par##1{\endgraf\ifx##1\par\leavevmode\fi##1}\obeylines
	\startcode
}
{\catcode`\%=13 \catcode`\ =13 \catcode`\^^M=13 \catcode`\|=0 \catcode`\\=12 
	|long|gdef|startcode #1% |ecode{|codefont{#1}|par|endgroup}
}

\def\codefont{\raggedright\small\ttnoligs\bgbox}

\long\def\bgbox#1{\setbox0=\vbox{\advance\hsize-24pt \vv#1\vv}%
	\ifdim\ht0>\dimexpr \pagegoal - \pagetotal \relax
		\setbox2=\vsplit0 to\dimexpr \pagegoal - \pagetotal -24pt \relax
	\fi
	\vskip8pt minus2pt 
	\drawbg2\par \drawbg0%
	\vskip8pt minus2pt 
}
\def\drawbg#1{\leavevmode
	\rlap{{\color{bg} \vrule width\dimexpr\wd#1+24pt\relax height\ht#1 depth\dp#1}}%
	\hbox{\hh\box#1\hh}%
}

\def\inputsrc#1{\begingroup \parskip=0pt \srccatcodes \input #1\endgroup}

\inputsrc{abntexto.cls}

\end{document}
