我无法获取包选项的默认值。获取选项默认“字符串”值的好方法是什么?
这是我尝试过的。
% 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,
}