如果矩阵条目周围没有额外的括号,则以下代码无法编译,但我不知道原因。我可以修改\switcher
以消除这些额外括号的需要吗?
\documentclass{article}
\usepackage{amsmath}
\newcommand{\switcher}[2][]
{
\ifx&%
#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
摘自带有和不带有可选参数的不同命令定义而其他宝石也存在于检查空的宏参数。