我是新手expl3
,想创建一个具有各种键值参数的环境。目前,我正在努力检测是否设置了键。
\documentclass{article}
\usepackage{xparse,graphicx}
\ExplSyntaxOn
% keys
\keys_define:nn { mybodule/bfigure }
{
caption .tl_set:N = \l_mybodule_caption,
shift .dim_set:N = \l_mybodule_shift ,
shift .default:n = 0em
}
\NewDocumentEnvironment{bfigure}{O{}}{
\keys_set:nn { mybodule/bfigure } { #1 }
\tl_if_empty:NTF \l_mybodule_caption {true} {false}
}{}
\ExplSyntaxOff
\begin{document}
\begin{bfigure}[caption=mycaption]
\includegraphics[width=3cm]{example-grid-100x100pt}
\end{bfigure}
\end{document}
实现该if caption set then ... else ...
部分的正确方法是什么?我是否正确使用了\keys_define
和\keys_set:nn
?
答案1
由于您在环境内使用这些键,因此您不必担心它们在不同环境中的初始值,因为一旦环境结束,分配的值就会被遗忘。
例如
\documentclass{article}
\usepackage{xparse,graphicx}
\ExplSyntaxOn
% keys
\keys_define:nn { mybodule/bfigure }
{
caption .tl_set:N = \l_mybodule_caption_tl,
shift .dim_set:N = \l_mybodule_shift_dim,
}
\NewDocumentEnvironment{bfigure}{O{}}
{
\keys_set:nn { mybodule/bfigure } { #1 }
\tl_if_empty:NTF \l_mybodule_caption_tl {true} {false}
}
{}
\ExplSyntaxOff
\begin{document}
\begin{bfigure}
\includegraphics[width=1cm]{example-grid-100x100pt}
\end{bfigure}
\begin{bfigure}[caption=mycaption]
\includegraphics[width=1cm]{example-grid-100x100pt}
\end{bfigure}
\begin{bfigure}
\includegraphics[width=1cm]{example-grid-100x100pt}
\end{bfigure}
\end{document}
将产生
请使用正确的命名约定,以变量类型结尾每个变量的名称。
请.default
注意不是为键指定的初始值,但如果=
键后面没有符号,则分配该值。如果要为键分配初始值,以便在未提供键时使用,请使用
shift .initial = 12pt,
或任何值。0pt
无需声明为初始值,因为dim
变量被初始化为零,就像tl
变量被初始化为空一样。
如果要在设置键后打印标题,请执行以下操作
\tl_if_empty:NF \l_mybodule_caption_tl
{
\caption{\l_mybodule_caption_tl}
}
在适当的位置。