以 foreach 方式重复使用 DeclarePairedDelimiter

以 foreach 方式重复使用 DeclarePairedDelimiter

我想以 foreach 循环方式重用 mathtools DeclarePairedDelimiter,但我之前从未进行过任何低级 (La)TeXing。这是我的代码:

\documentclass{article}

\usepackage{mathtools}
\usepackage{expl3}

\ExplSyntaxOn
    \clist_map_inline:nn{angle,brace,brack,paren,vert,Vert}
    {
        \expandafter\DeclarePairedDelimiter
        \csname lr#1A\endcsname
        {{\csname l#1\endcsname}}
        {{\csname r#1\endcsname}}

        \expandafter\DeclarePairedDelimiter
        \csname lr#1B\endcsname
        {\csname l#1\endcsname}
        {\csname r#1\endcsname}
    }
\ExplSyntaxOff

\begin{document}
\[
    \lrparenA{\frac{x}{y}}\quad
    \lrparenA*{\frac{x}{y}}\quad% <- doesn't work
    \lrparenA[\Bigg]{\frac{x}{y}}\quad
    \lrparenB{\frac{x}{y}}\quad
    \lrparenB*{\frac{x}{y}}\quad
    \lrparenB[\Bigg]{\frac{x}{y}}% <- doesn't work
\]
\end{document}

我不知道为什么第一个解决方案不适用于星型版本,为什么第二个解决方案不适用于可选参数。

有没有像我尝试过的那样重用实现的通用方法?假设我想重用 xparse 中的 NewDocumentCommand,例如

\NewDocumentCommand{\I}{E{_^}{{a+}{\alpha}}m}{
    {\mathrm{I}_{#1}^{#2}#3}
}

其中将\I被改为\<some letter>\mathrm{I}\mathrm{<some letter>}

也许我必须使用 pgffor?

答案1

我建议采用不同的方法expl3,而不将传统编程与之混合:

\documentclass{article}

\usepackage{mathtools}
\usepackage{xparse} % also loads expl3

\ExplSyntaxOn
\NewDocumentCommand{\definedelimiters}{m}
 {
  \clist_map_inline:nn { #1 }
   {
    \serafiel_definedelimiters:ccc { lr##1 } { l##1 } { r##1 }
   }
 }
\cs_new_protected:Nn \serafiel_definedelimiters:NNN
 {
  \DeclarePairedDelimiter #1 #2 #3
 }
\cs_generate_variant:Nn \serafiel_definedelimiters:NNN { ccc }
\ExplSyntaxOff

\definedelimiters{angle,brace,brack,paren,vert,Vert}

\begin{document}
\[
    \lrparen{\frac{x}{y}}\quad
    \lrparen*{\frac{x}{y}}\quad% <- doesn't work
    \lrparen[\Bigg]{\frac{x}{y}}\quad
\]
\end{document}

您的定义的问题是明确使用\csname以及使用附加括号。

在此处输入图片描述

我不会对第二个请求发表任何评论,因为它不太清楚。问一个更精确(不同)的问题:就目前情况而言,的定义\I不起作用。

相关内容