编写一个环境来接受在单个参数 {...} 中传递的逗号分隔的值?

编写一个环境来接受在单个参数 {...} 中传递的逗号分隔的值?

我对 Latex 还比较陌生,很难弄清楚如何将多个逗号分隔的值传递给单个{}参数。对于手头的问题,我需要传递 3 或 4 个单个字符,如{A,B,C}或。我试图在包提供的环境{A,B,C,D}之上定义一个新环境。以下是我感兴趣的主要代码:karnaugh-mapkarnaugh-map

% This does not take in any argument as of yet 
\newenvironment{kmap}{
\begin{karnaugh-map}[4][4][1][$CD$][$AB$]% <-- these environment options are what I want to set via the argument
}%
{\end{karnaugh-map}
\vspace{-2em}}

我感兴趣的用例只有两个:

\begin{kmap}{w,x,y,z} % 4 args passed
% stuff
\end{kmap}

将扩展为

\begin{karnaugh-map}[4][4][1][$yz$][$wx$]
% stuff
\end{karnaugh-map}

\begin{kmap}{P,Q,R} % 3 args passed
% stuff
\end{kmap}

将扩展为

\begin{karnaugh-map}[4][2][1][$QR$][$P$]
% stuff
\end{karnaugh-map}

这看起来可能没有必要,但如果可以完成,我计划在环境/命令中添加很多其他内容。任何帮助都非常感谢。如果可以通过命令而不是环境更轻松地实现这一点,那就太好了!

答案1

您可以\NewDocumentEnvironment使用\SplitArgument

\makeatletter
\NewDocumentEnvironment{kmap}{>{\SplitArgument{3}{,}}m}
  {%
    \kmap@#1%
  }
  {%
    \end{karnaugh-map}
  }
\newcommand\kmap@[4]
  {%
    \IfNoValueTF{#4}
      {\begin{karnaugh-map}[4][2][1][$#2#3$][$#1$]}% only 3 values were given
      {\begin{karnaugh-map}[4][4][1][$#3#4$][$#1#2$]}% 4 values were given
  }
\makeatother

相关内容