自定义回忆录类中的默认选项

自定义回忆录类中的默认选项

我无法获取基于 的自定义类的默认参数memoir。我希望能够定义一些默认选项(a4paperdanish),但我希望能够\documentclass在 tex 文档中调用时覆盖它们。我该如何解决这个问题?

附言:我删除了之前的一个类似问题,因为这个问题的原因是一个简单的语法错误。但这里的情况并非如此。

测试类.cls

% identification
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{testclass}[2013/12/02 testclass]

% declaration of options
\DeclareOption{danish}{%
  \PassOptionsToPackage{danish}{babel}}

\DeclareOption{english}{%
  \PassOptionsToPackage{english}{babel}}

\DeclareOption*{%
  \PassOptionsToClass{\CurrentOption}{memoir}}

\ExecuteOptions{a4paper,danish}

% execution of options
\ProcessOptions

% package loading
\LoadClass{memoir}
\RequirePackage[utf8]{inputenc}
\RequirePackage[T1]{fontenc}
\RequirePackage{babel}
\RequirePackage{lmodern}
\RequirePackage{amsmath,amssymb,amsthm}
\RequirePackage{siunitx}
\RequirePackage{tikz}
\RequirePackage{graphicx}

% main code
\@ifpackagewith{babel}{danish}{%
  \renewcommand\danishhyphenmins{22}}

%\setlrmarginsandblock{4cm}{*}{1}
%\setulmarginsandblock{3cm}{*}{1}
%\checkandfixthelayout[nearest]

\makepagestyle{testclass}
\makeoddhead{testclass}{\@author}{}{\today}
\makeheadrule{testclass}{\textwidth}{\normalrulethickness}
\makeoddfoot{testclass}{}{\thepage / \pageref{Lastpage}}{}
\pagestyle{testclass}

测试.tex

\documentclass{testclass}
\author{name}
\begin{document}
\section*{Test}
\subsection*{a}
\end{document}

答案1

在类中加载永远不是一个好主意babel,因为这会导致没有其他语言可以使用,除非有人有尴尬的代码

\PassOptionsToPackage{lsorbian}{babel}
\documentclass{testclass}

然而,问题是,当加载包时,全局选项总是被首先处理。所以,如果你说

\documentclass[english]{testclass}

danish之后将处理默认选项english,因此无论如何主要文档语言将是丹麦语。

除了danish按照默认选项执行之外,您还可以采用不同的方式执行:

% identification
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{testclass}[2013/12/02 testclass]

% declaration of options
\newif\ifdext@languagechosen

\DeclareOption{english}{%
  \PassOptionsToPackage{english}{babel}
  \dext@languagechosentrue
}
\DeclareOption{danish}{%
  \PassOptionsToPackage{danish}{babel}
  \dext@languagechosentrue
}

\DeclareOption*{%
  \PassOptionsToClass{\CurrentOption}{memoir}}

\PassOptionsToClass{a4paper}{memoir}

% execution of options
\ProcessOptions

% package loading
\LoadClass{memoir}
\RequirePackage[utf8]{inputenc}
\RequirePackage[T1]{fontenc}
\ifdext@languagechosen
  \RequirePackage{babel}
\else
  \RequirePackage[danish]{babel}
\fi
\RequirePackage{lmodern}
\RequirePackage{amsmath,amssymb,amsthm}
\RequirePackage{siunitx}
\RequirePackage{tikz}
\RequirePackage{graphicx}

% main code
\@ifpackagewith{babel}{danish}{%
  \renewcommand\danishhyphenmins{22}}

%\setlrmarginsandblock{4cm}{*}{1}
%\setulmarginsandblock{3cm}{*}{1}
%\checkandfixthelayout[nearest]

\makepagestyle{testclass}
\makeoddhead{testclass}{\@author}{}{\today}
\makeheadrule{testclass}{\textwidth}{\normalrulethickness}
\makeoddfoot{testclass}{}{\thepage / \pageref{Lastpage}}{}
\pagestyle{testclass}

因此,如果您加载testclass时没有语言选项,丹麦语将成为主要(且唯一可用)语言。以下是其他可能性:

  • \documentclass[danish]{testclass}:主要(且唯一)语言丹麦语
  • \documentclass[english]{testclass}:主要(且唯一)语言英语
  • \documentclass[english,danish]{testclass}: 主要语言 丹麦语
  • \documentclass[danish,english]{testclass}: 主要语言 英语

但是,我还是不会强迫用户做出如此有限的选择,我宁愿babel在文档中没有加载时警告他们。 连字最小值的设置可以通过以下方式完成

\AtBeginDocument{%
  \@ifpackagewith{babel}{danish}{%
    \renewcommand\danishhyphenmins{22}}%
}

然而这根据danish.ldf,这是丹麦语的默认设置,因此此设置是多余的。

还要注意设置 A4 纸的不同方法,因为默认letterpaper选项memoir会覆盖它。

相关内容