我想编写一个类,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}