使用 expl3 的具有键值选项的环境

使用 expl3 的具有键值选项的环境

我是新手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}
 }

在适当的位置。

相关内容