Programando classes e pacotes
Origem: Tex-Br, a enciclopédia livre.
Algumas vezes temos um conjunto de macros que fazem coisas que outros poderão querer fazer. Isso dá margem à programação de um pacote ou uma classe personalizados.
Não é difícil criar uma classe ou pacote. Basicamente, é um arquivo com uma extensão específica (.sty para pacotes, .cls para classes), com alguns comandos especiais que o especificam como classe ou pacote, e definições e redefinições de comandos. Isso significa que é necessário saber como definir comandos.
Conteúdo |
Cabeçalho básico
Uma classe ou pacote inicia em geral com esse comando:
\NeedsTeXFormat{LaTeX2e}[yyyy/mm/dd]
Que especifica que estamos definindo algo para para o LaTeX 2ε. Opcionalmente pode-se especificar a versão do LaTeX necessária, em termos da data.
Em seguida, vem a especificação da nossa classe ou pacote:
\ProvidesClass{nome}[versão]
\ProvidesPackage{nome}[versão]
Somente um desses comandos deverá ser usado, dependendo do que se está criando. Os argumentos são o nome e opcionalmente uma versão, que deve iniciar com uma data no formato yyyy/mm/dd.
Depois disso, o resto são as definições da classe ou do pacote.
Carregando pacotes
Caso a sua classe ou pacote precise da funcionalidade de um pacote já existente, é possível carregá-lo dessa forma:
\RequirePackage[opções]{pacote}[versão]
Onde opções são as opções passadas ao pacote, pacote é o nome do pacote, e versão, se especificado, é a versão mínima necessária do pacote.
Usando opções
Muitas classes e pacotes podem ser configuradas usando-se opções. Isso é feito declarando as opções, o que associa a elas um código. Quando essa opção for passada, esse código será executado.
Para declarar uma opção, use
\DeclareOption{opção}{código}
\DeclareOption*{código}
O segundo comando define o código a ser executado para todas as outras opções não declaradas.
Dentro do código, é possível acessar o nome da opção através do comando \CurrentOption.
Declarar uma opção não faz com que o código seja executado automaticamente. É necessário, depois de declarar a opção, executá-la. Isso é feito com os comandos
\ExecuteOptions{opções}
\ProcessOptions
\ProcessOptions*
O primeiro executa os códigos para as opções especificadas que foram informadas pelo usuário. O segundo executa o código de todas as opções, na ordem em que foram desenvolvidas. O terceiro executa todas as opções, na ordem em que foram informadas pelo usuário.
É possível também passar uma opção para um pacote carregado pelo pacote/classe sendo definido, ou para a classe base em que se baseia a classe que está definida (mais sobre isso abaixo). Para isso, usam-se os comandos
\PassOptionsToClass{opções}{classe}
\PassOptionsToPackage{opções}{pacote}
Criando uma classe derivada
Dificilmente se cria uma classe totalmente do zero. Para isso seria necessário definir um número muito grande de comandos, e além disso, em geral não precisamos de alterações tão grandes, queremos apenas fazer algumas alterações numa classe já existente. Para isso, definimos uma classe derivada de uma já existente, adicionando as nossas melhorias e modificações.
Isso é feito com o comando
\LoadClass[opções]{classe}[versão]
Onde opções são as opções passadas à classe, classe é o nome da classe, e versão, se especificado, é a versão mínima necessária do pacote. Naturalmente, só pode haver um comando \LoadClass por classe.
Muitas vezes se deseja repassas as opções passadas à nossa classe para a classe base. Isso é feito com os comandos descritos acima, dessa forma:
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{classe}}
\ProcessOptions*
Isso deverá aparecer antes de \LoadClass para funcionar.
