% ======================================================================
% brlex-doc.tex
% Copyright (c) Youssef Cherem, 2015
%
% This file is part of the br-lex LaTeX2e class.

% This work may be distributed and/or modified under the conditions of
% the LaTeX Project Public License, version 1.3c of the license.
% The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions of LaTeX
% version 2005/12/01 and of this work.
%
% This work has the LPPL maintenance status "author-maintained".
% ======================================================================

\documentclass{ltxdoc}
\usepackage[brazil]{babel}
\usepackage{fontspec}
\RequirePackage[sharp]{easylist}
\usepackage[normalem]{ulem}
\newcommand{\cortado}[1]{\sout{#1}}
\usepackage[dvipsnames]{xcolor}

\frenchspacing 

 \usepackage{listings}
 \lstset{%
 	language=[LaTeX]TeX,
 	numbers=left,
 	columns=flexible,
 	basicstyle=\ttfamily\small,
 	backgroundcolor=\color{lightgray!10!},
 	frame=single,
 	tabsize=2,
 	title=\lstname,
 	escapeinside={\%*}{*)},
 	breaklines=true,
 	commentstyle=\color{gray},
 	keywords=[0]{\titulo,\descricao,\cortado,\artigo,\paragrafo,paragrafos},
 	keywordstyle=[0]\color{Red},
 	keywords=[1]{},
 	keywordstyle=[1]\color{Green},
 	breakatwhitespace=true,
 	alsoother={0123456789_},
 	inputencoding=utf8,
 	extendedchars=true,
 	literate={á}{{\'a}}1 {ã}{{\~a}}1 {é}{{\'e}}1 {è}{{\`{e}}}1 {ê}{{\^{e}}}1 {ë}{{\¨{e}}}1 {É}{{\'{E}}}1 {Ê}{{\^{E}}}1 {û}{{\^{u}}}1 {ú}{{\'{u}}}1 {â}{{\^{a}}}1 {à}{{\`{a}}}1 {á}{{\'{a}}}1 {ã}{{\~{a}}}1 {Á}{{\'{A}}}1 {Â}{{\^{A}}}1 {Ã}{{\~{A}}}1 {ç}{{\c{c}}}1 {Ç}{{\c{C}}}1 {õ}{{\~{o}}}1 {ó}{{\'{o}}}1 {ô}{{\^{o}}}1 {Õ}{{\~{O}}}1 {Ó}{{\'{O}}}1 {Ô}{{\^{O}}}1 {î}{{\^{i}}}1 {Î}{{\^{I}}}1 {í}{{\'{i}}}1 {Í}{{\~{Í}}}1
 	{º}{{\textordmasculine}}1,
 }

\ListProperties(Numbers1=R,Numbers2=l,Numbers3=a,
FinalMark1={~---},FinalMark2={)},Hide2=1,Hide3=2,Margin1=4em,Margin2=6em,Margin3=7.5em,Align=move) 

\title{\texttt{br-lex}: Uma classe para redação\\ de normas e leis brasileiras}
\author{Youssef Cherem}

\newcommand{\nota}[1]{\marginpar{\hfill \cmd{#1}}}

\begin{document}

\maketitle

\begin{abstract}
Classe para redação de normas e leis de acordo com a Lei Complementar Nº 95, de 26 de fevereiro de 1998. O objetivo é uma implementação tipográfica facilitada para o usuário.
\end{abstract}

\section{Utilização}

Para usar a classe \texttt{br-lex}, basta invocar as palavras mágicas: 

\begin{verbatim}
\documentclass{br-lex}
\end{verbatim}

As opções de língua portuguesa já vêm carregadas automaticamente, utilizando o pacote \texttt{babel}, se a compilação for com \texttt{pdflatex}, e o pacote \texttt{polyglossia}, se optar por \texttt{xelatex}. 

Esta classe foi elaborada com a classe \texttt{scrbook}. Além das opções das classes \verb|\KOMAScript|, há as seguintes opções: 

\begin{itemize}

\item 
\texttt{paragrafonormal}, para parágrafos indentados em sem espaço entre si; 

\item
\texttt{paragrafoespaco}, para parágrafos sem indentação e com espaço entre si, e 

\item 
\texttt{capitulo}, para começar os capítulos na mesma página.

\end{itemize}

As páginas têm cabeçalho automático de acordo com a classe \texttt{scrbook}. Se desejar, você pode mudar o estilo da página com o pacote \texttt{scrlayer-scrpage} (antigo \texttt{scrpage2}).



\begin{verbatim}\titulo{}
\end{verbatim}
\nota{\titulo\marg{Título}} 
Título.

Capítulos e seções são inseridos da maneira usual em \LaTeX: \verb|\chapter|\marg{Capítulo} e \verb|\section|\marg{Seção}.   


\begin{verbatim}\descricao{}
\end{verbatim}
\nota{\descricao\marg{Descrição}} 
Descrição da lei.


\begin{verbatim}\cortado{}
\end{verbatim}
\nota{\cortado\marg} 
Para inserir partes ``cortadas" (\cortado{revogadas}).


\begin{verbatim}
\artigo Escreva aqui o artigo.
\end{verbatim}
 
\cmd{\artigo} (sem \verb|{}|)\nota{\artigo} Insere um artigo, cuja numeração não depende do capítulo.



\begin{verbatim}
\begin{paragrafos}
\paragrafo Escreva aqui o parágrafo.
\paragrafo Outro parágrafo
...
\end{paragrafos}
\end{verbatim}

Ambiente \texttt{paragrafos},\nota{\paragrafo} cuja numeração recomeça a cada artigo. Dentro desse ambiente, você pode inserir um \verb|\paragrafo| (sem \verb|{}|). 

Para divisões inferiores a parágrafo, é utilizado o pacote \texttt{easylist}:

\begin{verbatim}
	\begin{easylist}
	# Incisos (romanos) com \verb|#|
	
	## Alíneas (minúsculas) com \verb|##|
	
	### Itens com (arábicos) com \verb|###|
	\end{easylist}
\end{verbatim}
	
	

\begin{easylist}
	# Incisos (romanos) com \verb|#|
	
	## Alíneas (minúsculas) com \verb|##|
	
	### Itens com (arábicos) com \verb|###|
	
	###
	
	## \verb|##| Volta para alíneas.
	
	# \verb|#| Volta para incisos.
	\end{easylist}

\section{Implementação}

\begin{lstlisting}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{br-lex}[22/04/2015 v. 0.1 Beta]
\LoadClassWithOptions{scrbook}%%[a4paper,DIV=calc]
\KOMAoptions{pagesize,numbers=noendperiod,headings=small}
%chapterprefix=true desnecessário com titlesec
\RequirePackage{enumitem}
\RequirePackage{indentfirst}
\RequirePackage[sharp]{easylist}
\RequirePackage[normalem]{ulem}
\addtokomafont{chapter}{\centering}
\addtokomafont{pagehead}{\rmfamily\itshape}
%\addtokomafont{section}{\centering}
\renewcommand{\thechapter}{%Capítulo 
\Roman{chapter}}
\renewcommand{\thesection}{%Seção~
\Roman{section}}
%Retirado: capítulo e seção por causa de acentos com pdflatex. substituído por nome em titlesec.

\RequirePackage[all]{nowidow}

\RequirePackage{ifxetex}
\makeatletter
\ifxetex
\RequirePackage{fontspec}
\defaultfontfeatures{Ligatures=TeX}
\RequirePackage{polyglossia}
\setmainlanguage{brazil}
%\setotherlanguages{english,french,spanish,german,italian}
\else
\RequirePackage[utf8]{inputenc}
\addtokomafont{disposition}{\rmfamily}
\RequirePackage[brazil]{babel}
\fi
\makeatother


%%risca partes do texto
\newcommand{\cortado}[1]{\sout{#1}}

\newcommand{\titulo}[1]{
\begin{center}
\centering \bfseries \sffamily \huge #1
\end{center}}

\newcommand{\descricao}[1]{\hfill%
\begin{minipage}{0.5\textwidth}
#1
\end{minipage}
\vspace{\baselineskip}
}

%%seções

\RequirePackage{titlesec}
\titleformat{\section}[display]%
{\large\bfseries\sffamily\centering}
{Seção \thesection}
{%-6pt
0pt}
{}

\titlespacing*{\section}
{0pt}{18pt}{16pt}

\titlespacing*{\chapter}
{0pt}{18pt}{16pt}

\titleformat{\chapter}[display]%
{\Large\bfseries\sffamily\centering}
{Capítulo \thechapter}
{%-10pt
0pt}
{}

% % % Para começar capítulos na mesma página:

\RequirePackage{etoolbox} % para opção de começar capítulos na mesma página

%% opção de começar capítulos na mesma página: capitulo

\DeclareOption{capitulo}{%
\makeatletter
\patchcmd{\chapter}{\cleardoublepage\else\clearpage\fi}{}{}{}
\patchcmd{\addchap}{\cleardoublepage\else\clearpage\fi}{}{}{}
\makeatother
}

%%%original:
%\makeatletter
%\patchcmd{\chapter}{\if@openright\cleardoublepage\else\clearpage\fi}{}{}{}
%\makeatother

%%% Opções da classe: %%%

\DeclareOption{paragrafoespaco}{%
\setlength{\parskip}{10pt}%
\setlength{\parindent}{0pt}%
}

\DeclareOption{paragrafonormal}{%
\setlength{\parskip}{0pt}%
}

\ExecuteOptions{paragrafoespaco}

\ProcessOptions\relax


%% Do pacote easylist: listas segundo a norma: incisos, alíneas, itens.
\ListProperties(Numbers1=R,Numbers2=l,Numbers3=a,
FinalMark1={~---},FinalMark2={)},Hide2=1,Hide3=2,Margin1=4em,Margin2=6em,
Margin3=7.5em,Align=move) %Space*=10pt entre mesmo nível,Space=9pt,Space*=9pt

%Adiciona: Margin=\the\parindent,Progressive=3ex, 27-04-2015Progressive=3em,Margin1=5em,Align=move

%%%from the etoolbox package: restart numbering easylist
\AtBeginEnvironment{easylist}
{\ListProperties(Start1=1)}
{}
{}

%\renewcommand*{\chapterheadstartvskip}{\vspace*{-12pt}}
%\renewcommand*{\chapterheadendvskip}{\vspace*{-24pt}}



\newcounter{artigo}
\newcommand{\artigo}{\refstepcounter{artigo} % 
\ifnum\theartigo<10 %
{\bfseries Art.~\arabic{artigo}º~~}%
\else
{\bfseries Art. \arabic{artigo}~~}%
\fi
%Art. \arabic{artigo}.~
}

\newcounter{paragrafo}
\newcommand{\paragrafo}{\refstepcounter{paragrafo} % 
\ifnum\theparagrafo<10 %
\S~\arabic{paragrafo}º~%
\else
\S~\arabic{paragrafo}~%
\fi
}

\newenvironment{paragrafos}{\setcounter{paragrafo}{0}
\setlength{\parindent}{0pt}
\begin{addmargin}[4em]{0pt} 
}
{\end{addmargin}
}


\endinput

\end{lstlisting}

\end{document}