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