在 bmatrix 中使用 ifx 宏

在 bmatrix 中使用 ifx 宏

如果矩阵条目周围没有额外的括号,则以下代码无法编译,但我不知道原因。我可以修改\switcher以消除这些额外括号的需要吗?

\documentclass{article}
    \usepackage{amsmath}

    \newcommand{\switcher}[2][]
    {
        \ifx&#1&%
            #2
        \else
            #1
        \fi
    }

\begin{document}

\[
    \begin{bmatrix}
        {\switcher{2}} \\
        {\switcher[1]{2}}
    \end{bmatrix}
\]

\end{document}

答案1

如果您尝试判断可选参数是否为空,则以下是更好的方法:

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath}% http://ctan.org/pkg/amsmath

\makeatletter
\def\ifemptyarg#1{%
  \if\relax\detokenize{#1}\relax % https://tex.stackexchange.com/q/308/5764
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi}
\makeatother

\newcommand{\switcher}[2][]{%
  \ifemptyarg{#1}
    {#2}% Empty optional argument
    {#1}% Non-empty optional argument
}

\begin{document}

\[
  \begin{bmatrix}
    \switcher{2} \\
    \switcher[1]{2}
  \end{bmatrix} \qquad
  \begin{bmatrix}
    \switcher{a} & \switcher[b]{c} & \switcher[]{d} & \switcher{e} \\
    \switcher[f]{} & \switcher{} & \switcher[]{} & \switcher[g]{h}
  \end{bmatrix}
\]

\end{document}

以上\ifemptyarg摘自带有和不带有可选参数的不同命令定义而其他宝石也存在于检查空的宏参数

相关内容