¿Cómo escribir un comando condicional (si... entonces) en el paquete dependiendo de la opción de clase de documento?

¿Cómo escribir un comando condicional (si... entonces) en el paquete dependiendo de la opción de clase de documento?

Soy nuevo y este es mi primer post. Busqué en el sitio y no pude encontrar la respuesta a mi pregunta. Si hay una pregunta duplicada que no encontré, hágamelo saber.

Tengo una plantilla usando memoirclass y la opción más utilizada es a4papero letterpaperdependiendo a quién le envío el documento.

Tengo un archivo de estilo tipo mechón que define diferentes márgenes para a4papero 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.

y en main.texel archivo escribo algo como lo siguiente,

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

o

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

Esto funciona; pero tengo que cambiar las opciones de clase y paquete para mantenerlas iguales.

  1. Entonces, mi primera pregunta es cómo puedo reescribir el paquete de tal manera que simplemente pueda usarlo \usepackage{memtufte}en el archivo principal y el margen se establezca correctamente según la opción de clase.

  2. La segunda pregunta es si esto se puede generalizar a alguna opción de clase (A, B, C, ...), por ejemplo,

    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,
    ...
    

Gracias.

Respuesta1

\ProcessOptionstambién lee las opciones globales (las opciones configuradas en \documentclass). De este modo,

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

también activa el manejo de opciones para a4paperin memtufte. Esto se puede verificar fácilmente agregando \typeout{}llamadas en el código de opción, por ejemplo:

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

Entonces la consola y .logel archivo contienen la línea

memtufte:a4paper

Segunda pregunta

Por lo general, las opciones globales (opciones especificadas en \documentclass) se pasan al paquete. Por lo tanto, el paquete puede leerlos mediante el modo normal \DeclareOption:

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

información relacionada