我遗漏了下面肯定是 M(不是)WE 的代码。
当使用该选项时auto
,我想实现\babellang
让我感到羞愧的“有趣”宏中的操作。我把它放出来是为了展示我想要实现的目标。
还有一个问题。 相当于LaTeX3
什么\@ifpackageloaded
?不!请参阅下面 Cicada 的评论。
\begin{filecontents}{main.sty}
\RequirePackage{l3keys2e}
\ProvidesExplPackage{main}{}{}{}
% -- OPTIONS - MESSAGES -- %
\msg_set:nnnn { main } { options-unknown-lang }
{ Unknown ~ language. }
{ Languages ~ supported: ~ [FR]-ench ~ and ~ [EN]-glish. }
\msg_set:nnnn { main } { options-babel-not-loaded }
{ Unknown ~ language. }
{ Languages ~ supported: ~ [FR]-ench ~ and ~ [EN]-glish. }
% -- OPTIONS - KEYS & VALUES -- %
\NewDocumentCommand{ \babellang }{}{
\@ifpackageloaded{babel}{
\str_case_e:nF { \languagename } {
% French
{ french }{
\tl_set:Nn \l_main_opt_lang { FR }
}
% English
{ english }{
\tl_set:Nn \l_main_opt_lang { EN }
}
% Unsupported
}{
\msg_fatal:nn { main } { options-unknown-lang }
}
}{
\msg_fatal:nn { main } { options-babel-not-loaded }
}
}
\keys_define:nn { main } {
lang .choices:nn =
{ auto, FR, EN }
{
\tl_set:Nn \l_main_opt_lang { \tl_use:N \l_keys_choice_tl }
},
lang .initial:n = auto,
lang / auto .code:n = \babellang,
lang / unknown .code:n =
\msg_error:nnxxx { main } { options-unknown-lang }
{ lang } % Name of choice key
{ FR, EN } % Valid choices
{ \exp_not:n {#1} } % Invalid choice given
}
% -- OPTIONS - KEYS FROM THE LOADING OF THE PACKAGE -- %
\ProcessKeysPackageOptions{ main }
\NewDocumentCommand{ \test }{}{
LANG = \l_main_opt_lang
}
\end{filecontents}
\documentclass{article}
\usepackage[english]{babel} % KO if it is commented.
%\usepackage[lang = ILLEGAL]{main} % OK
%\usepackage[lang = FR]{main} % OK
%\usepackage[lang = EN]{main} % OK
\usepackage{main} % KO
\begin{document}
\test
\end{document}