如何创建一个带有传递给宏的参数的列表?

如何创建一个带有传递给宏的参数的列表?

直接提问:

\newcommand{\optaxis}[1][]{
   \ifemptyarg{#1}
    {\begin{axis} [xtick={0},   xmin=-1,  xmax =1,  xticklabels={#2},   box plot width=5mm]}
    {\begin{axis} [xtick={0,1}, xmin=-1,  xmax =2,  xticklabels={{#1},{#2}},    box plot width=5mm]}%

}

我怎样才能让这里的部分正常工作 - {{#1},{#2}}- 我遇到了各种错误,似乎无法解决。如果我将其更改为,{test,test2}它就可以正常工作并编译良好。

具体的错误信息为:

您的意思是输入 ## 而不是 #,对吗?


编辑:

我正在尝试使用这里

\makeatletter


\def\ifemptyarg#1{%
  \if\relax\detokenize{#1}\relax % H. Oberdiek
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi}

\makeatother

\newcommand{\optaxis}[1][]{
   \ifemptyarg{#2}
    {\begin{axis} [xtick={0},   xmin=-1,  xmax =1,  xticklabels={#1},   box plot width=5mm]}
    {\begin{axis} [xtick={0,1}, xmin=-1,  xmax =2,  xticklabels={{#1},{#2}},    box plot width=5mm]}
}

我希望能够像这样调用它:

\optaxis{test1}
\optaxis{test1, test2}

并分别进行调用。

答案1

您已定义一个带有一个参数的命令

\newcommand{\optaxis}[1][]{

所以你不能使用#2

我怀疑你只是想要

\newcommand{\optaxis}[1][]{%%%
 \begin{axis} [xtick={0},   xmin=-1,  xmax =1,  xticklabels={#1},   box plot width=5mm]}

以便

\optaxis

xticklabels={}

\optaxis[test1]

xticklabels={test1}

\optaxis[test1,test2]

xticklabels={test1,test2}

或者可能根本没有可选参数,因此

\newcommand{\optaxis}[1]{%%%
 \begin{axis} [xtick={0},   xmin=-1,  xmax =1,  xticklabels={#1},   box plot width=5mm]}

以便

\optaxis{test1}

xticklabels={test1}

\optaxis{test1,test2}

xticklabels={test1,test2}

相关内容