terça-feira, 8 de junho de 2010

Latex: Novos ambientes

Novos ambientes e o pacote FancyBox

As algumas vezes precisamos fazer algo em latex que não existe ambiente que faça. Isso aconteceu comigo quando fui fazer fichas de um livro. Daria muito trabalho criar um framebox para cada ficha, e mesmo assim, como cada ficha tem um conteúdo diferente, elas teriam tamanhos diferentes.

Então, como criar uma caixa de tamanho fixo, que me permita alterar o conteúdo da caixa o mais facil possivel?

Depois de muito tentar, e contando com a ajuda dos amigos do blog vidageek consegui chegar a um resultado perfeito, mas antes vamos ver uma pouco sobre novos ambientes:
O comando \newenvironment{nome}[n. argumentos]{Antes} {Depois} gera novos ambientes e tem três argumentos, onde o primeiro é o nome do ambiente (vamos usar esse nome com o comando \begin), o segundo descreve tudo que deve acontecer ANTES do conteúdo do ambiente e o terceiro argumento descreve o que deve acontecer DEPOIS do conteúdo.

Também podemos inserir argumentos para nosso ambiente, mas antes devemos declarar o numero de argumentos que nosso novo ambiente vai ter, e fazemos isso logo depois do nome do novo ambiente. Para usar os argumentos basta definir #n, onde n é um numero até o maximo definido em numero de argumentos. Por exemplo, o comando: \newenvironment{bi}[1]%
{Nome: \emph{#1} \\ }{vspace{3ex}}

Gera o ambiente que pode ser chamado assim:
\begin{bi}{Antonio}
este é o texto do ambiente
\end{bi}


Que terá como resultado:

Nome:Antonio
este é o texto do ambiente

O pacote fancybox implementa um ambiente que permite 'quebrar' um uma caixa dentro de outro ambiente. E isso é muito util pois não é possivel fazer isso com os comandos \fbox{} nem \framebox{}, por que ambos precisam ter o conteúdo fechado por chaves. Por exemplo, o ambiente criado por:
\newenvironment{bi}[1]
{\fbox{Nome:\emph{#1}}
{vspace{3ex}}


Irá falhar na hora de compilar, por que a ultima chave direita com argumento ANTES, vai ser considerada como sendo a chave direita do \fbox, então falta um chave direita. Mas se incluirmos a chave que falta, apenas o conteúdo do argumento do ambiente dicará dentro da \fbox. Mas usando o ambiente Sbox do pacote fancybox, podemos quebrar essa caixa entre os argumentos ANTES e DEPOIS, para que todo o conteúdo do nosso ambiente fique dentro da \fbox.

\newenvironment{exemplo}[1]
{\begin{Sbox} \begin{minipage}[t][9cm][t]{19cm}{\parbox{19cm}%
\bf\large{#1}} \\}

{ \end{minipage} \end{Sbox} \fbox{\TheSbox}}
Segundo o manual do fancybox, o ambiente Sbox na verdade irá salvar o seu contéudo do mesmo modo que o comando \savebox faria. Assim tudo que for inserir do novo ambiente será salvo como uma unica caixa. O uso do ambiente minipage serve para definir o tamanho da ficha, desta forma criamos um ficha de tamanho fixo (neste caso 9cm de altura e 19 de largura).
Para finalizar basta colocar a caixa salva dentro de uma \fbox comum. Veja que esse é o ultimo comando do nosso ambiente.
Acresentado mais uns detalhes podemos criar uma ficha bem estilosa, veja por exemplo, o código abaixo, que usei para gerar as minhas fichas:

\newenvironment{ficha}[1]
{ \stepcounter{fic} \noindent \begin{Sbox} \begin{minipage}[t][9cm][t]{19cm}%
\colorbox{gray!30}{\parbox{19cm}%
{\textcolor{red}{\sc\large Ficha \Roman{fic}} -- \bf\large{#1}}}\vspace*{0.3cm}%
}
{\end{minipage} \end{Sbox} \fbox{\TheSbox} \vspace*{0.3cm}}


Gera o seguinte visual final:


Nenhum comentário:

Postar um comentário