Como escrever um comando condicional (se...então) no pacote dependendo da opção de classe do documento?

Como escrever um comando condicional (se...então) no pacote dependendo da opção de classe do documento?

Sou novo e este é meu primeiro post. Procurei no site e não encontrei a resposta para minha dúvida. Se houver uma pergunta duplicada que não encontrei, entre em contato.

Tenho um template usando memoirclass e a opção mais usada é a4paperou letterpaperdependendo para quem envio o documento.

Eu tenho um arquivo de estilo semelhante a um tufo definindo margens diferentes para a4paperor letterpaper.

\ProvidesPackage{memtufte}
\DeclareOption{a4paper}{%
  \settrims{0pt}{0pt}%
  \settypeblocksize{640pt}{310pt}{*}%
  \setlrmargins{63.754pt}{*}{*}%
  \setmarginnotes{16pt}{144pt}{0.7\baselineskip}%
}
\DeclareOption{letterpaper}{%
  \settrims{0pt}{0pt}%
  \settypeblocksize{600pt}{320pt}{*}%
  \setlrmargins{64.1475pt}{*}{*}%
  \setmarginnotes{16pt}{150pt}{0.5\baselineskip}%
}
\ProcessOptions\relax
... ... (and some other settings that are common for a4paper and letterpaper.

e no main.texarquivo eu escrevo algo como o seguinte,

\documentclass[letterpaper,11pt,article,twoside]{memoir}
\usepackage[letterpaper]{memtufte}

ou

\documentclass[a4paper,11pt,article,twoside]{memoir}
\usepackage[a4paper]{memtufte}

Isso funciona; mas tenho que alterar as opções de classe e pacote para mantê-las iguais.

  1. Então minha primeira pergunta é como posso reescrever o pacote de tal forma que eu possa simplesmente usar \usepackage{memtufte}no arquivo principal e a margem será definida corretamente de acordo com a opção de classe.

  2. A segunda questão é se isso pode ser generalizado para qualquer opção de classe (A, B, C, ...), por exemplo,

    if class option is A, then do something, 
    if class option is B and C, do something else,
    if class option is C, do another thing,
    ...
    

Obrigado.

Responder1

\ProcessOptionstambém lê as opções globais (as opções definidas em \documentclass). Por isso,

\documentclass[a4paper]{memoir}
\usepackage{memtufte}

também aciona o tratamento de opções para a4paperin memtufte. Isto pode ser facilmente verificado adicionando \typeout{}chamadas no código de opção, por exemplo:

\DeclareOption{a4paper}{%
  ...%
  \typeout{memtufte:a4paper}%
}

Então o console e .logo arquivo contém a linha

memtufte:a4paper

Segunda questão

Geralmente as opções globais (opções especificadas em \documentclass) são passadas para o pacote. Assim, o pacote pode lê-los via normal \DeclareOption:

\DeclareOption{A}{... do something ...}
\ProcessOptions\relax % or \ProcessOptions*

informação relacionada