Conflito de opções para pacote

Então, você inocentemente adicionou:

\usepackage[draft]{foo}
ao seu documento, e o LaTeX respondeu com
! LaTeX Error: Option clash for package foo.

O erro é uma reclamação sobre carregar mais de uma vez um pacote com opções. O LaTeX reclama porque não tem meios de examinar as opções, e não porque sabe que existe um problema. (Você pode carregar um pacote quantas vezes quiser no preâmbulo de um documento, sem opções, e o LaTeX vai ignorar todos os pedido de carregamento após o primeiro; mas você só pode fornecer opções quando você carregar o pacote pela primeira vez.

Então, talvez você não seja totalmente inocente  — o erro teria ocorrido na segunda linha de:

\usepackage[dvips]{graphics}
\usepackage[draft]{graphics}
o que poderia ser digitado (de forma correta) como:
\usepackage[dvips,draft]{graphics}

Mas se você não tiver cometido esse erro (mesmo com muitas linhas separando os comandos \usepackage, é bem fácil de percebê-lo), o problema pode ter surgido porque alguma outra coisa esta carregando o pacote por você. Como você acha o culpado? A resposta " h" para a mensagem de erro te diz quais opções foram carregadas de cada vez. Fora isso, resta recorrer à análise dos logs discutida em “Como lidar com erros”; o truque é lembrar que o processo de carregar cada arquivo aparece no log entre parênteses; então, se o pacote foo carrega o graphics, o log vai conter algo como:

(/foo.sty ...
...
(/graphics.sty ...
...)
...
)
(os parênteses para graphics estão completamente cercados pelos de foo; o mesmo acontece se sua classe bar for o culpado, só que a linha começará com o caminho para bar.cls).

Se estivermos lidando com um pacote que carrega o pacote no qual você está interessado, você vai precisar pedir ao LaTeX para inserir as opções quando o foo carregá-lo. Em vez de:

\usepackage{foo}
\usepackage[draft]{graphics}
você escreveria:
\PassOptionsToPackage{draft}{graphics}
\usepackage{foo}
O comando \PassOptionsToPackage diz ao LaTeX[[[LBRACE]]][[[RBRACE]]] para se comportar como se suas opções tivessem sido passadas, quando ele finalmente carrega um pacote. Como é de se esperar em função do nome, o \PassOptionsToPackage pode lidar com uma lista de opções, da mesma forma que você teria nos colchetes de opções do \usepackage.

O problema é mais complicado se a classe do documento carregar um pacote para o qual você quer opções. Nesse caso, em vez de:

\documentclass[...]{bar}
\usepackage[draft]{graphics}
você escreveria:
\PassOptionsToPackage{draft}{graphics}
\documentclass[...]{bar}
com \PassOptionsToPackage antes do comando \documentclass.

No entanto, se o pacote foo ou a classe bar carregar o graphics com uma opção dele que entrem em conflito com a que você precisa, você ficará travado. Por exemplo:

\PassOptionsToPackage{draft}{graphics}
onde o pacote ou classe executa:
\usepackage[final]{graphics}
define final depois de ter lidado com a opção que você passou a ele, fazendo com que o seu draft seja esquecido. Em casos extremos, o pacote pode gerar um erro aqui (o graphics não faz esse tipo de coisa, e não há indicação de que o draft tenha sido esquecido).

Nesse caso, você precisa modificar o próprio pacote ou classe (sujeito aos termos de licença). Pode ser útil entrar em contato com o autor: ele pode ter uma alternativa útil para sugerir.


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