\if \else 在 \DeclareDocumentCommand 中如何工作?

\if \else 在 \DeclareDocumentCommand 中如何工作?

DeclareDocumentCommand从数据包中发出了一个命令xparse,但遇到了麻烦。我的问题是\ifmmode(如果是数学模式)和else无法正常工作,因为当我输入时,它会显示和$$ \num{}[] $$中的内容。\ifmmode\else

图片1

以下是部分代码

\DeclareDocumentCommand{\num}{m o o}{
    \ifmmode
        \text{mathmode}
        \IfValueT{#1}{\text{#1}}
        \IfValueT{#2}{
            \IfNoValueTF{#3}{
                \,\text{#2}
            }
        }
    \else
        \text{textmode}
        \IfValueT{#1}{#1}
        \IfValueT{#2}{
            \IfValueT{#3}{#2/#3}
            %\, % Espacio
            \IfNoValueTF{#3}{\ \text{#2}}
        }
    \fi
}

答案1

您使用了\IfNoValueTF但 仅提供了一个分支,而预期有两个分支。您可能想使用\IfNoValueT

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}
\NewDocumentCommand{\num}{m o o}{%
    \ifmmode
        \text{mathmode}%
        \IfValueT{#1}{\text{#1}}%
        \IfValueT{#2}{%
            \IfNoValueT{#3}{% <<< T instead of TF
                \,\text{#2}%
            }%
        }%
    \else
        \text{textmode}%
        \IfValueT{#1}{#1}%
        \IfValueT{#2}{%
            \IfValueT{#3}{#2/#3}%
            %\, % Espacio
            \IfNoValueT{#3}{\ \text{#2}}% <<< T instead of TF
        }%
    \fi
}
\begin{document}
\[ \num{}[] \]
\end{document}

相关内容