%20in%20ein%20Paket%2C%20abh%C3%A4ngig%20von%20der%20Dokumentklassenoption%3F.png)
Ich bin neu und dies ist mein allererster Beitrag. Ich habe die Site durchsucht und konnte keine Antwort auf meine Frage finden. Wenn es eine doppelte Frage gibt, die ich nicht gefunden habe, lassen Sie es mich bitte wissen.
Ich habe eine Vorlage mit memoir
Klasse und die am häufigsten verwendete Option ist a4paper
oder, letterpaper
je nachdem, an wen ich das Dokument sende.
Ich habe eine tufte-ähnliche Stildatei, die unterschiedliche Ränder für a4paper
oder definiert 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.
und in main.tex
die Datei schreibe ich so etwas wie das Folgende,
\documentclass[letterpaper,11pt,article,twoside]{memoir}
\usepackage[letterpaper]{memtufte}
oder
\documentclass[a4paper,11pt,article,twoside]{memoir}
\usepackage[a4paper]{memtufte}
Das funktioniert, aber ich muss sowohl die Klassen- als auch die Paketoptionen ändern, damit sie gleich bleiben.
Meine erste Frage lautet also, wie ich das Paket so umschreiben kann, dass ich es einfach
\usepackage{memtufte}
in der Hauptdatei verwenden kann und der Rand entsprechend der Klassenoption richtig festgelegt wird.Die zweite Frage ist, ob dies auf alle Klassenoptionen (A, B, C, ...) verallgemeinert werden kann, z. B.
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, ...
Danke.
Antwort1
\ProcessOptions
liest auch die globalen Optionen (die in gesetzten Optionen \documentclass
). Daher
\documentclass[a4paper]{memoir}
\usepackage{memtufte}
löst auch die Optionenbehandlung für a4paper
in aus memtufte
. Dies lässt sich leicht überprüfen, indem man \typeout{}
Aufrufe im Optionscode hinzufügt, z. B.:
\DeclareOption{a4paper}{%
...%
\typeout{memtufte:a4paper}%
}
Dann enthält die Konsole und .log
die Datei die Zeile
memtufte:a4paper
Zweite Frage
Normalerweise werden globale Optionen (in angegebene Optionen \documentclass
) an das Paket übergeben. Das Paket kann sie daher über das normale lesen \DeclareOption
:
\DeclareOption{A}{... do something ...}
\ProcessOptions\relax % or \ProcessOptions*