嵌入命令导致 \equal 参数有额外的 } 错误

嵌入命令导致 \equal 参数有额外的 } 错误

我正在尝试制作一个宏(\ls),它将关键字转换为其等效逻辑符号的数学模式版本。我已经找到了一种方法来让它正常工作,除非它在另一个函数的参数中(\bda将参数组织成 lambda 演算函数),在这种情况下它会给我一个

argument of \equal has extra }

错误。请注意,如果仅使用主文档中的前两行,则它们都会导致正确的输出,而只有第三行这样的情况才会导致此错误。

\documentclass[10pt]{article}
\usepackage[margin = 1in]{geometry}
\usepackage[T1]{fontenc}
\usepackage{mathtools} 
\usepackage{stmaryrd}
\usepackage{amsmath}
\usepackage{ifthen}

\newcommand{\mm}[1]{$#1$}
\newcommand{\ifis}[4]{\ifthenelse{\equal{#1}{#2}}{#3}{#4}}
\newcommand{\mmifis}[4]{\ifis{#1}{#2}{\mm{#3}}{#4}}

\newcommand{\ls}[1]%
{\mmifis    {#1}    {and}
            {\land}
{\mmifis    {#1}    {or}
            {\lor}
{\mmifis    {#1}    {in}
            {\in}
{\mmifis    {#1}    {subset}
            {\subseteq}
{\mmifis    {#1}    {psubset}
            {\subset}
{\mmifis    {#1}    {not}
            {\neg}
{\mmifis    {#1}    {exists}
            {\exists}
{\mmifis    {#1}    {forall}
            {\forall}
{???}}}}}}}}}

\begin{document}

\ls{and}
\bda{z}{e}{$\land$}{k}
\bda{z}{e}{\ls{and}}{k}

\end{document}

究竟是什么原因导致了这种情况,我该如何修复它,不只是针对这个实例,而且针对将来可能出现的情况?

答案1

宏的替代方案ifthenelse,它不需要任何包。

\documentclass{article}
\newcommand{\ls}[1]{\begingroup\let\or\lor% locally redefine \or
\let\and\land% locally redefine \and
\let\oldsubset\subset% mess around with subset
\let\psubset\oldsubset% 
\let\subset\subseteq%
\ifcsname #1\endcsname%
\ensuremath{\expandafter\csname #1\endcsname}%
\else
???%
\fi\endgroup}
\begin{document}
 $\ls{and}\ls{or}\ls{subset}\ls{psubset}\ls{wurzelbrumpf}$
\end{document}

在此处输入图片描述

相关内容