当使用文档命令参数进行大小写区分时,我经常使用函数\str_case:nn
,从命令的输出可以看出,该函数运行良好\myStrCase
。当尝试使用该\tl_case:Nn
函数时,通过将参数加载到_tl
类型变量中,事情就变得非常糟糕。变量似乎加载了正确的值,并且就函数而言被标记为正确\tl_case:Nn
,但相应的代码并未执行。为什么?
\documentclass{article}
%=======================
\usepackage[check-declarations,log-functions]{expl3}
\usepackage{xparse}
%-----------------------
\ExplSyntaxOn
\tl_new:N \l_rn_Aux_tl
\NewDocumentCommand\myStrCase{O{emph}m}
{
\str_case:nnTF {#1}
{
{emph}{\textit{#2}}
{Emph}{\textbf{\textit{#2}}}
{uline}{\underline{#2}}
}
{}
{!~ERROR:~parameter~\#1~=~#1~invalid}
} % \myStrCase
\NewDocumentCommand\myTlCase{O{emph}m}
{
\tl_set:Nx \l_rn_Aux_tl {#1}
checking~what~was~passed:~\l_rn_Aux_tl \\
\tl_case:NnTF \l_rn_Aux_tl
{
emph {\textit{#2}}
Emph {\textbf{\textit{#2}}}
uline {\underline{#2}}
}
{parameter~\#1~=~#1~valid}
{!~ERROR:~parameter~\#1~=~#1~invalid}
} % \myTlCase
\ExplSyntaxOff
%-----------------------
\begin{document}
\subsection{using str\_case:}
\myStrCase{Hi There}\\
\myStrCase[emph]{Hi There}\\
\myStrCase[Emph]{Hi There}\\
\myStrCase[uline]{Hi There}\\
\myStrCase[xxx]{Hi There}
\subsection{using tl\_case:}
\myTlCase[emph]{Hi There}\\
\myTlCase[xxx]{Hi There}
\end{document}
答案1
文档(interface3)已经包含您的答案:
\tl_case:NnTF <test token list variable>
{
<token list variable case1> {<code case1>}
<token list variable case2> {<code case2>}
...
<token list variable casen> {<code casen>}
}
{<true code>}
{<false code>}
您将在其中找到“标记列表变量”而不是“标记列表”。因此,要求您提供一个标记(变量/N 类型参数)。因此,要使用此构造,您需要将选项保存到变量中并在 中使用这些选项\tl_case
。