我无法获取基于 的自定义类的默认参数memoir
。我希望能够定义一些默认选项(a4paper
,danish
),但我希望能够\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
会覆盖它。