有没有办法设置宏变量的数据类型?

有没有办法设置宏变量的数据类型?

我创建了一些宏来简化论文中证明和定理的排版。

%the proof builder, takes 1 argument, should be a sequence of \psteps, definined next
\newcommand{\prf}[1]
{
    \begin{proof}
    \begin{align}
        #1
    \end{align}
    \end{proof}
}
% \pstep is designed for use inside the align block of a proof. takes 2 arguments {step::wff}{reference::label}
\newcommand{\pstep}[2]
{
    & #1 & \text{[#2]}
}
%the theorem builder. takes 5 arguments 
%{thm type::thm type str}{thm name::text}{reference::label}{thm statement::mathmode}{proofsteps::pstep block}
\newcommand{\theorem}[5]
{
\begin{#1}[#2]#3
    \begin{equation*}
    #4
    \end{equation*}
    \prf{#5}
\end{#1}
}

这些宏按预期工作。但是,当我使用上面的定理宏时,第 4 个参数包含一些只在数学模式下出现的字符,而 Overleafs 语法检查器发出警告,指出这些字符不在数学模式下。

        \theorem{prop}{generalized modus ponens}{\label{pred:prop:gmp}}
        {
            \vdash_1\phi\vdash_1(\forall x\phi\implies\psi)\tfs\vdash_1\psi
        }
        {
            \pstep{\phi}{hypothesis 1}\\
            \pstep{\forall x\phi}{\ref{pred:ax:gen}}\\
            \pstep{\forall x\phi\implies\psi}{hypothesis 2}\\
            \pstep{\psi}{\ref{prop:ax:mp}}
        }

有趣的是,它不会对 \pstep 参数中的数学模式字符发出相同的警告。有人能解释一下这是为什么吗?有没有办法指定宏参数中允许使用哪种字符,以便语法检查器知道数学模式字符会起作用?同样,宏可以按预期工作,但我不想查看这些不相关的错误消息,尤其是当它们只是杂乱的实际错误时。

答案1

好吧,我找到了一个解决方案,我只是改用 xparse 包来创建我的自定义命令。这是新代码。

% \pstep is designed for use inside the align block of a proof. takes 2 arguments {step::wff}{reference::label}
\newcommand{\pstep}[2]
{
    & #1 & \text{[#2]}
}
%the theorem builder. takes 6 arguments {thm type::thm type str(default thm)}{thm name::text}{reference::label}{href::href}{thm statement::mathmode}{proofsteps::pstep block}

\NewDocumentCommand\theorem{O{thm} m m O{} m m}%
{
    \begin{#1}[#2]#3#4
    \begin{equation*}
    #5
    \end{equation*}
    \begin{proof}
    \begin{align}
        #6
    \end{align}
    \end{proof}
\end{#1}
}

这不会给语法检查器带来错误,并且我可以更好地控制参数选项。

相关内容