% !TeX TS-program = lualatex

\documentclass{abntexto}

\usepackage[cmyk]{xcolor}
\usepackage[style=abnt]{biblatex} \addbibresource{abntexto.bib}
\usepackage[brazil]{babel}
\usepackage{fontspec}
\usepackage{unicode-math}
\usepackage[colorlinks,linktoc=page]{hyperref}
\usepackage{listings}

\makeatletter

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

\newcount\verbcount
\newdimen\hh \hh=6pt

\def\adef#1{\catcode`#1=13 \begingroup \lccode`\~=`#1\lowercase{\endgroup\def~}}
\def\setverb{\def\do##1{\catcode`##1=12}\dospecials}

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

\def\makeverbcount{}

\def\begverb{\par \begingroup\parindent=0pt\parskip=0pt
	\setverb \catcode`\|=0
	\adef{ }{\ }%
	\adef{\^^I}{\ \ \ }%
%	\everypar={\makeverbcount}%
	\def\par##1{\endgraf\ifx##1\par\leavevmode\fi ##1}%
	\obeylines
	\adef{'}{\textquotesingle}%
%	\adef{`}{\`{}}%
	\adef{-}{-\kern0pt }%
	\adef{\%}{\verbpercent}%
	\startverb
}

{\catcode`\^^M=13 \catcode`\|=0 \catcode`\\=12 
	|long|gdef|startverb#1\endverb{|verbbox{#1|endgraf}|endgroup|resetplace}
}

\def\verbbox#1{\place{\verbframe{#1}}}
\def\verbframe#1{%
	\hbox{{\color{leftbar}\vrule width1pt}\kern\hh\vbox{%
		\hbox{\vbox{\advance\hsize-1pt \advance\hsize-\hh \verbfont #1}}%
	}}%
}
\def\verbfont{\sloppy\ttfamily\small\singlesp}

\def\verbchar#1{%
	\ifx\savedttchar\undefined\else \catcode\savedttchar=\savedttcharc \fi
	\chardef\savedttchar=`#1%
	\chardef\savedttcharc=\catcode`#1%
	\bgroup\lccode`\~=`#1%
	\lowercase {\egroup\def~}{\leavevmode\hbox\bgroup\setverb\adef{ }{\ }%
		\ttfamily\readverb}%
	\bgroup\lccode`\~=`#1\lowercase{\egroup\def\readverb ##1~}{##1\egroup}%
	\catcode`#1=13
}
\verbchar{|}

\AddToHook{begindocument}{\adef{<}{\begingroup \setverb\startmeta}}
\def\startmeta#1>{\ttfamily$\langle${\rmfamily\itshape #1\/}$\rangle$\endgroup}

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

\definecolor{leftbar}{gray}{.75}
\definecolor{comment}{gray}{.2}

\setmainfont{texgyretermes}[
	UprightFont    = *-regular,
	BoldFont       = *-bold,
	ItalicFont     = *-italic,
	BoldItalicFont = *-bolditalic,
	Extension      = .otf
]
\setmonofont{InconsolataN-Regular.otf}
\setmathfont{texgyretermes-math.otf}

\def\tocsectionfont#1{\bfseries#1\mdseries}
\def\sectionfont#1{\bfseries#1}
\def\appendixlabelwidth{6.7em}
\def \l@section  {\addpenalty{-300}\addvspace{1em plus1pt}%
                  \extline{0pt}{\toclabelwidth}{\tocsectionfont}}
\def \l@appendix {\addpenalty{-300}\addvspace{1em plus1pt}%
                  \extline{0pt}{\appendixlabelwidth}{\maintocfont}}
\def \l@annex    {\addpenalty{-300}\addvspace{1em plus1pt}%
                  \extline{0pt}{\annexlabelwidth}{\maintocfont}}

\definelegendplace{code}{Código}{cód.\,}{loc}
\def\me{o Autor.}

\clubpenalty=10000
\widowpenalty=10000
\let\cite=\textcite
\def\bibfont{\bibitemsep=\baselineskip \singlesp}

\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 3.0.0-alpha\par}
\newpage

\heading{Sumário}
\maketoc

\section{Apresentação}

O |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 é |abntex2|. Mas, diferente desta, o |abntexto| não depende  do |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 |abntexto| se propõe a seguir são aquelas em vigor até o momento da criação deste manual.

O |abntexto| ainda está em estágio \emph{alpha} e seu uso em documentos sérios não é recomendado, uma vez que \emph{bugs} são esperados.

\section{Chamando a classe}

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

\legend{code}{Início} \src\me
\label{cd:início}
\begverb
% !TeX TS-program = lualatex
\documentclass{abntexto}

\usepackage[brazil]{babel}
\usepackage{fontspec}

\setmainfont{texgyretermes}[
	UprightFont    = *-regular,
	BoldFont       = *-bold,
	ItalicFont     = *-italic,
	BoldItalicFont = *-bolditalic,
	Extension      = .otf
]

\begin{document}
	Texto
\end{document}
\endverb

\section{Fonte tipográfica}

O tamanho da fonte é 12\,pt de imediato e pode ser configurado com o comando |\setfontsize{<id>}| sendo que 12\,pt é a única opção disponível. Além disso, com os seletores de tamanho |\normalsize| e |\small| que configuram 12\,pt e 10\,pt, nessa ordem, é possível mudar o tamanho da fonte no corpo do documento.

Mas, se você deseja outro tamanho de fonte, crie-o usando |\definefontsize{<id>}{<definições>}| e |\sizedef<seletor>{<tamanho>}{<entrelinha natural>}|. Em <definições>, o seletor |\normalsize| deve estar presente por meio de |\sizedef|, caso contrário, a classe mostrará um erro.

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

A limitação do comando |\spacing| é que ele só pode ser usado após um seletor de tamanho, porque este redefine a entrelinha. Por exemplo, |\small\onehalfsp| é correto e |\onehalfsp\small| ineficaz.

\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. As margens foram ajustadas com o pacote |geometry|.

Existem dois comandos que configuram o \emph{layout} da página: |\pretextual| que, além de desabilitar o modo |twoside|, remove a numeração de página e é executado automaticamente logo após |\begin{document}| e o comando |\textual| que também é executado automaticamente logo antes da primeira chamada de |\section| por meio de |\trytextual|. Dessa forma, a numeração de página será posta no topo da página e as margens passarão a ser espelhadas.

\section{Sumário}

Os comandos que mudam a fonte das entradas no ToC (Table of Contents) são |\tocsectionfont|, |\tocsubsectionfont|, \dots, |\tocsubparagraphfont| (ver \ref{cd:contents}).

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

\usepackage{xcolor}

\def \tocsectionfont    #1{\color{red}\itshape\MakeUppercase{#1}}
\def \tocsubsectionfont #1{\color{blue}\bfseries#1}

\begin{document}
	\heading{Sumário}
	\maketoc

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

\section{Secionamento}

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

Também há como alterar o espaço vertical acima e abaixo das seções usando |\abovesection|, |\belowsection| e semelhantes. Por exemplo, |\def\abovesubsection{2cm}| insere um espaço de 2\,cm acima de |\subsection|.

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

\usepackage{xcolor}

\def \sectionfont       #1{\color{blue}\scshape#1}
\def \subsectionfont    #1{\color{red}\itshape#1}
\def \subsubsectionfont #1{\color{yellow}\sffamily#1}

\begin{document}
	\heading{Sumário}
	\maketoc

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

\section{Alíneas}

Use o ambiente |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{cd:topics}. Naturalmente, é permitido usar |\label| após um item.

\legend{code}{Alíneas} \src\me
\label{cd:topics}
\begverb
\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}
\endverb

\section{Áreas de legenda}

Use |\place{<obj>}| para inserir áreas de legenda como mostrado em \ref{cd:place}. Mas existem condições: |\place| deve vir por último e |\label| precisa estar depois de |\legend{<tipo de obj>}{<legenda>}|. Além disso, existe a possibilidade de alterar o espaço vertical acima e abaixo de uma área de legenda com |\def\aboveplace{<valor>}| e |\def\belowplace{<valor>}|.

\legend{code}{Áreas de legenda} \src\me
\label{cd:place}
\begverb
\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}
\endverb

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

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

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

\section{Citações}

Para inserir aspas em citações diretas use |\enquote{texto}\cite{<key>}|. Mas, se tratando de citações diretas com mais de três linhas, alterne para |\Enquote{texto \cite{<key>}}|.

\section{Apêndice e anexo}

Com os comandos |\appendix| e |\annex| você pode inserir apêndices e anexos junto dos indicativos desejados: “Apêndice 1 --- \dots” ou “Anexo 1 --- \dots” (ver \ref{cd:appendix}).

\legend{code}{Anexos e apêndices} \src\me
\label{cd:appendix}
\begverb
\begin{document}
	\appendix{Lorem}
	\appendix{Lipsum}

	\annex{Lorem}
	\annex{Lipsum}
\end{document}
\endverb

Pode-se alterar a largura dos rótulos das entradas de apêndice/anexo no sumário redefinindo |\appendixlabelwidth|\,/\,|\annexlabelwidth|.

\newpage

\begcorrprint{Referências}
	\printbibliography
\endcorrprint

\newpage

\appendix{Glossário}

Você pode criar glossários com o pacote |glossaries|, como em \ref{cd:gloss}.

\legend{code}{Glossário} \src\me
\label{cd:gloss}
\begverb
\usepackage{lipsum}
\usepackage{glossaries}

\makenoidxglossaries

\newglossaryentry{metalism}{name=metalismo,description={Tipo de sistema monetário cujo valor da moeda, geralmente de uma nação ou de um país, é determinado pela quantidade constante de certo metal (ouro ou prata), desta forma se estabelece um valor fixo de troca entre esses metais e o próprio dinheiro}}

\newglossaryentry{lip}{name=lipsum,description={\lipsum[1]}}

\begin{document}
	O \gls{metalism} e o \gls{lip}.

	\begcorrprint{Glossário}
		\printnoidxglossary
	\endcorrprint
\end{document}
\endverb

\appendix{Lista de siglas}

O |glossaries.sty| também serve para criar uma lista de siglas, conforme \ref{cd:acro}.

\legend{code}{Siglas} \src\me
\label{cd:acro}
\begverb
\usepackage[acronym]{glossaries}

\makenoidxglossaries

\newacronym{ibge}{IBGE}{Instituto Brasileiro de Geografia e Estatística}
\newacronym{html}{HTML}{Hypertext Markup Language}

\def\acr#1{\gls{#1}}

\begin{document}
	1ª chamada: \acr{ibge}, \acr{html}.
	
	2ª chamada: \acr{ibge}, \acr{html}.

	\begcorrprint{Lista de siglas}
		\def\acronymname{Lista de siglas}
		\printnoidxglossary[type=acronym]
	\endcorrprint
\end{document}
\endverb

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

% MACROS PARA O CÓDIGO-FONTE
% ================================================

\appendix{Código-fonte}

\definecolor{background}{cmyk}{0,0.08,0,0}
\definecolor{comment}{cmyk}{0.9,0,0,0.1}
\definecolor{letter}{cmyk}{0,0,0,.8}

\parskip=0pt plus.2ex minus.1ex

\countsection=0
\def\addtoext#1#2#3{}
\def\sectionfont{\itshape}
\def\sec#1\par{\section{#1}}
\def\verbfont{\raggedright\ttfamily\small\sloppy}
\def\codesep{2mm}
\def\leftsep{5mm}

\lstnewenvironment{code}{\lstset{
	frame=single,
	framerule=0pt,
	framesep=\codesep,
	xleftmargin=\dimexpr\codesep+\leftsep,
	xrightmargin=\codesep,
	framexleftmargin=\leftsep,
	firstnumber=last,
	numbers=left,
	numbersep=6pt,
	numberstyle=\fontsize{8pt}{9pt}\selectfont,
	basicstyle=\verbfont,
	commentstyle=\color{blue}\bfseries,
	comment=[l]{\%},
	columns=fullflexible,
	tabsize=3,
	backgroundcolor=\color{background},
	literate=
		{\ }{ }1 {\^^M\%}{}2
}}{}

{\catcode`\!=14 \catcode`\%=9
	\input abntexto.cls
}

\end{document}
