\@ e @ em nomes de macro

Nomes de macros contendo @ são para uso interno do LaTeX e, sem tratamento especial, não funcionam em utilização normal. Um bom exemplo dos problemas causados é discutido em \@ no modo vertical”.

Os problemas que os usuários veem são causados quando se cópia partes de uma classe (arquivo cls) ou de um pacote (arquivo sty) para um documento, ou quando se inclui um arquivo de classe ou de pacote em um documento LaTeX por algum outro meio que não seja \documentclass ou \usepackage. O LaTeX define comandos internos cujos nomes contêm o caractere @ para evitar conflitos entre seus nomes internos e nomes que normalmente utilizamos em nossos documentos. Para que esses comandos funcionem, \documentclass e \usepackage jogam com o significado de @.

Se você incluiu um arquivo de outra maneira (por exemplo, usando \input), você provavelmente pode resolver o problema usando o comando correto.

Se você estiver usando um fragmento de um pacote ou de uma classe, você pode se sentir confuso: livros, tais como a primeira edição do The LaTeX Companion, estão cheios de fragmentos de pacotes como exemplos para você empregar. A segunda edição do Companion torna mais claro como você deve usar esses fragmentos; além disso, o código de todos os exemplos está disponível no CTAN. Para ver a técnica na prática, veja o exemplo abaixo, do arquivo 2-2-7.ltx no diretório de exemplos do Companion:

\makeatletter
\renewcommand\subsection{\@startsection
  {subsection}{2}{0mm}%name, level, indent
  {-\baselineskip}%             beforeskip
  {0.5\baselineskip}%            afterskip
  {\normalfont\normalsize\itshape}}% style
\makeatother
(Esse exemplo aparece na página 29 de The LaTeX Companion, segunda edição.)

A alternativa é tratar todos esses fragmentos como um pacote, agrupando-os em um arquivo sty e incluindo-os com \usepackage; dessa forma, você esconde o código interno de seu LaTeX em algum lugar esperado, o que, frequentemente, parece ‘mais arrumado’.

Examples from the Companion
tlc2

This answer last edited: 2011-06-01


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