O que são os “ambientes” LaTeX

Enquanto o TeX fornece provisão direta para comandos, o LaTeX adiciona um conceito de “ambiente”; ambientes executam uma ação em um bloco (de alguma coisa ou outra) em vez de apenas fazer algo em um lugar em seu documento.

Um ambiente totalmente trivial poderia mudar a fonte usada em uma parte do texto, como

\newenvironment{monoblock}%
  {\ttfamily}%
  {}
que define um monoblock que pode ser usado como
\begin{monoblock}
  algum texto configurado em espaço simples
\end{monoblock}
que vai parecer com:
algum texto configurado em espaço simples
de modo que é um exemplo particularmente simples. Um ambiente mais complicado é introduzido por \begin{document}; parece simples, mas precisa de todo tipo de código especial do TeX para que funcione ‘transparente’; a maioria dos ambientes é mais elaborada do que monoblock e muito mais simples do que document.

Um ambiente coloca seu conteúdo dentro de um grupo de TeX,de modo que os comandos usados dentro do ambiente não ‘vazem’ — o ambiente monoblock , acima, restringe seu efeito aos seus próprios conteúdos (o material entre o \begin{monoblock} e o \end{monoblock}), que é exatamente o que você precisa para esse tipo de coisa.

Então, esses são ambientes “simples”; o monoblock, acima, não vai muito além do

{\ttfamily algum texto configurado em espaço simples}
apesar de que muitos ambientes úteis são igualmente simples (de olhar). Alguns, como verbatim, parecem simples, mas na verdade são muito complicados por dentro.

O LaTeX também permite argumentos para um ambiente:

\newenvironment{fontblock}[1]%
  {#1\selectfont}%
  {}
e a utilização de fontblock como em:
\begin{fontblock}{\ttfamily}
produziria o mesmo efeito que o ambiente monoblock.

Ambientes também podem ter argumentos opcionais, da mesma forma que os comandos:

\newenvironment{normaltext}[1][\itshape]%
  {#1}%
  {}
que vai configurar seu corpo em itálico, porém
\begin{normaltext}[\ttfamily]
  ...
\end{normaltext}
vai observar seu argumento opcional e se comportar da mesma maneira que o monoblock com o qual começamos.

Observe que um argumento de ambiente (obrigatório ou opcional) não é passado para o texto final ‘\end’ do ambiente — isso é especificado como uma macro sem argumentos, de modo que

\newenvironment{normaltext}[1][\itshape]%
  {#1}%
  {\typeout{what was #1, again?}
produz uma mensagem de erro
! Número de parâmetro ilegal na definição de \endnormaltext.
Então, se você precisar passar um argumento de ambiente para o código final, você deve embalá-lo em uma macro própria:
\newenvironment{normaltext}[1][Intro]%
  {#1%
   \newcommand{\foo}{#1}}%
  {\typeout{what was \foo{}, again?}

This answer last edited: 2013-02-20


Do you have any question? Ask on: latex.net.br - we love qood questions!