LaTeX3 - 无法定义包选项的默认值

LaTeX3 - 无法定义包选项的默认值

我无法获取包选项的默认值。获取选项默认“字符串”值的好方法是什么?

这是我尝试过的。

% File: main.sty

\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
\ProvidesExplPackage{main}{}{}{}

\RequirePackage{l3keys2e}


\keys_define:nn {main_opts} {
    lang .tl_set:N  = \l_main_opt_lang,
    lang .default:n = \tl_set:Nn\l_main_opt_lang{EN},
}

\ProcessKeysPackageOptions{main_opts}


\NewDocumentCommand{\test}{}{
    LANG = \l_main_opt_lang
}

% LaTeX file to test

\documentclass[12pt,a4paper]{article}

\usepackage[utf8]{inputenc}

\usepackage[lang=FR]{main}   % OK
%\usepackage{main}            % KO

\begin{document}

\test{}

\end{document}

PS:有没有关于布尔和键值选项的包以及使用LaTeX3机器的宏的好教程?

答案1

看起来你不是在寻找默认值,你正在寻找设置最初的价值(至少在l3keys用语上)。

默认如果给出了一个键而没有给出值,则值将变得相关。最初的如果某个键根本没有使用,那么值就变得相​​关。

\begin{filecontents}{main.sty}
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
\ProvidesExplPackage{main}{}{}{}

\RequirePackage{l3keys2e}


\keys_define:nn {main_opts}
  {
    lang .tl_set:N  = \l_main_opt_lang,
    lang .initial:n = EN,
  }

\ProcessKeysPackageOptions{main_opts}


\NewDocumentCommand{\test}{}
  {
    LANG = \l_main_opt_lang
  }
\end{filecontents}

\documentclass[12pt,a4paper]{article}

\usepackage[utf8]{inputenc}

%\usepackage[lang=FR]{main}   % OK
\usepackage{main}            % KO

\begin{document}

\test{}

\end{document}

给出

语言=EN


更多细节来自文档interface3,第 26 章l3keys键值接口

⟨key⟩ .default:n = {⟨default⟩}

为 ⟨key⟩ 创建 ⟨default⟩ 值,当未指定值时使用该值。当仅指定键名时将使用该值,但当指定空白的 ⟨value⟩ 时则不会使用该值:

\keys_define:nn { mymodule }
{
  key .code:n = Hello~#1,
  key .default:n = World
}
\keys_set:nn { mymodule }
{
  key = Fred, % Prints ’Hello Fred’
  key,        % Prints ’Hello World’
  key = ,     % Prints ’Hello ’
}

默认值不会影响需要或禁止输入值的键。因此,必需的值不能由默认值提供,而为无法接受值的键提供默认值不会触发错误。

⟨key⟩ .initial:n = {⟨value⟩}

使用 ⟨value⟩ 初始化 ⟨key⟩,相当于

\keys_set:nn {⟨module⟩} { ⟨key⟩ = ⟨value⟩ }

在这个例子中默认值可能没有多大意义,我可能想通过设置明确地将传递空参数设置为错误.value_required:n = true

\keys_define:nn {main_opts}
  {
    lang .tl_set:N  = \l_main_opt_lang,
    lang .initial:n = EN,
    lang .value_required:n = true,
  }

相关内容