当使用一个特殊包选项值时使用代码

当使用一个特殊包选项值时使用代码

我遗漏了下面肯定是 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}

相关内容