如果类中未指定任何语言,是否可以使用默认语言加载 babel?

如果类中未指定任何语言,是否可以使用默认语言加载 babel?

我想编写一个类,babel用默认语言加载包,但该语言可以被类选项中指定的语言覆盖。MWE:

\RequirePackage{filecontents}
\begin{filecontents}{test.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{test}[2015/09/22 v0 testclass]

\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions\relax
\LoadClass{article}

\RequirePackage{babel}
%% or
%% \RequirePackage[english]{babel}

\end{filecontents}

\documentclass[a4paper, english]{test}
%% or 
%% \documentclass{test}

\begin{document}
\Huge We are typing in \languagename. 
\end{document}

按照书写,babel加载了英文(如预期)。但如果我省略english选项,就会收到来自 babel 的错误(逻辑上)。

问题是,如果我\RequirePackage[english]{babel}在课堂中使用,我无法覆盖它 --- 例如:

\RequirePackage{filecontents}
\begin{filecontents}{test.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{test}[2015/09/22 v0 testclass]

\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions\relax
\LoadClass{article}
\RequirePackage[english]{babel}
\end{filecontents}

\documentclass[a4paper, spanish]{test}
\begin{document}
\Huge We are typing in \languagename. 
\end{document}

...仍在打印“英语”。

是否有一种通用的方法可以通用地解决这个问题,或者我唯一的选择是使用\DeclareOption我感兴趣的每种语言并以不同的方式创建大\if负载babel

为了更好地解释 --- 我知道如何提供\DeclareOption一种明确设置 babel 默认值的方法,例如jon 的回答.但假设我希望班级的用户可以这样做:

\documentclass[a4paper, whatever]{test}  %% babel default to english

或者

\documentclass[a4paper, whatever, turkish, serbian, italian]{test}
%% ...and now babel is called with [turkish, serbian, italian] options 

我现在的做法是要求包babel不带任何选项,如果用户没有在类选项中指定至少一种语言,则让它失败……并记录下来。但如果有一个默认值就好了……

答案1

我不确定这是否是你想要的,但是像这样的事情怎么样:

\RequirePackage{filecontents}
\begin{filecontents}{langtest.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{langtest}[2015/09/22 v0 testclass]

\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\DeclareOption{spanish}{\PassOptionsToPackage{english,main=spanish}{babel}}
\DeclareOption{english}{\PassOptionsToPackage{english}{babel}}
\ExecuteOptions{english} % set default value as "english"


\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions\relax
\LoadClass{article}
\RequirePackage{babel}

\end{filecontents}

\documentclass[a4paper, ngerman, spanish]{langtest}
\begin{document}
\Huge We are typing in \languagename.
\end{document}

在我的emacs输出缓冲区中,我看到:

(/usr/local/texlive/2015/texmf-dist/tex/latex/base/size10.clo))                 
(/usr/local/texlive/2015/texmf-dist/tex/generic/babel/babel.sty                 
(/usr/local/texlive/2015/texmf-dist/tex/generic/babel-german/ngerman.ldf        
(/usr/local/texlive/2015/texmf-dist/tex/generic/babel-german/ngermanb.ldf       
(/usr/local/texlive/2015/texmf-dist/tex/generic/babel/babel.def)))              
(/usr/local/texlive/2015/texmf-dist/tex/generic/babel-english/english.ldf)      
(/usr/local/texlive/2015/texmf-dist/tex/generic/babel-english/english.ldf)      
(/usr/local/texlive/2015/texmf-dist/tex/generic/babel-spanish/spanish.ldf)      
(/usr/local/texlive/2015/texmf-dist/tex/generic/babel-spanish/spanish.ldf)))

答案2

我来到这里,我的问题的解决方案是这样的:

RequirePackage命令中指定的最后一种语言babel是默认语言。使用此命令,它将加载西班牙语和英语,并将英语作为默认语言:

\RequirePackage[spanish,english]{babel}

相关内容