%20%D0%B2%20%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%B5%20%D0%B2%20%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8%20%D0%BE%D1%82%20%D0%BE%D0%BF%D1%86%D0%B8%D0%B8%20%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0%20%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%3F.png)
Я новичок и это мой первый пост. Я искал на сайте и не смог найти ответ на свой вопрос. Если есть дубликат вопроса, который я не нашел, пожалуйста, дайте мне знать.
У меня есть шаблон с использованием memoir
класса, и наиболее используемым вариантом является a4paper
или letterpaper
в зависимости от того, кому я отправляю документ.
У меня есть файл стилей в стиле tufte, определяющий различные поля для a4paper
или 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.
и в main.tex
файле я пишу что-то вроде следующего,
\documentclass[letterpaper,11pt,article,twoside]{memoir}
\usepackage[letterpaper]{memtufte}
или
\documentclass[a4paper,11pt,article,twoside]{memoir}
\usepackage[a4paper]{memtufte}
Это работает, но мне придется изменить параметры класса и пакета, чтобы они остались прежними.
Итак, мой первый вопрос: как мне переписать пакет таким образом, чтобы его можно было просто использовать
\usepackage{memtufte}
в основном файле, а поля были бы установлены правильно в соответствии с опцией класса.Второй вопрос: можно ли это обобщить на любые варианты классов (A, B, C, ...), например,
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, ...
Спасибо.
решение1
\ProcessOptions
также считывает глобальные параметры (параметры, заданные в \documentclass
). Таким образом,
\documentclass[a4paper]{memoir}
\usepackage{memtufte}
также запускает обработку опций для a4paper
in memtufte
. Это можно легко проверить, добавив \typeout{}
вызовы в код опций, например:
\DeclareOption{a4paper}{%
...%
\typeout{memtufte:a4paper}%
}
Тогда консоль и .log
файл содержат строку
memtufte:a4paper
Второй вопрос
Обычно глобальные опции (опции, указанные в \documentclass
) передаются в пакет. Таким образом, пакет может читать их через обычный \DeclareOption
:
\DeclareOption{A}{... do something ...}
\ProcessOptions\relax % or \ProcessOptions*