% ----------------------------------------------------------
\chapter{Ambientes do UnB\TeX}
% ----------------------------------------------------------

A classe UnB\TeX\ disponibiliza alguns ``ambientes'', ou seja, caixas de texto com formatação especial para certos tipos de elementos, que podem ser automaticamente numerados (por exemplo, \cref{def:WYSIWYG}, \cref{thm:WYSIWYG}, \cref{alg:ex}, etc.).

\section{Estilo teorema}

Criados com auxílio do pacote \textsf{mdframed}\footnote{Disponível em \url{https://mirrors.ctan.org/macros/latex/contrib/mdframed/mdframed.pdf}}, estão disponíveis os ambientes: \texttt{theorem}, \texttt{lemma}, \texttt{proposition}, \texttt{corollary}, \texttt{definition}, \texttt{as\-sumption}, \texttt{example}, \texttt{remark} e \texttt{proof}. Alguns exemplos de uso são apresentados a seguir.

\begin{definition}\label{def:WYSIWYG}
O WYSIWYG (ou ``What You See Is What You Get -- O que você vê é o formato final'') é um tipo de editor HTML que permite editar sua página da Web em uma visualização simplificada e sem código de aparência semelhante à do layout da página real.
\end{definition}

\begin{theorem}[Teorema LaTeX--WYSIWYG]\label{thm:WYSIWYG}
    Todo físico prefere usar código \LaTeX\ puro que qualquer editor WYSIWYG.
\end{theorem}

\begin{proof}
    Físicos gostam de equações bonitas. Editores WYSIWYG não são apropriados para fazer equações bonitas\footnote{É certo que há editores WYSIWYG baseados em \LaTeX, mas eles não nos dão o mesmo nível de controle.}. Logo, se algum físico preferisse usar um editor WYSIWYG no lugar de \LaTeX, não seria muito inteligente. Como todo físico é inteligente, o teorema está demonstrado \textit{ad absurdum}.
\end{proof}

\begin{remark}\label{rmk:1}
    \LaTeX\ produz equações mais bonitas que qualquer editor WYSIWYG.
\end{remark}

%\begin{example}\label{exp:ae}
%    Einstein usaria um editor WYSIWYG ou \LaTeX? \\
%    Einstein era físico. Portanto, usando o teorema LaTeX-WYSIWYG, concluímos que ele usaria \LaTeX.
%\end{example}

Note que, por exemplo, o \cref{thm:WYSIWYG} é gerado pelo código

\begin{verbatim}
\begin{theorem}[Teorema LaTeX--WYSIWYG]\label{thm:WYSIWYG}
    Todo físico prefere usar código \LaTeX\ puro que qualquer editor WYSIWYG.
\end{theorem}
\end{verbatim}

Caso queira definir um novo ambiente não disponibilizado no UnB\TeX, por exemplo, o ambiente \texttt{exercise}, acrescente os comandos a seguir:

\begin{verbatim}
\theoremstyle{definition}
\newmdtheoremenv[hidealllines=true,backgroundcolor=azulunb!10,innertopmargin=0pt]
    {exercise}{Exercício}[chapter]
\end{verbatim}

\theoremstyle{definition}
\newmdtheoremenv[hidealllines=true,backgroundcolor=azulunb!10,innertopmargin=0pt]{exercise}{Exercício}[chapter]
%\counterwithout{exercise}{chapter} % Numeração para o documento inteiro

\noindent O comando \verb|\theoremstyle{definition}| determina que o ambiente será numerado\footnote{Por padrão, a numeração do ambiente é feita por capítulo. Para numerar sequencialmente ao longo de todo o documento, adicione o comando \Verb{\counterwithout{exercise}{chapter}}}. A cor do ambiente é definida por \texttt{azulunb!10} (experimente também \texttt{verdeunb!10}). Com o novo ambiente definido, um exercício pode criado com os comandos:

\begin{verbatim}
\begin{exercise}\label{exc:in}
    Explique como Isaac Newton usaria cada um dos pacotes seguintes,
    se vivesse no tempo presente:
    \begin{enumerate}[label=(\alph*)]
        \item Metapost
        \item TikZ
        \item PGFPlots
        \item PSTricks
    \end{enumerate}
\end{exercise}
\end{verbatim}

\noindent O resultado é mostrado a seguir:

\begin{exercise}\label{exc:in}
    Explique como Isaac Newton usaria cada um dos pacotes seguintes,
    se vivesse no tempo presente:
    \begin{enumerate}[label=(\alph*)]
        \item Metapost
        \item TikZ
        \item PGFPlots
        \item PSTricks
    \end{enumerate}
\end{exercise}

Escreva \verb|exercício \ref{exc:in}| para se referir ao exercício \ref{exc:in} ou escreva apenas \verb|\cref{exc:in}| para que a palavra ``exercício'' e, não apenas o número correspondente, sejam gerados com hiperlink. No entanto, para que o comando \verb|\cref| funcione para o ambiente criado, no arquivo \texttt{tex} principal (\texttt{unbtex-example.tex}), antes do comando \verb|\begin{document}|, é necessário inserir os comandos

\begin{verbatim}
\crefname{exercise}{exercício}{exercícios}
\Crefname{exercise}{Exercício}{Exercícios}
\end{verbatim}

\section{Pseudocódigos}

O \cref{alg:ex} apresenta um exemplo de pseudocódigo elaborado com o pacote \textsf{algorithm2e}. Detalhes sobre seu uso podem ser encontrados em seu manual\footnote{Disponível em \url{https://mirrors.ctan.org/macros/latex/contrib/algorithm2e/doc/algorithm2e.pdf}}. A lista de algoritmos pode ser incluída no trabalho por meio do comando \verb|\imprimirlistadealgoritmos| no arquivo \texttt{tex} principal.

\begin{algorithm}[htb]
\caption{Exemplo de pseudocódigo}\label{alg:ex}
\KwData{$n \geq 0$}
\KwResult{$y = x^n$}
$y \gets 1$\;
$X \gets x$\;
$N \gets n$\;
%\While{$N \neq 0$}{
\While(\tcc*[f]{Isso é um comentário}){$N \neq 0$}{
  \eIf{$N$ for par}{
    $X \gets X \times X$\;
    $N \gets \frac{N}{2}$ \tcc*[r]{Isso é outro comentário}
  }{\If{$N$ for ímpar}{
      $y \gets y \times X$\;
      $N \gets N - 1$\;
    }
  }
}
\fonte{Elaborado pelo autor}
\legend[Nota:]{Algoritmo inserido com o pacote \textsf{algorithm2e}}
\end{algorithm}

\section{Códigos-fonte}

O \cref{cod:exemplo} é um exemplo de código-fonte, inserido com auxílio do pacote \textsf{listings}. Para mais exemplos e comandos, confira o \cref{apd:cdg} e o manual do pacote\footnote{Disponível em \url{https://mirrors.ctan.org/macros/latex/contrib/listings/listings.pdf}}. A lista de códigos é um elemento pré-textual não obrigatório de trabalhos acadêmicos e pode ser gerada e incluída utilizando-se o comando \verb|\imprimirlistadecodigos| no arquivo \texttt{tex} principal.

\begin{lstlisting}[float=htb,caption={Exemplo de código-fonte},label={cod:exemplo},fonte={Elaborado pelo autor},legend={Nota:}{Código inserido com o pacote \textsf{listings}}]
/**
* MSO: ativa o servo cujo eixo eh descrito
* por drive_axis; informacoes de controle
* sao gravadas em MSO_1
*/
  MSO(drive_axis,MSO_1);
/* Atribui o valor 0.0 ao primeiro elemento do array speed */
  speed[0] := 0.0; 
/* Atribui 1 para dataInitialized */
  dataInitialized := 1;
\end{lstlisting}