可选参数未通过 expl3 键赋值设置为 \makebox

可选参数未通过 expl3 键赋值设置为 \makebox

我想要的基本想法是创建一个键来传递一个值,该值将告知\makebox框中的内容应如何对齐。这里失败了。

预期的内容\makebox并未作为参数传递,\makebox并且我似乎忽略了或将密钥的随机组件插入到文本中。

这里发生了什么事?

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn

\tl_new:N  \l_aefl_position_tl
\tl_set:Nn \l_aefl_position_tl { [l] }

\keys_define:nn { aefl }
    {
        pos   .code:n   = {
                            \str_case:nnn { #1 }
                            {
                                { left   } { \tl_set:Nn \l_aefl_position_tl {[l]} }
                                { center } { \tl_set:Nn \l_aefl_position_tl {}    }
                            }
                            {
                                { right } { \tl_set:Nn \l_aefl_position_tl {[r]} }
                            }
                          },
    }

\NewDocumentCommand{\aecurrfile}{ o }
    {
        \group_begin:
        \IfNoValueF{#1}{\keys_set:nn { aefl }{#1}}

        \makebox[0pt] \l_aefl_position_tl
                      { contents ~ of ~ my ~ box }
        \group_end:
    }

\ExplSyntaxOff
\pagestyle{empty}
\begin{document}

\begin{tabular}{lcl}
unexpected & \verb=[l]=      & \aecurrfile                        \\
unexpected & \verb=[l]=      & Front \aecurrfile[pos=left] Back   \\
           &                 & Front \aecurrfile[pos=center] Back \\
unexpected & \verb=right[l]= & Front \aecurrfile[pos=right] Back
\end{tabular}

\end{document}

编辑

最后,我明白为什么我会得到意外就在我的输出中。啊!

答案1

你的问题是,当 LaTeX 寻找可选参数时,它需要找到一个文字 [并且没有存储在任何东西中。所以你需要在查找\l_aefl_position_tl之前展开\makebox。我可能会选择类似

\use:x { \exp_not:N \makebox [0pt] \l_aefl_position_tl }

正如您所知,的内容\l_aefl_position_tl是“安全”的。

答案2

我会简化业务。;-)

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn

\tl_new:N  \l_aefl_position_tl
\tl_set:Nn \l_aefl_position_tl { \makebox[0pt][l] }

\keys_define:nn { aefl }
 {
  pos .choice:,
  pos / left   .code:n = \tl_set:Nn \l_aefl_position_tl { \makebox[0pt][l] },
  pos / right  .code:n = \tl_set:Nn \l_aefl_position_tl { \makebox[0pt][r] },
  pos / center .code:n = \tl_set:Nn \l_aefl_position_tl { \makebox[0pt]    },
 }

\NewDocumentCommand{\aecurrfile}{ O{} }
 {
  \group_begin:
  \keys_set:nn { aefl } { #1 }
  \tl_use:N \l_aefl_position_tl { contents ~ of ~ my ~ box }
  \group_end:
 }

\ExplSyntaxOff
\pagestyle{empty}
\begin{document}
\begin{center}
\parbox{10cm}{
Default:\\
\aecurrfile

Left:\\
\aecurrfile[pos=left]

Center:\\
\aecurrfile[pos=center]

Right:\\
\aecurrfile[pos=right]

}
\end{center}
\end{document}

在此处输入图片描述

相关内容